class Test{
 private int i=j;
 private int j=10;
 public static void mai[code=Java]n(String[] args)
  {
    System.out.println(new Test().i);
  }
}[/code]这个程序因为j在i后面才定义,所以导致编译通不过。public class Test { 
 private int i = returnJ(); 
 private int j = 10; 
private int returnJ() { 
 return j; 
 } 
 
 public static void main(String args[]) { 
 System.out.println((new Test()).i); 
 } 
 } 
按道理创建test对象后,初始化i,调用returnJ方法,这个时候返回的j还是没有初始化的啊。可为什么在这里又可以编译通过而且输出10了呢。

解决方案 »

  1.   

    你想把i这个私有属性点出来?```这怎么可能办的到呢?1你不是static 2你是private(私有的)不是public(共有的)的
      

  2.   

    private 你篇人吧```private都 能调用到returnJ()  ???????
      

  3.   

    private修饰的类,属性,方法只能给该类对象访问,其子类不能访问。new Test(),出来一个对象再去调用自己的私有方法当然可以了,我晕我只是不明白,这样为什么就可以编译通过了,因为运行到return j 的时候,j还是没有初始化就赋值给了i。对程序有疑问,你编译运行一下就可以了,看看结果是不是0
      

  4.   

    就算能成吧```````程序是先调用自己的构造方法它会自动的将你的属性的值设置为默认,你的 i 是int类型 所以为0,j也为0````
      

  5.   

    是啊,应该是调用return方法时,用到j了,然后给它初始化为0,再返回给i;可是这样一来为什么第一个程序又编译都通不过,不可以也先给j初始化为0然后赋值给i吗。
      

  6.   

    Test(){
     i=returnJ();
     j = 10;
    }
    你没写构造方法所以java会自动的给你弄一个默认的Test(){}里面就是初试你的成员变量的int默认为0所以i,j都会为0
    你的的值给你初试为0了,但是你又将returnJ()的值给了i  returnJ()返回的值是j 但是构造初试为0 结果把j=0的值在给了i所以最后你打印的值为0了,如果你自己写个构造方法,如上。在打印看看结果``
      

  7.   

    12楼大哥``````
    public class Test { 
     private int i = returnJ(); 
     private int j = 10; 
    private int returnJ() { 
     return j; 
     } 
     
     public static void main(String args[]) { 
     System.out.println((new Test()).i); 
     } 
     } 
    答案为10`!?  你的机子``我晕死`
      

  8.   

    xiaomaha我知道你的意思,我是说,如果我们给出一个空的无参的构造方法,系统就不会给我们提供构造方法了,那么,在哪里去初始化???
      

  9.   


    说了 他的第一种情况 楼主说不能编译通过的那个 我的机子可以 你试验了没有
     public class Test { 
     private int i =10; 
     private int j = 10; 
     } 
     
     public static void main(String args[]) { 
     System.out.println((new Test()).i); 
     } 
     } 
      

  10.   

    哈哈 我很晕 非常晕 不是一般的晕 
    刚又试了一遍 输出0 因为我在12楼回帖的时候的确输出是10  当时还想截图来着 想想好像没必要截就没截 所以我可以记得输出10是肯定的 刚输出0 感觉很奇怪 然后我又点了一次保存 再来javac Test.java java Test 出错 哈哈哈还没这么晕过
      

  11.   

    是10 刚一激动少删了个}public class Test { 
     private int i = 10; 
     private int j = 10;  
     
     public static void main(String args[]) { 
     System.out.println((new Test()).i); 
    }
      

  12.   

    public class Test { 
     private int i = returnJ(); 
     private int j = 10; 
    private int returnJ() { 
     return j; 
     } 
     
     public static void main(String args[]) { 
     System.out.println((new Test()).i); 
     } 
     } 
    我说的是这样,输出0。你那样一改已经全都初始化好了。不能编译的是这个class Test{
     private int i=j;
     private int j=10;
     public static void main(String[] args) 
      { 
        System.out.println(new Test().i); 
      } 
    因为初始化得按顺序,初始化i用到的j必须已经初始化了