news 2026/10/6 2:25:55

第5章 面向对象基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第5章 面向对象基础

一、面向对象思想

面向对象是一种思想,这种思想可以让我们写代码的思路更贴切于生活

二、类和对象

类:是一组相关属性和行为的集合,将其理解是对象的一张设计图

对象:根据类(设计图)创建出来的实体

关系:根据类创建对象,一个类可以创建出多个对象

Java中想要创建对象,必须先要有类的存在

1、类的组成

属性(名词):成员变量: 跟之前定义变量的格式一样,只不过位置需要放在方法的外面

行为(动词):成员方法: 跟之前定义方法的格式一样,只不过需要去掉static关键字

public class Student { String name = "张三";//成员对象,一般不赋值,使用对象时输出null(堆里面的默认值),成员变量不赋值也不会出错 int age = 23; public void study(){//成员方法 System.out.println("学习Java"); public void eat(){ System.out.println("吃饭"); } }

2、创建对象、使用对象

创建对象

类名 对象名=new 类名();

变量的使用格式

对象名.变量名;

方法的使用格式

对象名.方法名(实际参数);
public class TestStudent { public static void main(String[] args){ //创建对象格式: //类名 对象名= new 类名(); Student stu = new Student(); //使用成员变量格式: //对象名.变量名 System.out.println(stu.name); System.out.println(stu.age); stu.name ="李四";//每创建完一个对象都应该赋值 stu.age = 24; System.out.println(stu.name); System.out.println(stu.age); System.out.println(stu);//2,打印对象名,看到的是内存地址 //com.itheima.oop.Student@b4c966a //com.itheima.oop.Student全类名 //使用成员方法格式: //对象名.方法名(实际参数); stu.study(); stu.eat(); }

3、练习

package com.itheima.oop; public class Phone { String brand; String color; int price; public void call(string name){ System.out.println("给"+ name + "打电话"); public void sendMessage() { System.out.println("群发短信"); }
package com.itheima.oop; public class PhoneTest { public static void main(string[] args){ Phone p1 =new Phone(); p1.brand="小米"; p1.color="白色"; pl.price =4999; Phone p2 = new Phone(); p2.brand="华为"; p2.color="黑色"; p2.price = 6999; System.out.println(p1.brand + "---"+ p1.color + "---"+ p1.price); System.out.println(p2.brand + "---" + p2.color + "---" + p2.price); p1.call(name:"张三"); p1.sendMessage(); p2.call(name:"李四"); p2.sendMessage(); } }

4、类和对象内存图

5、成员变量和局部变量

区别

6、this关键字

当局部变量和成员变量重名的时候,Java使用的是:就近原则

this的作用:调用本类的成员

另外,成员变量在方法中为紫色字体

package com.itheima.mthis; public class Person { int num = 10; public void show() { int num = 20; System.out.println(num);//20 System.out.println(this.num);//this.本类成员变量;10 } public void print() { System.out.println("Print..."); } public void method() { System.out.println(num);//如果不涉及重名问题,this.可以省略不写;10 print();//this.本类成员方法();this.可以直接省略不写 } }

this介绍

代表当前类对象的引用(地址) 哪一个对象调用的方法,方法中的this,就代表哪一个对象 p1.print()--->this--->p1的地址 p2.print()--->this--->p2的地址

this内存图

7、构造方法

又名构造器

初始化一个新建的对象

构建、创造对象的时候,所调用的方法

执行时机:创建对象的时候被调用执行,每创建一次对象,都要执行

(1)格式

1.方法名与类名相同,大小写也要一致

2.没有返回值类型,连void都没有

3.没有具体的返回值(不能由return带回结果数据)

(2)构造方法的作用

1.本质的作用:创建对象

2.结合执行时机:在创建对象的时候,给成员变量赋值

构造方法

package com.itheima.constructor; public class Student { String name; int age; public Student(string name,int age){//构造方法 this.name = name; this.age = age; } } package com.itheima.constructor; public class StudentTest { public static void main(string[] args){ Student stu1 = new Student("张三",23);//使用构造方法new一个stu1出来,实参传递给构造方法,初始化stu1的name和age System.out.println(stu1.name + "---" + stu1.age); Student stu2 = new Student(name:"李四",age:24); System.out.println(stu2.name + "---" + stu2.age); stu1.Student("王五",25);//错误!构造方法不能单独拿出来使用,只能在new对象时使用 } }

(3)构造方法的创建

如果没有定义构造方法,系统将给出一个默认的无参数构造方法

如果定义了构造方法,系统将不再提供默认的构造方法

(4)快捷创建带参构造方法

在类中右键-->Generate-->Constructor-->ctrl+a全选-->确定

(5)执行流程

三、封装

1、面向对象三大特征

封装、继承、多态

2、封装

封装就是将数据(属性)和操作数据的方法捆绑在一起

组成一个整体,也就是类

同时,通过访问修饰符来控制对类中属性和方法的访问权限,从而实现信息隐藏

3、优点

更好的维护数据。使用者无需关心内部实现,只要知道如何使用即可

4、权限修饰符

private 同一个类中

(defalut)什么都不写 同一个类中 同一个包中

protected 同一个类中 同一个包中 不同包的子类

public 任意位置

四、JavaBean

实体类

这个类中的成员变量都要私有,并且要对类中提供无参,带参构造方法。

向外提供相应的getXxx,setXxx方法

快捷创建get、set方法

在类中右键-->Generate-->get、set--Constructor-->ctrl+a全选-->确定

实体类的应用场景是什么? 实体类只负责数据存取,而对数据的处理交给其他类来完成,以实现数据和数据业务处理相分离。

五、static修饰成员变量

static是静态的意思,可以修饰成员变量,也可以修饰成员方法

static成员变量用于共享数据

static修饰成员的特点:

被其修饰的成员,被该类的所有对象所共享

多了一种调用方式,可以通过类名调用

随着类的加载而加载,优先于对象存在

class User { String name; int age; static int onLineNumber;//被其修饰的成员,被该类的所有对象所共享 } public class StaticTest1{ public static void main(String[] args){ User.onLineNumber++;//多了一种调用方式,可以通过类名调用 User u1 = new User(); u1.name="张三"; u1.age = 23; sout(u1.name + "---" + u1.age + "---" + User.onLineNumber); User.onLineNumber++; User u2 = new User(); u2.name = "李四"; u2.age = 24; sout(u2.name + "..." +u2.age + "---" + User.onLineNumber); } }

1、内存图

六、static修饰成员方法

用于常用工具类

类中创建工具类,需要用new方法访问,占用内存

public class ArrayTools { public int getMax(int[] arr) { int max=arr[0]; for (int i = 1;i < arr.length;i++){ if (arr[i]> max) { max=arr[i]; } } return max; } } public class ArrayToolsTest{ public static void main(string[]args){ ArrayTools tools =new ArrayTools();//不用static时 int[] arr ={11,22,33,44,55}; int max = tools.getMax(arr); } }

使用static修饰方法时

public class ArrayTools{ private ArrayTools(){}//将new对象私有化,防止new对象重复加载工具占用内存 public static int getMax(int[] arr) {//使用static修饰工具时,工具直接加载到公共static内存 int max= arr[0]; for (int i=1; i<arr.length;i++){ if (arr[i]> max) { max= arr[i]; } } return max; } } public class ArrayToolsTest { public static void main(string[] args){ ArrayTools tools = new ArrayTools();//不可new对象,因为无法访问private修饰的构造方法 int[]arr ={11,22,33,44,55}; int max = ArrayTools.getMax(arr); //直接使用类名.方法名即可 } }

七、制作工具类的阅读文档

在每个方法上面输入/**回车

/** *这是一个数组的工具类,内部提供了很多数组的便捷操作 *求最大值,求最小值,追历打印数组 * @version 1.0 * @author ys */ public class ArrayTools { private ArrayTools(){} /** *此方法可以从传入的数组中查找最大值并返回 *@paramarr需要求最大值的数组 *@return返回找到的最大值 */ public static int getMax(int[] arr) { int max=arr[0]; for (int i=1;i<arr.length;i++){ if Carr[i]> max) { max=arr[i]; } } return max; } }

上侧工具栏展开,tools,Generate JavaDoc

选择File

Output Directory选择生成路径

下面勾选框勾上@author、@version

Generate生成

找到文件夹中的index.html

1、static注意事项

static中只能访问静态成员(直接访问)

static中没有this关键字

public class StaticTest2 { static int num =10;//加上static之后主方法才能访问 public static void main(string[] args){ System.out.println(num); System.out.println(this);//报错!静态变量仅加载到堆内存,当前变量的地址并没有创建 method(); } } public static void method() {//加上static之后主方法才能访问 System.out.println("method..."); }

八、重新认识main方法

控制台:

public class HelloWorld { public static void main(String[] args){ System.out.println("Helloworld"); } }

public:被JVM调用,访问权限足够大

static:被JVM调用,不用创建对象

因为main方法是静态的,所以测试类中其他方法也需要是静态的

void:被JVM调用,不需要给JVM返回值

main:一个通用的名称,虽然不是关键字,但是被JVM识别

String[] args:以前用于接收键盘录入数据的,现在没用

String[] args的使用

public class MainTest { public static void main(String[] args){ for (int i = 0;i < args.length; i++){ System.out.println(args[i]); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 2:23:15

3 步用 GHelper 替代奥创中心:单进程驻留,帧数不减续航更长

3 步用 GHelper 替代奥创中心&#xff1a;单进程驻留&#xff0c;帧数不减续航更长 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivob…

作者头像 李华
网站建设 2026/10/6 2:11:02

HTML浅浅入门

Hello&#xff0c;各位小伙伴&#xff0c;这篇文章主要给大家浅浅的介绍一些关于HTML的一些标签&#xff0c;并不会非常的深入的进行系统性学习&#xff0c;毕竟我们后面更多的功夫是要花在后端的技术知识上进行探究~~~1.标题标签2.段落标签3.换行标签4.图片标签5.超链接6.表格…

作者头像 李华