Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • 理解java类加载原理有什么用呢?

    post by onelong / 2011-11-14 1:27 Monday [java]

    本篇文章功利性很强!今天抛开类加载器去说类加载原理的实用性的。

    1、在http://www.ways2u.com/?post=333的例子,估计你以后不会这样写单列了!

    2、你知道为什么类的静态字段不需要自己指定默认值了。是的,这就是一个优化的问题,static int a = 0;还不是不要=0;这样性能更好。

    3、知道静态的字段,动态的谁初始化标记早。当然我不认为这是使用静态比动态快的原因。这是jvm方法区数据结构,字段排查算法等导致的。或者大家有更好的说法,我只是猜猜的!java静态方法调用时间基本是固定的,但是不是静态的呢,不固定,有时候偏差会很大。这是使用静态方法的高效的原因之一吧!

    算了,先讲到这里了!下面测试一段代码:是另一个范畴的,

    public class MyTest2

    {

    int i = 1;

    static int j = 1;

    {

    System.out.println("not static:"+i);

    }

    static {

    System.out.println("static:"+j);

    }

    public MyTest2()

    {

    System.out.println("MyTest2:"+i);

    }

    public static void main(String[] args){

    new MyTest2();

    }

    }

    输出结果:

     

    static:1   

    not static:1

    MyTest2:1

    动态块,或者说匿名构造函数在在构造函数之前调用。但是还是不知道实例字段什么时候初始化。书上谈到实例变量是在类实例化时分配内存的,初始化顺序应该是字段(实例块或动态块,我是这样说的)-构造函数。过程应该也是指定默认值,初始化为指定值。块和字段的优先级应该是相同的吧

    标签: 虚拟机 java
    引用地址:
     

    我要评论