我正在阅读一本书中的一些Java教程并运行这样的代码:
private void theMethod( MyObject table )
{
SomeObject item1 = table.add(0,0,0,"Item 1");
{
item1.setWhatever = false;
item1.setSomething = 15;
}
// More code here...
}
变量定义后大括号的目的是什么?
答案 0 :(得分:6)
当我使用大量局部变量时,我有时会在组中使用这个大括号。这样,它们就超出了范围,我可以创建具有相同名称的变量。
我无法立即找到一个好的例子,但我的意思是这样的:
/* Code block 0 */
{
int localStuff = 9;
boolean submit = false;
// Do some IO, or whatever
}
/* Code block 1 */
{
int localStuff = 4;
boolean submit = false;
// Do some IO, or whatever
}
/* Code block 2 */
{
int localStuff = -1;
boolean submit = true;
// Do some IO, or whatever
}
答案 1 :(得分:2)
在这个特定的例子中,它没有做任何事情(可能只是根据编码员的口味改进代码的外观)。但是,它也可能是一个错字:)
顺便说一句,大括号可能有助于限制范围:private void theMethod( MyObject table )
{
{
SomeObject item1 = table.add(0,0,0,"Item 1");
item1.setWhatever = false;
item1.setSomething = 15;
}
// Item1 is not defined here anymore, so for example you can define another object with the name item1
// Though it's not a good practice.
OtherClass item1;
// More code here...
}
答案 2 :(得分:1)
你确定是这样的吗?尽管可以像这样定义代码块,但除了限制局部变量的范围外,它没有太大作用,这并不令人兴奋。
但是,类级别的匿名代码块对于初始化变量,填充数据结构等非常有用。
例如,此静态匿名块初始化最终的静态变量。
public class Snippet {
private final static Map config;
static {
HashMap tmp = new HashMap();
tmp.put("moo","foo");
tmp.put("bar","baz");
config = Collections.unmodifiableMap(tmp);
}
// rest of class here.
}
对于非静态块和实例变量,它以相同的方式工作,这不太有用,但如果你想确保所有构造函数和子类执行相同的代码,那么它很方便。
我发现这个帖子不是重复的,而是相关的。 Anonymous code blocks in Java
答案 3 :(得分:0)
这是正常的,该块仅用于组织代码,它被评估为正常流程
class Foo{
private void theMethod(String str )
{
{
System.out.println(str);
{}{}{}{}{}{}{}{}
}
}
public static void main(String ...args){
new Foo().theMethod("my string");
}
}
与;相似;
class Foo{
private void theMethod(String str )
{
{
System.out.println(str);
{;}{;}{;}{;}{;}{;}{;}{;}
}
}
public static void main(String ...args){
new Foo().theMethod("my string");;;;;;;;;;;;;;;;;
}
}