public class A1{
private int s;
private int f; public class B{
public class C{
//f = 2; //此处赋值不能成功编译
public void me(){
f = 2;//此处赋值能成功编译
System.out.println("在内部类f="+f);
}
}
public void mb(){
s =100;
System.out.println("在内部类s="+s);
C c1 = new C();
}
}
public void ma(){
B i = new B();
i.mb();
}
}
问题就是为什么在里边能通过,而在外边不能通过?  请具体说说原因,然后我会贴上我们的理解想法,谢谢

解决方案 »

  1.   

    //f = 2; //此处赋值不能成功编译
    这里是C这个类的类定义部分,
    类定义部分可以做什么呢?
    声明变量(可同时赋值)
    方法声明(可同时实现)而你这是在做什么?你这是一条直接的赋值语句不要说你这样不能通过编译了
    就算你这样子定义
    public class C{
                    private int x;
                    x = 2;//这都是不合法的
                    //f = 2; //此处赋值不能成功编译
                    public void me(){    
                    f = 2;//此处赋值能成功编译
                    System.out.println("在内部类f="+f);
                    }
                }
    ……
      

  2.   

    “public class C{
                    //f = 2; //此处赋值不能成功编译
                    public void me(){    
                    f = 2;//此处赋值能成功编译
                    System.out.println("在内部类f="+f);
                    }
                }

    类中分属性和方法,你把“f = 2;”直接当C的属性了,f没定义
      

  3.   

    赋值语句都在方法中的,所以那第一个错了!在类里面可以赋值的,就是定义的同时赋值。private int c = 0;//这样才正确
      

  4.   

    LZ可以想想,如果这样能执行的话,还需要方法干嘛?直接写不就行了?如果你非要在方法外些,可以加上个花括号,即{f=2;}
      

  5.   

    public class Condition {
      private int a;
      {
      
      a=91;
      }

    public static void main(String[] args){
    Condition a=new Condition();

    System.out.println(a.a);

    }

    }
      

  6.   

    11楼体现了10楼的思想^_^
    另外代码块前可以加上static关键字,不过这样只会在虚拟机加载类的时候只执行一次
    public class Condition {
      private static int a;
     
    static{
      
    a=91;
      }
    }
    恩.就是这样.不过我总觉得虽然11楼的代码可以正常打印..但是似乎是直接引用了类的私有变量,是因为还在这个类的方法中,所以可以吗??