Java进阶——Attention Day 3
今天继续整理一下OOP。
1、JVM内存的划分
JVM内存分为“栈” 、“堆” 、 “ 方法区”,用于分别存储不同数据。
- 栈(Stack):用于存储局部变量、引用类型的地址、方法的基本类型变量的参数。
public class memory {
public static void main(String[] args) {
int a = 1;//局部变量
int[] arr = new int[3];//引用类型
int age = 10;
hello(age);
System.out.println(age);
}
public static void hello(int age){//参数
age = 20;
}
}
- 堆(Heap):用于存储类的非静态成员变量、引用类型的实例、方法的引用类型参数的实例。
NOTE:实例就是new出来的东西
- 方法区(Method Area):用于存储类的信息,类的静态成员变量、类的静态方法、非静态方法 、.class信息。
NOTE:方法只有一份,类在实例化对象时,多个对象拥有属于自己的堆空间,但是所有实例对象是共用在方法区中的一份方法去定义的。
2、static关键字
- 用static修饰的成员变量不属于对象
- static变量是属于类的变量,通常通过类名调用
- static成员变量和类的信息一起存储在方法区里面,而不是在堆里面,一个类的static成员变量只有一份,无论创建了多少对象只有一份。
NOTE:
1、静态方法和非静态方法都可以调用静态成员变量
2、静态方法中不可以直接调用非静态成员变量
3、静态方法和非静态方法中都可以调用静态方法
4、静态方法中不能直接调用非静态方法
5、非静态方法可以调用非静态方法
6、静态方法中不能使用this关键字
7、静态方法中不能直接使用非静态成员变量(可以new对象来调用)
3、继承
java中继承指的是一个类继承另一个类,被继承的类叫做父类,继承的类叫做子类,使用extends关键字。
- 子类中相同的属性和方法抽离出放入父类,子类继承父类,实现属性和方法的复用。
- 子类中放入自己特有的属性和方法。
- 子类可以继承父类成员变量和方法。
- 子类不能继承父类的构造器(有参和无参)。
- 当子类属性名和父类相同时,优点调用子类的属性。
- 子类是可以继承父类private修饰的成员变量,但是不能直接使用,可以通过该变量的setter getter方法来访问。
- 子类可以重写父类的方法:子类继承了父类的方法,当子类觉得父类的方法不适用了,可以重新写父类方法功能,子类再调用重写的方法时,执行的是自己重写的方法。
- 重写方法的规则:方法名和参数列表和父类一致。
4、方法重写
方法重写是指子类定义的方法名和父类一致,会覆盖父类中的该方法,调用的是子类自己的方法。
NOTE:
1、方法名称必须和父类的方法名称完全一致。
2、方法的参数列表必须和父类的参数列表完全一致。
3、子类重写父类的方法,访问修饰符必须大于等于父类方法的访问修饰符。
public>protected>默认>private
方法重写和重载的区别
- 方法重写:发生在父子类中,子类重写父类的方法
- 方法重载:发生在本类中,方法名相同,参数列表不同
PS:如有不足,敬请指正!😺
我知道这世界上没有最好,只有更好;我想要的一切都要靠自己的努力得到。