以下代码段中的代码工作得很好.它计算使用类型的静态字段创建的对象的数量int是cnt.
public class Main
{
private static int cnt;
public Main()
{
++cnt;
}
public static void main(String[] args)
{
for (int a=0;a<10;a++)
{
Main main=new Main();
}
/*for (int a=0;a<10;a++)
Main main=new Main();*/
System.out.println("Number of objects created : "+cnt+"\n\n");
}
}
Run Code Online (Sandbox Code Playgroud)
它显示以下输出.
Number of objects created : 10
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,当我从上面的for循环中删除这对花括号时(参见注释for循环),会发出编译时错误
不是声明.
为什么在这种特殊情况下,即使循环只包含一个语句,也必须使用一对括号?
aio*_*obe 28
声明变量时(main在本例中):
Main main = new Main();
Run Code Online (Sandbox Code Playgroud)
它不算作声明,即使它有副作用.因为它是一个恰当的陈述,你应该这样做
new Main();
Run Code Online (Sandbox Code Playgroud)
那么为什么呢
... {
Main main = new Main();
}
Run Code Online (Sandbox Code Playgroud)
允许?{ ... }是一个代码块,并不会算作一个声明.在这种情况下,main变量可以在声明之后但在结束括号之前使用.有些编译器忽略了它确实没有被使用的事实,其他编译器会对此发出警告.