面向对象编程
- 开发一个一个的对象,把数据交给对象,再调用对象的方法来完成对数据的处理。
例如设计一个学生的对象,其中有姓名和成绩等,录入不同的信息就可以产生多个学生的数据。
学生的数据,找学生对象处理;
汽车的数据,找汽车对象处理;
手机的数据,找手机对象处理。
程序中的对象
对象本质上是一种特殊的数据结构。
对象的产生
- class,也就是类,也称为对象的设计图(或者对象的模板)。
设计 类 相当于设计一张“表”,有了“表”之后就可以新建对象了。
也就是说,先用class设计出对象的模板,然后再用class来new对象,new出一张张表格,有多少张这样的表格,就有多少个对象。
public class 类名{ 1.变量,用来说明对象可以处理什么数据 2.方法,描述对象有什么功能,也就是可以对数据进行什么样的处理 ... }
类名 对象名 = new 类名();
对象的执行原理
计算机是通过虚拟机中的三块区域(方法区、栈内存、堆内存)配合来执行我们的面向对象程序的,
- 首先会执行Test类,因此会先把Test类加载到方法区里面
- 然后执行Test类里面的main方法,main方法是提到栈内存进行执行的
- 接着就执行main方法的第一行代码,因为此处第一行代码是在创建学生类,因此会把这个学生类也加载到方法区里面
- 用这个学生类定义一个s1变量,变量是放在方法里面的,因此它会在main方法里开辟一块变量空间来代表s1这个变量
- 执行new对象时,这个new出来的学生对象会放在堆内存里面,会在堆内存中开辟一块内存空间出来,可以把这个内存空间理解成学生表,该内存空间会有自己的地址,学生类里面创建的变量一开始都是初始值,且这个对象里面还有一个类的地址信息,该地址指向当前该学生对象是由哪个类创建的。
- 接着会把这个学生类的地址赋值给s1。
- 然后就可以根据s1中存储的地址,指向那个学生类,进而改变那个学生类的数据;再通过学生类的地址找到定义它的类,去执行方法。
- Student s1=new Student();
- 每次new Student(),就是在堆内存中开辟一块内存区域代表一个学生对象。
- s1变量里面记住的是学生对象的地址。
如何识别引用类型的变量?
Student s1=new Student();
s1变量中存储的是对象的地址,因此变量s1也称为引用类型的变量。
类和对象的一些注意事项
- 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car...
- 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
- 成员变量本身存在默认值,在定义成员变量时一般来说不需要赋初始值(没有意义)。
- 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
- 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
- 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。
注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。Java存在自动垃圾回收机制,会自动清楚掉垃圾对象,程序员不用操心。
END