Java中类的加载顺序
作者:网络转载 发布时间:[ 2014/10/13 10:01:44 ] 推荐标签:Java 软件开发
Class A:
public class A extends B{
//静态变量
static int i=1;
//静态语句块
static {
System.out.println("Class A1:static blocks"+i);
}
//非静态变量
int j=1;
//静态语句块
static{
i++;
System.out.println("Class A2:static blocks"+i);
}
//构造函数
public A(){
super();
i++;
j++;
System.out.println("constructor A: "+"i="+i+",j="+j);
}
//非静态语句块
{
i++;
j++;
System.out.println("Class A:common blocks"+"i="+i+",j="+j);
}
//非静态方法
public void aDisplay(){
i++;
System.out.println("Class A:static void aDisplay(): "+"i="+i+",j="+j);
return ;
}
//静态方法
public static void aTest(){
i++;
System.out.println("Class A:static void aTest(): "+"i="+i);
return ;
}
}
Class ClassLoading :
public class ClassLoading {
public static void main (String args[]) {
A a=new A();
a.aDisplay();
}
}
程序运行结果如图:

通过上述示图,我们可以比较清晰的看出java类的整个加载过程。
若要加载类A,则先加载执行其父类B(Object)的静态变量以及静态语句块(执行先后顺序按排列的先后顺序)。
然后再加载执行类A的静态变量以及静态语句块。(并且1、2步骤只会执行1次)
若需实例化类A,则先调用其父类B的构造函数,并且在调用其父类B的构造函数前,依次先调用父类B中的非静态变量及非静态语句块.后再调用父类B中的构造函数初始化。
然后再依次调用类A中的非静态变量及非静态语句块.后调用A中的构造函数初始化。( 并且3、4步骤可以重复执行)
而对于静态方法和非静态方法都是被动调用,即系统不会自动调用执行,所以用户没有调用时都不执行,主要区别在于静态方法可以直接用类名直接调用(实例化对象也可以),而非静态方法只能先实例化对象后才能调用。
OK,总结到这里了,如果有地方说的不好或有错误的地方,欢迎大家指出,定当改正,谢谢。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等

sales@spasvo.com