为了账号安全,请及时绑定邮箱和手机立即绑定

静态初始化块

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

为什么会这样????我的静态初始化块没写错吧??

正在回答

2 回答

你记住在Java中{}通常代表了作用域,我们称为“块”,常见的有类,方法,初始化块,try...catch等。

静态初始化块也是一个独立的作用域,所以你可以在其中定义一个同名变量而不报错,因为它和外边的f作用域不同。

不过因为静态初始化块是局部作用域,所有可以可以访问类成员,这时你必须去掉类型声明,否则会变成变量的声明而非引用。

2 回复 有任何疑惑可以回复我~
#1

司空曙 提问者

谢谢!
2015-08-17 回复 有任何疑惑可以回复我~

不能在静态初始化快中赋值时添加类型。

static{

System.out.println("cat2类的整数f静态初始化块已执行。");

f=11;

}

这样就好了

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530711    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

静态初始化块

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信