class B { C c = new C(); B() {
System.out.println("class b ");
}}public class A {
C cc=new C();
public static void main(String[] args) {
}}
这个程序,没有输出class b 
我是这样看这个程序,首先运行class A,初始化成员变量,这时候就运行C cc=new C();  然后输出结果 class A。
但是没有输出,为什么?为什么把C cc=new C(); 修改成static C cc=new C();之后就可以输出class A了呢?

解决方案 »

  1.   

    楼主怎么没有c类的定义呢?暂且不管它.
    这个程序首先由static void main进入A运行A的构造函数构造对象,然后初始化成员变量.由于static是类变量,若有static变量则在类加载时执行拉而不是在构造对象时执行.
      

  2.   

    楼主没把代码全贴出来,应该还定义了一个class C.原因就在于static,因为静态变量(类变量)是预先分配空间的,即不管是否实例化类都是要分配空间,所以当加上static后,就会输出。如果没有加上static只有在实例化这个类的时候才会有输出。
      

  3.   

    你这程序是你自己写的,还是别人写的。你要表达什么?看到回帖  在问问
     你是不是就想输出class b??
    class C{
     static void B() {
    System.out.println("class b ");
    } }
    public class A { public static void main(String[] args) {
        C cc=new C();
        cc.B(); }
    }
      

  4.   

    package bullshit;
    class C{
     static void B() {
    System.out.println("class b ");
    } }
    public class A { public static void main(String[] args) {    C.B(); }
    }
    你的代码有问题。 全发写 看看。
    我估计你C类中的B方法是这么写的吧。static C cc=new C();这么写我不太明白什么意思。static这个关键字,可以将字段和方法设定成这个样。如果你给方法定义成类方法,你不用创建对象,用类直接就可以使用这个方法。