如果你给
public class test
{
public static void main(String ar[])
{
if (true)
int i=0;
}
}
它没有编译,但是带有花括号的相同代码是:
public class test
{
public static void main(String ar[])
{
if (true)
{int i=0;}
}
}
有什么解释?
基本上,变量声明只能在块中声明。
查看
Java语言规范中“语句”的语法
-它包括Block,但不包括LocalVariableDeclarationStatement-
后者是block语法的一部分。
这实际上是实用主义的问题:如果没有括号,则只能使用一个语句。如果没有后续语句,则声明变量是没有意义的,因为您不能 使用
该变量。您也可以只具有一个不带变量声明的表达式语句,这
是 允许的。
这样可以防止出现以下错误:
if (someCondition)
int x = 0;
System.out.println(x);
乍一看可能还不错,但实际上等效于:
if (someCondition)
{
int x = 0;
}
System.out.println(x);
就我个人而言,无论如何我总是使用花括号,因为它使这种错误更难以创建。(我曾经被它咬过,发现有问题的代码令人惊讶地棘手。)
问题内容: 这段代码使我凝视了几分钟: 我以前从未见过,而且我也不知道Java有一个“ loop”关键字(NetBeans甚至没有像关键字一样给它上色),并且它在JDK 6中可以很好地编译。 有什么解释? 问题答案: 这不是一个。 用法:
如果我运行deldeldel(“adel”),它会返回一个,但是,adel的长度是4,这意味着最后一个字符串索引是3,为什么str.substring(4,str.length()没有超出范围?
问题内容: 这段代码使我凝视了几分钟: (这里的第137行) 我以前从未见过,而且我也不知道Java有一个“ loop”关键字(NetBeans甚至没有像关键字一样给它上色),并且它在JDK 6中可以很好地编译。 有什么解释? 问题答案: 它不是一个keyword,而是一个label。 用法:
奇怪的是,标记为“OK”的行编译得很好,但标记为“Error”的行失败了。它们看起来基本上是一样的。
在方法或类范围内,下面的行编译(带有警告): 在类作用域中,变量获取其默认值,以下给出未定义引用错误: 这难道不是第一个应该以相同的未定义引用错误结束吗?或者第二行应该编译?或者我错过了什么?
问题内容: 对于Java的处理方式以及涉及到的数字和其他类型的数字,我有些困惑。例如: 输出(也许您应该先猜测一下): 这不能编译是可以预料的,是不同的对象。 令我有些惊讶的是,默认情况下9是an ,并且1)甚至没有编译。请注意,您不能将放入期望使用的方法中,但是在这里它们是相等的。 由于两个相同的原因,这令人惊讶,但似乎更糟。 不足为奇,因为自动装箱到和。 不足为奇,因为不同类中的对象不应该是。