继承关系类的加载顺序、重写与重载

来源:互联网 发布:空间数据库吴信才 编辑:程序博客网 时间:2024/05/16 14:23

在聊类的加载顺序之前,首先了解一下JVM的运行时数据区:

虚拟机栈区:它是线程私有的,存放基本类型的数据、对象的引用和returnAddress;每个方法被执行的时候都会创建一个栈帧,用于存放局部变量表、操作数栈、动态链接、方法出口等信息。一个方法从被调用到执行结束的过程,对应着一个栈帧在虚拟机中从入栈到出栈。我们平时说的“堆栈”中的栈,就是Java虚拟机栈中局部变量表的部分。
局部变量表:编译时期可知的各种基本数据类型(long和double会占用两个局部变量空间,其余占一个)、对象的引用、和returnAddress(指向一条字节码指令的地址)
堆区:也叫Java堆或者GC堆,是线程共享的,存放对象的实例和数组,是GC主要管理的区域。
方法区:线程共享的,被虚拟机加载的类信息、常量、静态变量(常量池及类型卸载)
程序计数器:线程私有的,下一条指令的地址。
本地方法栈:线程私有

类的加载顺序:父类的静态成员变量->父类的静态代码块->子类的静态成员变量->子类的静态代码块 ,以上的执行是在类加载到方法区的时候的执行顺序。
new xxx()的操作:父类的非静态属性、非静态代码块->父类的构造方法->子类的非静态属性、非静态代码块->子类的构造方法

重写:

1、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
2、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private);
3、重写的方法的返回值必须和被重写的方法的返回一致;
4、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
5、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
6、静态方法不能被重写为非静态的方法(会编译出错)。

重载:

1、与返回值类型无关
2、方法名必须相同、参数形式必须不同。可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;

注意:子类重写父类的方法后,调用的是子类的方法,即使是在父类中的调用也是如此。

原创粉丝点击