面向对象
类与对象
public class 类名 {
1.成员变量(代表属性)
2.成员方法(代表行为)
3.构造器
4.代码块
5.内部类
}
使用对象:
-
访问属性
对象名.成员变量
-
访问行为
对象名.方法名(…)
用来描述一类事物的类叫做JavaBean类,在这里不写main方法
编写main方法的类叫做测试类,可以在测试类中创建javabean类的对象并进行赋值调用
类名首字母建议大写,需要见名知意、驼峰模式
一个Java文件中可以定义多个class类,且只有一个类是public修饰,而且public修饰的类名必须成为代码文件名,建议一个Java文件定义一个class类
成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化之;一般无需指定初始化值,存在默认值
对象的成员变量默认值规则:
基本类型:
基本类型 | 默认值 |
---|---|
byte、short、int、long | 0 |
float、double | 0.0 |
boolean | false |
引用类型:
引用类型 | 默认值 |
---|---|
类、接口、数组、String | null |
ps:按住鼠标滚轮可以竖向批量修改,也可以按住Alt键配合鼠标左键使用
封装(极其重要)
private关键字
-
是一个权限修饰符
-
被private修饰的成员只能坐在本类中才能访问
成员变量和局部变量
在方法内部称为局部变量
在方法外部,类的里边叫做成员变量
使用变量的时候采取就近原则
this关键字
同C++的this指针,这里不再介绍
构造方法
public class Student {
修饰符 类名(参数) {
方法体;
}
}
特点:
1.方法名与类名相同,大小写也要一致
2.没有返回值类型,连void也没有
3.没有具体的返回值(不能由return带回结果数据)
在创建对象的时候,由虚拟机自动调用,作用是给成员变量进行初始化的
每生成一个对象,就会调用一次构造方法
-
推荐手写无参构造和有参构造
标准JavaBean
命名规则:
1.类名要见名知意
2.成员变量使用private修饰
3.至少提供两个构造方法
无参构造
有参构造
4.成员方法
提供每个成员变量对应的setXXX()/getXXX()
如果还有其他行为也要写上
快捷键:Alt+Fn+Insert可以快速生成构造方法与set & get方法
也可以使用插件PTG
右键空白处点击ptg to javabean
即可
但是会多生成一个toString方法
对象内存图
当运行一个类的时候,字节码文件加载时会进入方法区,而方法运行进入栈空间
一个对象内存图
Student s = new Student();
1.加载class文件
2.申明局部变量
3.在堆内存中开辟一个空间
4.默认初始化
5.显示初始化
6.构造方法初始化
7.将堆内存的地址值赋值给左边的局部变量
两个对象内存图
同一个对象内存图一样,也会涉及到栈内存,堆内存和方法区
两个引用指向同一个对象
Student stu1 = new Student();
Student stu2 = stu1;
两个对象共享堆内存中的同一块空间,因此修改stu2会覆盖原来的值,即修改了stu1
this的内存原理
this的作用:区分局部变量和成员变量
this的本质:方法调用者的地址值(对象在堆内存中的地址值)
成员和局部
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置不同 | 类中、方法外 | 方法内、方法申明上 |
初始化值不同 | 有默认初始化值 | 没有默认值,使用前要完成赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法的运行结束而消失 |
作用域不同 | 在整个类中有效 | 在当前方法中有效 |
能够区分成员变量与局部变量即可