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();
}
}
问题就是为什么在里边能通过,而在外边不能通过? 请具体说说原因,然后我会贴上我们的理解想法,谢谢
这里是C这个类的类定义部分,
类定义部分可以做什么呢?
声明变量(可同时赋值)
方法声明(可同时实现)而你这是在做什么?你这是一条直接的赋值语句不要说你这样不能通过编译了
就算你这样子定义
public class C{
private int x;
x = 2;//这都是不合法的
//f = 2; //此处赋值不能成功编译
public void me(){
f = 2;//此处赋值能成功编译
System.out.println("在内部类f="+f);
}
}
……
//f = 2; //此处赋值不能成功编译
public void me(){
f = 2;//此处赋值能成功编译
System.out.println("在内部类f="+f);
}
}
”
类中分属性和方法,你把“f = 2;”直接当C的属性了,f没定义
private int a;
{
a=91;
}
public static void main(String[] args){
Condition a=new Condition();
System.out.println(a.a);
}
}
另外代码块前可以加上static关键字,不过这样只会在虚拟机加载类的时候只执行一次
public class Condition {
private static int a;
static{
a=91;
}
}
恩.就是这样.不过我总觉得虽然11楼的代码可以正常打印..但是似乎是直接引用了类的私有变量,是因为还在这个类的方法中,所以可以吗??