01-面向对象编程进阶-1
1. static
有 static 修饰的。理解为静态的类的,没有的理解为非静态的对象的。
静态代码块、代码块
- 静态代码块。类的数据初始化,类加载的时候,执行一次。
- 代码块。对象的数据初始化,每次new 对象的时候,都会执行。
有继承关系的父子类。虚拟机运行后,父类的初始化动作先执行。然后是子类的初始化动作。
1.1. 类成员,实例成员
类中被 static 修饰的成员。是类成员。调用方式:类名.成员遍历名/成员方法名();
没有被 static 修饰的成员,是对象(实例)成员。调用方式:对象名.成员遍历名/成员方法名();
静态成员变量,局部变量的存放位置?
使用 static 修饰的类变量,属于类而非实例。
- JDK 8 之前,存放位置: 方法区(Method Area)
- JDK 8 及之后,存放位置: 元空间(MetaSpace,属于本地内存)
局部变量(在方法、代码块、构造函数中定义的变量,包括参数)
- 存放位置: Java 虚拟机栈(JVM Stack) 的 栈帧(Stack Frame)中的局部变量表
1.2. 设计模式-单例模式
23设计模式,问题的最优解。
单例模式解决问题:只能有一个类的实例。
2. extends
单继承,多层继承。父子类。
- 子类有自生和父类 2 张图纸共同设计
- 子类可以继承父类的非私有成员
- Object 类是所有类的祖宗类
2.1. 方法重写
重写父类的方法。
- 权限修饰符修饰符只能>=
- 返回值 (类型更细,比如父类是职业类,子类可以是教师,但不能是狗)
- 方法名一致
- 参数列表一致
2.2. 权限修饰符
权限修饰符:描述类中的成员,可以被其他类访问的范围。
- private:能被本类访问
- 不写:能被包中的类访问 + private 的情况
- protected:能被子类访问(不管是否同包)+ 不写的情况。
- public:能被任意位置的类访问
2.3. super
表示父类的构造器,成员
System.out.println("hello world")
- 编译后的字节码文件,所有子类构造器的第一行默认都是 spuer() 调用父类的无参构造器。
- 如果父类只有有参构造器,则需要 super () 调用有参构造器,必须的吗?不是
2.4. this
表示子类的构造器,成员
System.out.println("hello world")
- 子类的构造器第一行也可以调用自己的兄弟构造器。