二、JAVA类加载顺序
JAVA类加载顺序:
1).按代码顺序递归加载静态成员/代码块,先父类再本类;
2).按代码顺序递归加载非静态成员/代码块,先父类再本类;
3).按代码顺序递归调用构造函数,先父类再本类;
JAVA类加时机:
1).调用静态成员时,加载静态成员所在的类及父类;
2).第一次new对象时加载(第二次new不再加载)
3).加载子类会先加载父类.有static和final修饰的成员不会被加载;当成常量使用;
link:http://www.hake.cc/a/biancheng/ruanjian/java/2011/0914/14333.html
public class Child extends Parent{
public final int age = 12;
@Override
public void init() {
System.out.println(age);
}
public Child(){
}
public static void main(String...args){
Child c =
new Child();
System.out.println(c.age);
}
}
class Parent{
public void init(){
System.out.println("init in Parent");
}
public Parent(){
this.init();
}
}
这里输出的都是12,但调试的时候显示第一个是0。不知道为什么,哪位牛人知道请告知,谢谢。
分享到:
相关推荐
本篇文章是对final变量的初始化进行了详细的分析介绍,需要的朋友参考下
1.static修饰一个属性字段,那么这个属性字段将成为类本身的资源,public修饰为共有的,可以在类的外部通过test.a来访问此属性;在类内部任何地方可以使用.如果被修饰为private私有,那么只能在类内部使用.
在Java中变量可以分为成员变量和局部变量 成员变量 通常每个类中成员变量可以分为 类变量(static修饰的变量) 以及 实例变量 针对这两种类型的变量...当final变量未初始化时系统不会进行隐式初始化,会出现报错。
了解final关键字的一些规则,如final变量的初始化、final方法的重写和final类的继承等。 阅读建议: 建议读者在阅读前具备Java的基础知识,包括类、对象、方法和变量等概念。 在阅读过程中,尝试编写简单的Java程序...
类变量:当类初始化时,系统会为类变量分配内存,并赋默认值。 实例变量:当创建对象时,系统会为该对象的实例属性分配内存,并赋默认值。 final修饰局部变量 可以在定义时指定默认值,则后面代码中不能再对改变量...
final型的静态变量必须在定义处或者在静态代码块中被显式初始化。 2. 局部变量的初始化 局部变量必须在使用之前做显式初始化。如果编译器能够确认一个局部变量在使用之前可能没有被初始化,编译器将报错。 如果...
如果修饰的是引用类型的变量,那么初始化后就不能让他指向另一个对象,如下图所示 2.修饰方法 用final关键字修饰的方法是不能被该类的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下...
1.类的初始化顺序 2.到底创建了几个String对象(三)——变量(属性)的覆盖 (四)——final、finally和finalize的区别 (五)——传了值还是传了引用(六)——字符串(String)杂谈 (七)——日期和时间的处理 ...
类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...
本问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。 1. 类的属性,或者叫值域 2. 方法里的局部变量 3. 方法的参数 对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始...
不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时 未创建此类对象)的静态对象时,所有的静态变量也要按它们在类中的顺序初始化。 2、 继承时,对象的初始化过程 (1) 主类的超类...
创建对象包括声明、实例化和初始化三方面的内容。通常的格式为 : 1. 声明对象 对象声明实际上是给对象命名,也称定义一个实例变量。对象声明的一般格式为: type name 其中,type 是一个类的类名,用它声明的对象将...
其初始化可以在两个地方:一是其定义处,也就是说在final变量定义时直接给其赋值;二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给...
静态关键字用于修饰类的成员(方法、变量、代码块),使其在类加载时被初始化,并且可以通过类名直接访问。静态成员属于类本身,而不是类的实例。静态方法无法访问非静态成员。 4.什么是Java的final关键字? final...
4.1 由构建器保证初始化 4.2 方法过载 4.2.1 区分过载方法 4.2.2 主类型的过载 4.2.3 返回值过载 4.2.4 默认构建器 4.2.5 this关键字 4.3 清除:收尾和垃圾收集 4.3.1 finalize()用途何在 4.3.2 必须执行清除 4.4 ...
1.1 JAVA面试题解惑系列(一)——类的初始化顺序 1.2 JAVA面试题解惑系列(二)——到底创建了几个String对象? 1.3 JAVA面试题解惑系列(三)——变量(属性)的覆盖 1.4 JAVA面试题解惑系列(四)——final、...
6.4.1 final变量 177 6.4.2 final方法 181 6.4.3 final类 182 6.4.4 不可变类 182 6.4.5 缓存实例的不可变类 186 6.5 抽象类 188 6.5.1 抽象方法和抽象类 188 6.5.2 抽象类的作用 191 6.6 更彻底的抽象:...
4.1 由构建器保证初始化 4.2 方法过载 4.2.1 区分过载方法 4.2.2 主类型的过载 4.2.3 返回值过载 4.2.4 默认构建器 4.2.5 this关键字 4.3 清除:收尾和垃圾收集 4.3.1 finalize()用途何在 4.3.2 必须执行清除 4.4 ...
一旦引用被初始化指向一个对象,就无法再把它指向另一个对象。 3>final方法:一是把方法锁定,以防止继承类修改它的含义,二是确保继承中使方法行为保持不变,并且不会被覆盖。类中所有的private方法都隐式地指定为是...