在java中,如何在类的顶端我们可以像这样初始化内存
public Class blahh{
private String s = new String("Hi");
public static void main(String args[]){}
}
为什么这是合法的,不是新的关键字可执行代码?
如果我用方法调用替换了私有String ....它会被执行吗?
答案 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”。