oop 面向对象编程
编程方式
面向对象和面向过程的思维
1 面向过程是一种执行者的思维,简单的问题可以使用面向过程
2 面向对象是一种设计者的思维,解决复杂,需要协作的问题可以使用面向对象
3 宏观上:通过面向对象进行整体设计,微观上:执行和处理数据使用面向过程
类:class 看做是一个模板,系统根据类来定义造出对象,是静态的,
对象:object 对象是类的实例,就是类的具体是实现,是动态的,
-- 类中的三个成员 属性field 方法method 构造器 constrctor
注意构造器是用于对象的初始化,不是创建对象!
创建对象的步骤 1 分配对象空间,对成员变量进行初始化,2 执行属性的显示初始化 3 执行构造函数 4 返回对象的地址给相关变量
构造器四要素:1 构造器要通过new关键字调用! 2 构造器返回类型是本类型 不能使用reture 3 编译器会自动给一个类定义一个无参构造器
4构造器名字和类名一样
jvm 组成 栈 程序计数器 线程都享, 堆 方法区 元空间
1 栈 是用来执行方法的地方,每一个方法调用都会创建一个栈,每一个线程都会创建一个栈,栈属于线程私有,
2 堆 用来存储创建好的对象和数组,只有一个堆,被所有线程共享,分代算法 垃圾回收工作区
3 方法区就是元空间 存放类的相关信息,静态变量,字符串常量,
垃圾回收器 1 发现无用对象 2 回收无用对象释放空间
无用对象就是没有任何变量引用改变量,
垃圾回收器的算法: 1 引用计数法 2 分代回收
-this的本质就是 指向当前对象地址
1 在方法中this指向的调用该方法的对象
2 在构造器中this指向正要初始化的对象
3 this()方法是调用构造器的,只能在构造器中使用,必须位于方法第一位,
4 this执行变量时只能是指向成员变量,不能指向静态static变量, 所有一般可以用来区分成员和参数的变量,

- static 可以修饰变量和方法 代表是属于类的
- 生命周期和类相同! 是类的公用变量或是公用方法,被类的所有实例共享,
- static 只有一份
- 在static中不能访问非static成员
- 静态初始化块 用于类的初始化,构造器是对象的初始化
- 先执行静态语句在执行成员变量
final 修饰变量 不可变固定 修饰方法 不能被子类重写 修饰类后不能被继承
1 extends 继承 java中类只有单继承 接口是多继承,
子类继承父类后可以得到父类中的全部属性和方法(构造器除外)注意私有属性和方法不能访问,
2 组合 就是父类对象被子类属性引用,结婚就是组合可以复用对方的属性和方法
=============
public class Test {
public static void main(String[] args) {
Sanwa sanwa = new Sanwa();
System.out.println(sanwa.dawa.name);
System.out.println(sanwa.dawa.getName());
System.out.println(sanwa.erwa.name);
System.out.println(sanwa.erwa.getName());
}
}
class Dawa{
public String name = "大娃";
public String getName(){
return this.name+"吐火!";
}
}
class Erwa{
public String name = "二娃";
public String getName(){
return this.name+"吐水!";
}
}
class Sanwa{
Dawa dawa = new Dawa();
Erwa erwa = new Erwa();
}
- "==" 表示比较双方是否相同,基本类型是比较值,引用类型是比较地址相同就是相同
- equals 表示提供定义对象内容相等的逻辑,判断内容是否相同是根据hashcode值是否相同
- String 就是将char串起来 统一使用,
- String类是不可变字符序列 这类是final修饰的 一旦赋值之后就不能更改,字符串有缓存池,是可以共享
- 连接符 +
- String buffer 线程安全 可变字符序列 可以修改
- String joiner 可以添加前缀后缀和间隔