1、调用顺序:
JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。
先初始化父类的静态代码--->初始化子类的静态代码-->
(创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码--->初始化父类构造函数--->初始化子类非静态代码--->初始化子类构造函数
2、类只有在使用New调用创建的时候才会被JAVA类装载器装入
3、创建类实例时,首先按照父子继承关系进行初始化
4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法
5、类消除时候,首先消除子类部分,再消除父类部分
1. 父类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
2. 子类静态成员和静态初始化块 ,按在代码中出现的顺序依次执行
3. 父类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
4. 父类构造方法
5. 子类实例成员和实例初始化块 ,按在代码中出现的顺序依次执行
6. 子类构造方法
例子:
public abstract class Base {
//
5、初始化父类的非静态代码
public int age = getNumber(100);
//
静态成员变量和静态初始化块级别相同 所以按照在代码中的顺序依次执行
//
1、初始化父 静态成员变量 static int sage
static int sage = getNumber(50);
//
2、初始化父 静态初始化块 static
static {
System.out.println("base static block");
}
{
System.out.println("base nonstatic block");
}
//
6、初始化父类构造函数
Base()
{
System.out.println(age);
System.out.println("base start");
draw();//
会调用子类覆盖后的方法
System.out.println("base end");
}
static int getNumber(int base) {
System.out.println("base.getNumber int" + base);
return base;
}
public void draw() {
System.out.println("base.draw");
}
}
public class InitializeOrder extends Base {
//
7、初始化子类的非静态代码
public int age = getNumber(1001);
//
8、初始化子类的非静态代码
private int _radius = getNumber(10);
//
3、初始化子 静态成员变量 static int sage
static int sage = getNumber(250);
//
4、初始化子 静态初始化块 static
static {
System.out.println("subclass static block");
}
{
System.out.println("subclass nonstatic block");
}
//
9、初始化子类构造函数
InitializeOrder(int radius) {
_radius = radius;
System.out.println(age);
System.out.println("initializeOrder initialized");
}
public void draw() {
System.out.println("initializeOrder.draw " + _radius);
}
/** */
/**
* @param args
*/
public static void main(String[] args) {
new InitializeOrder(1000);
}
}
分享到:
相关推荐
介绍一下java程序初始化的顺序,这会对您以后的开发所有帮助
Java初始化顺序1
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
作为一名程序员必须知道Java初始化顺序......
本篇文章主要介绍了Spring 中如何控制2个bean中的初始化顺序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
一个java代码初始化具体过程的的demo
C++和Java初始化顺序的比较代码, 详细的解说请参考博客地址, http://blog.csdn.net/ostrichmyself/archive/2010/11/25/6035538.aspx
对java类初始化以及顺序,详解,由于转载仅供大家参考!
具体内容见博客
java面试题-类的初始化顺序.doc 大家在去参加面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量,构造器里可能还有一段代码对变量值进行了某种运算,...
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
java 静态_非静态 字段_方法_代码块 子类父类构造_初始化顺序! 三个class 让你清清楚楚 第一个class java代码如下: package initialOrder; class Parent { // 静态变量 public static String p_StaticField...
“礼让”原则学习Java对象初始化顺序
java对象的初始化顺序[参考].pdf
对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,网上关于Java中对象初始化顺序的文章很多,这篇文章我们将详细介绍Java中对象初始化顺序。有需要的可以参考学习。
JAVA面试题解惑系列(一)——类的初始化顺序-JAVA程序员JAVA工程师面试必看
JAVA面试题解惑系列类的初始化顺序JAVA程序员JAVA工程师面试必看.pdf