1.面向对象概述
-
更加符合现实生活;
-
面对问题,寻找合适的工具,调用合理的方法,解决问题;
-
复杂问题,梳理流程,组合工具和使用方法,灵活应对复杂局面,更具拓展性和维护性;
-
没有合适的工具,就自己设计,自己用;
-
自己设计的工具,足够范用,足够安全稳定,可以开源给别人用;
2.设计对象及注意事项
-
类(设计图):对象共同特征的描述;
-
对象:真实存在的具体实例;
-
结论:java中,必须先设计类,才能创建对象并使用
2.1类注意事项:
首字母大写,满足驼峰式;
一个java文件可以定义多个class,只可以有一个public修饰,且必须是用来修饰文件名;
3.内存机制
3.1两个对象内存图
-
运行Test.class,main方法存入方法区,在栈内存开辟main方法空间;
-
执行第一行,创建变量Car c1 存入栈内存;
-
执行new Car(),在堆内存中开辟对象空间,对象属性值为默认,最后存入成员方法引用地址(指向方法区方法);
-
将空间地址赋给变量c1;
-
根据c1地址和属性索引给c1赋值(原理同数组赋值类似);
-
c1.start()是c1通过地址找到对象,再找到成员方法引用地址,找到start方法,start()方法提取到栈内存运行;
-
由于start()方法是通过c1路径调用,内部属性值访问c1;
3.2 两个对象指向同一个内存图
-
基本原理与上方相同;
-
将s1地址赋给s2,s2修改了堆内存中数据,s1和s2输出值都变化;
3.3 垃圾回收装置
当堆内存中对象,没有被任何变量引用(指向)时,就会被判定为内存中垃圾;
Java存在自动垃圾回收器,会定期清理;
4.构造器
4.1 构造器作用
-
定义在类中,可以用于初始化一个类的对象,并返回对象地址;
-
new Car();中的Car()便是构造器
4.2 构造器格式
修饰符 类名(){
//无参构造器
}
修饰符 类名(形参列表){
//有参构造器
}
public Car(String name, double price) {
this.name = name;
this.price = price;
System.out.println("有参构造器被调用");
}
public Car() {
System.out.println("无参构造器被调用");
}
4.3调用构造器得到对象格式
类 变量名 = new 构造器;
Car c = new Car();
Car car1 = new Car("胜利冲锋", 19.9);
4.4 构造器的分类和作用
-
无参构造器(默认存在):初始化对象时,成员变量数据均采用默认值;
-
一旦有参构造器创建;再用无参构造器需要自行创建;
-
-
有参构造器:初始化对象时,同时可以接收参数为对象赋值;
4.5 this关键词是什么
-
可以出现在构造器中,方法中;
-
代表当前对象地址;
4.6 this关键字作用
可以用于指定访问当前对象的成员变量、方法;
public Car(String name, double price) {
this.name = name;
this.price = price;
System.out.println("有参构造器被调用");
}
public void goWith(String name) {
System.out.println(this.name+"和"+name+"比赛!");
}
Car car = new Car();
car.name = "旋风冲锋";
car.goWith("飓风音速");
//旋风冲锋和飓风音速比赛!
5.封装
-
面向对象三大特征:封装、继承、多态;
-
封装:如何正确设计对象的属性和方法;解决属性和方法属于哪个对象问题;
-
封装原则:对象代表什么,就得封装对应数据,并提供数据对应的行为;
-
基本思想:决定属性和行为的归属问题,行为是用来处理对应属性的;人吃饭睡觉;门开关;票地址价格买票
-
5.1 进行更好的封装
-
对成员变量使用private(私有隐藏)关键字修饰
-
private修饰成员只能在当前类中访问;
-
-
为每个成员提供配套的public修饰的getter和setter方法,
-
方便取值和赋值
-
public class Student {
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age>0 && age<200){
this.age = age;
}else {
System.out.println("不符合符合规范");
}
}
}
Student s = new Student();
s.setAge(-99);
System.out.println(s.getAge());
s.setAge(99);
System.out.println(s.getAge());
不符合符合规范
0
99
5.2 特征的含义
所谓特征,指java的基本特点,即使毫无意义,通常也要满足这样的设计要求来编写;
6.标准 JavaBean
JavaBean:实体类,其对象用于在程序中封装数据;
6.1成员变量和局部变量区别
区别 | 成员变量 | 局部变量 |
---|---|---|
类中位置 | 类中,方法外 | 常见方法内 |
初始化值 | 有默认值,无需初始化 | 需初始化 |
内存位置 | 堆 | 栈 |
生命周期 | 随对象创建存在,随对象消失 | 随方法存在 |
作用域 | 所归属的大括号内 |