司空曙
2015-08-17 09:06
public class cat2{
static int f;
static double f2=11.5;
static{
System.out.println("cat2类的整数f静态初始化块已执行。");
int f=11;
}
public void show(){
System.out.println("静态变量f:"+f+", 静态变量f2:"+f2);
}
public static void main(String[] args){
cat2 catty= new cat2();
System.out.println(catty.f);
System.out.println("用对象名访问静态变量f2:"+catty.f2);
catty.show();
}
}
运行结果:
cat2类的整数f静态初始化块已执行。
0
用对象名访问静态变量f2:11.5
静态变量f:0, 静态变量f2:11.5
为什么会这样????我的静态初始化块没写错吧??
你记住在Java中{}通常代表了作用域,我们称为“块”,常见的有类,方法,初始化块,try...catch等。
静态初始化块也是一个独立的作用域,所以你可以在其中定义一个同名变量而不报错,因为它和外边的f作用域不同。
不过因为静态初始化块是局部作用域,所有可以可以访问类成员,这时你必须去掉类型声明,否则会变成变量的声明而非引用。
不能在静态初始化快中赋值时添加类型。
static{
System.out.println("cat2类的整数f静态初始化块已执行。");
f=11;
}
这样就好了
Java入门第二季 升级版
530553 学习 · 6091 问题
相似问题