一、面向对象的核心思想:分类
二、面向对象分析
例:给传智播客北京校区做一套系统,要求能记录学员信息,教师信息、员工信息、课程、班级、正在上课的班级
1、要明确系统中要记录那些信息
java基础班学员:学科、学号、姓名、性别、年龄
IOS班学员:学科、学号、姓名、性别、年龄
javaEE班学员:学科、学号、姓名、性别、年龄
……
java基础班讲师:编号、学科、姓名、性别、年龄
IOS讲师:编号、学科、姓名、性别、年龄、
javaEE讲师:编号、学科、姓名、性别、年龄
……
学前咨询的员工:
……
2、将上述信息进行分类,禀明企鹅每个类中的具体成员
2.1 学员类:
学科:
学号:
姓名:
性别:
年龄:
2.2 讲师类:
编号:
学科:
姓名:
性别:
年龄:
2.3 员工类:
……
3、面向对象开发:
三、类的定义
1、多个类可以定义到同一个.java文件中,但是一个.java文件中只能有一个public类
2、类体中只能定义属性和行为,其他的语句都不能直接放在类体中
int a;
a = 10;
以上两条语句可以出现在方法中,但不能出现在类体中,即a只能作为局部变量被定义
3、属性:定义为成员变量,定义在类体中,存放在堆里面,成员变量可以自动初始化
4、行为:定义为成员方法,可以有返回值和形参,也可以没有
5、一个类生成一个.class文件
四、类的实例化
1、当我们实例化多个对象时,会在对空间为每个对象单独开辟一块空间,但内部值存储”成员变量的值;
2、方法被存储在方法区内,而且只有这一个空间,被多个对象共享。
3、多个对象会调用一个方法,虚拟机需要判断是哪个对象调用的,在调用时,有个“动态绑定”过程
4、如果在方法体内访问成员变量,通过一个隐式的关键字“this”来区分
五、成员变量与局部变量的比较
1、成员变量定义在类体中,可以是任何的java数据类型
局部变量第一在方法中,可以是任何的java数据类型
2、区别:
1、定义的位置
成员变量:类体中
局部变量:方法中
2、内存中的位置
成员变量:堆中
局部变量(基本数据类型):栈中
3、生命周期
成员变量:实例化一个对象时,在堆中产生,如果没有任何引用来引用这块空间,后期由垃圾回收器不定期检查并回收
局部变量:当所在的作用域代码块被执行,变量产生空间;当变量所在的作用域代码块执行完毕,会被立即从栈中被清掉
4、初始化方式和初始化值:
成员变量:由java自动初始化
局部变量:必须手动初始化
六、匿名对象
1、没有名字的对象
new Student()
2、有些时候,我们在以下情况下,可以使用匿名对象的方式:
2/1 类中的某个方法只需要调用一次
2/2 如果某个方法需要“某个对象的引用”,也就是形参是某个对象的引用,如果我们调用方不需要这个,只需要给方法传递一个引用即可,这时可以使用匿名对象