新关键字不可执行吗?

时间:2015-02-20 21:01:31

标签: java

在java中,如何在类的顶端我们可以像这样初始化内存

public Class blahh{

private String s = new String("Hi");

public static void main(String args[]){}
}

为什么这是合法的,不是新的关键字可执行代码?

如果我用方法调用替换了私有String ....它会被执行吗?

1 个答案:

答案 0 :(得分:1)

你有一个字段声明符。它可能包含初始化程序,它是分配给该字段的值。它是在构造函数中进行赋值的一种简写。

现在,这种初始化程序看起来很自然:

private int myInt = 3;

但事实上,初始化程序可以是任何类型的表达式:

private int myInt = 9 / 3;

这里你已经有了一个计算。这是执行的代码(好吧,它可能会被优化掉,但理论上,即使你没有任何优化器,这也行得通)。它将9除以3,并将结果分配给myInt

这实际告诉编译器的是,当创建此类的新实例时,它应该执行此计算,并在继续构造函数的主体之前将值赋给该字段。

因此,通常允许在构造函数中执行的任何类型的代码,只要它可以在一个表达式中表示,就可以分配给变量。这是一个小程序:

public class SimpleTest {

    // Yes, you can call a method as a field initialization!
    private int myInt = myMethod();

    // The method performs a calculation end returns a value.
    private int myMethod() {
        return (int)Math.sqrt(9.0);
    }

    // Getter for the field
    public int getMyInt() {
        return myInt;
    }

    public static void main(String[] args) {            
        SimpleTest test = new SimpleTest();
        System.out.println( test.getMyInt());
    }

}

此程序向您显示可以在字段声明符中使用方法。该程序将打印“3”。