JVM主要的三块内存:栈内存,堆内存,方法区。
方法区放代码片段 classloader将字节码文件装载到JVM中。
栈:在方法被调用时,方法需要的内存空间在栈中分配。栈存储局部变量。
堆:实例变量,在类中定义的,开辟在堆内存。存储对象以及对象的实例变量。
访问实例变量 引用.实例变量名。System.out.println(s1.no)
保存对象内存地址的变量叫引用。对象和引用区别。引用是 :但凡是变量,该变量保存了内存地址,指向堆内存当中的对象。对象是new创建的,在堆内存中存储。
抽象类无法创建出对象, 类在现实世界中是不存在的。抽象类是类和类之间有共同特征,将这些有共同特征的类再进一步抽象形成了抽象类。类本身不存在的,所以抽象类无法创建对象。类和类之间具有共同特征叫抽象。类到对象叫实例化,对象到类是抽象。抽象类的子类可以是抽象类。
抽象类属于引用数据类型,不属于基本数据类型。抽象方法,没有实现的方法,没有方法体的方法。
方法重写:重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
(3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。
继承:子类继承父类代码,可以得到复用。重要作用为继承有方法的多态和覆盖机制。
superclass父类 subclass子类 JAVA只支持单继承,不支持多继承。
特点:没有方法体,以分号结尾。抽象类中不一定有抽象方法。
abstract class Account{}
public abstract void doSome();没有实现的方法,只是抽象的行为。
接口:interface A
接口只允许出现常量和抽象方法。接口不能有方法体。接口是一种引用数据类型,支持多继承。元素都是public修饰,接口中抽象方法中public abstract 可以省略】