静态初始化块

来源:8-10 Java 中的 static 使用之静态初始化块

司空曙

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

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

写回答 关注

2回答

  • 思君满月
    2015-08-17 10:01:18
    已采纳

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

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

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

    司空曙

    谢谢!

    2015-08-17 17:32:24

    共 1 条回复 >

  • 司空曙
    2015-08-17 09:24:52

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

    static{

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

    f=11;

    }

    这样就好了

Java入门第二季 升级版

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

530553 学习 · 6091 问题

查看课程

相似问题