我正在看下面的代码,发现有点奇怪的东西:
public class Sequence {
Sequence() {
System.out.print("c ");
}
{
System.out.print("y ");
}
public static void main(String[] args) {
new Sequence().go();
}
void go() {
System.out.print("g ");
}
static {
System.out.print("x ");
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这会给出一个编译错误,因为System.out"y"不属于方法声明只是一个{ }.为什么这个有效?我没有看到这个代码将如何或应该被调用.
当运行它时它也产生x y c g,为什么static { }在序列构造函数之前调用get?
我已经使用Java很长一段时间但从来没有遇到过这样的事情.我想知道它的作用以及为什么它不是错误.
public class Foo{
private int someVariable;
{
doSomething();
}
public Foo(){
}
private void doSomething(){
// Something is done here
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道单个块的目的是什么,其中包含对"doSomething()"的调用.它只是一个骨架代码.我遇到的实际代码是http://www.peterfranza.com/2010/07/15/gwt-scrollpanel-for-touch-screens/
我上课了
public class MyMain{
public static void main(String... arg){
Temp t = new Temp(){
{
System.out.println(" instance initialize");
}
};
}
}
class Temp{
int i;
{
i=9;
System.out.println("Static"+i);
}
Temp(){
System.out.println("Temp const "+i);
}
}
Run Code Online (Sandbox Code Playgroud)
当我执行main方法时输出到:
Static9
Temp const 9
instance initialize
Run Code Online (Sandbox Code Playgroud)
理想情况下,块在构造函数之前执行,但是在构造函数之后调用内联初始化块.为什么?