解决方案 »

  1.   

    去掉p.name的时候没有执行是因为P1类没有加载,加上p.name的时候P1类加载了,所以静态块自动执行。
      

  2.   

    执行到P1 p=null;时不会加载类,在执行p.name时,由于是调用P1类的静态变量,就会加载P1类。然后就会加载P1类中的静态块或静态变量。
      

  3.   

    看一下下面的例子,class Person{
    static{
    System.out.println("wangwuyi");
    }
    static String name = "jing";
    public Person(){
    System.out.println("qing");
    System.out.println(dsdf);
    }
    }public class Static { public static void main(String[] args) {
    Person p = null;
    System.out.println(p.name);
    }
    }Person p= null;的时候没有初始化类,因为没有new,没有掉要构造器,但是p.name的时候初始化了类,初始化类的时候肯定是先执行静态初始化块的内容。有趣的是类的生命周期是类加载、连接、初始化、使用、卸载。然而调用p.name的时候正是初始化阶段,应该执行完了连接阶段,怎么没有把System.out.println(dsdf);这一错误检测出来那?求解释
      

  4.   


    没有new,构造函数不被调用
      

  5.   


    没有new,构造函数不被调用这个是肯定的,我的问题是类的生命周期中“连接”的作用不是“类是否合法”吗??我感觉上面的类有问题怎么没有检测出来???
      

  6.   


    没有new,构造函数不被调用
    你这个能编译通过吗
      

  7.   


    没有new,构造函数不被调用
    你这个能编译通过吗你可以运行试试
      

  8.   

    http://www.cnblogs.com/alexlo/archive/2013/03/05/2944573.html这个也许能帮到你...
      

  9.   

     System.out.println(dsdf);编译错误啊
      

  10.   

    静态成员不属于类, 只要有一个静态成员被调用,静态的东西都会被加载,而且只会加载一次。
    你要是new的是肯定是加载静态成员 。
    定义以个变量指向空,类是什么也不会做的。
      

  11.   


    补补Java基础可以不,别误人子弟。。
      

  12.   


    补补Java基础可以不,别误人子弟。。我觉得java基础挺好呵呵 你有啥见解说啊  我哪说的不对 ,你指出来。
      

  13.   


    补补Java基础可以不,别误人子弟。。我觉得java基础挺好呵呵 你有啥见解说啊  我哪说的不对 ,你指出来。
    可能是我反应过度,语气有点重只有一点“静态成员不属于类”,静态成员本来就是属于类的,实例成员属于对象的,静态变量也叫类变量,静态方法也叫类方法。
      

  14.   


    补补Java基础可以不,别误人子弟。。我觉得java基础挺好呵呵 你有啥见解说啊  我哪说的不对 ,你指出来。
    可能是我反应过度,语气有点重只有一点“静态成员不属于类”,静态成员本来就是属于类的,实例成员属于对象的,静态变量也叫类变量,静态方法也叫类方法。应该说静态成员不属于类对象。是属于类。