如果你给
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代码是多么容易。我一直在网上搜索,但似乎无法弄清楚 为什么 这么容易。每次我在Google上搜索“为什么要反编译文件?”之类的信息时,或“为什么Java这么容易反编译”,我所得到的只是指向可以轻松反编译我的代码的软件的链接。因此,我向您介绍StackOverflow:为什么Java可以转换回容易阅读的源代码,而C ++和其他语言对反编译不是很友好? 谢谢