我正在使用Eclipse Helios IDE进行Web应用程序开发。 在Eclipse的Problems部分中,对于某些行,描述显示为“Dead Code”。
有人可以告诉我死码究竟是什么意思吗?
请参阅屏幕截图供您参考。
例如,这部分在Eclipse
下显示为死代码 else {
int length;
if (ar != null)
length = Array.getLength(ar);
else
length = 0; // This line is dead code
答案 0 :(得分:38)
在Eclipse中,“死代码”是永远不会执行的代码。通常情况下,它在逻辑上永远不会输入的条件分支中。
一个简单的例子如下:
boolean x = true;
if (x) {
// do something
} else {
// this is dead code!
}
这不是一个错误,因为它仍然是有效的java,但它是一个有用的警告,特别是如果逻辑条件很复杂,并且可能不直观地显示代码将从不执行
在您的特定示例中,Eclipse计算出ar
将始终为非null,因此永远不会执行else length = 0
分支。
是的,它可能是可能 Eclipse错了,但它更可能不是。
答案 1 :(得分:5)
死代码是永远不会执行的代码,例如
boolean b = true
if (!b) {
....
// dead code here
}
答案 2 :(得分:4)
死代码意味着无法执行此代码。
有时你甚至无法编译它(比如这种情况:):
private Boolean dead_code()
{
return true;
//Dead code below:
dosomething();
}
但在其他情况下,这并不太明显,例如这句话:
b=true;
[...]
if (b==false)
{
//Dead code
}
如果您收到此消息, 代码中存在一些主要缺陷。你必须找到它,否则你的应用程序将无法正常工作。
答案 3 :(得分:2)
Eclipse提供了两种诊断方法,用于标记将在运行时执行/不执行的代码。 1)无法访问的代码:这些是遵循JLS的不可达规则的常见java警告,也是由javac提供的。这些都是编译错误。例子:
int foo() {
return 1;
int i = 1; // Unreachable
}
int foo2() {
while (true);
int i =1; //Unreachable
}
还有其他更复杂的例子:)
2)死代码:这是Eclipse自己的静态分析警告,并且大部分与空分析有关,即
void foo() {
Object o = null;
if (o == null) {
} else {
// dead code
}
上面给出的示例不应该给出死代码警告。即
boolean x = true;
if (x) {
// do something
} else {
// this is dead code!
}
不应该发出警告,因为JLS禁止编译器评估变量的“值”。我们可以评估的所有内容都是'nullness'
希望这有帮助
答案 4 :(得分:1)
您可能在“死代码”行上方的行中有一个Null指针异常。 确保检查“空指针”异常。
答案 5 :(得分:0)
您之前可能使用过变量ar
。然后编译器知道else语句中的行永远不会被执行。在您使用NullPointerException
的地方或ar
语句的第一部分将会执行if
。
答案 6 :(得分:0)
让我给死代码一些答案。
<强>例如强>
public class UnreachableTest{
public static void main(){
try{
// some code
}
catch(Exception exc){
throw new NullPointerException();
System.out.println("Unreachable line"); // compile time error
}
}
}
这里是System.out.println(&#34; Unreachable line&#34;);从未被执行过。 反过来又认为是死代码。
另一个例子可能是:
int func(int i, int j)
{
int sum = i + j;
return i + j; // never actually using the sum
}
简单的函数返回i + j;从来没有真正使用总和 Sum在这里被认为是死代码。
答案 7 :(得分:0)
发生这种情况时的其他一些情况。
System.out.println("result :" + result + ":" + result.isEmpty());
if (result == null)
return result;
else if(!result.isEmpty())
str.append(result + " ");
1)在这里,当你打印结果并检查isEmpty()时,eclipse假设结果不为null,所以它不会进入if。所以返回结果是死代码。
2)现在让我们说结果是null,所以你会在result.isEmpty()中得到NullPointerException,所以再次它不会进入if并返回结果是死码
要使这项工作只注释掉System.out.println()。
答案 8 :(得分:0)
如果您给出的条件检查可能永远不会满足,则Eclipse会发出此警告。以下是一些例子
Object o=null;
if(o!=null) {
//Some code
}
此处死代码警告将在Object已经为空
时出现另一个例子如下:
BSTTest bstTest=null;
bstTest.test=10;
if(bstTest==null) {
//some code
}
这里的代码试图访问类的变量。由于已经访问了变量,eclipse将在if(bstTest == null)中给出死代码警告,因为当已经访问变量时,bstTest可能不为null。
注意:这里bstTest.test将给出空指针异常
答案 9 :(得分:0)
死代码的简单示例
public class IfTest {
public static void main(String[] args) {
if (true) {
if(false) {
System.out.println("a"); //Dead code, Never be Execute this if block.
}else {
System.out.println("b");
}
}
}
答案 10 :(得分:0)
为简化术语的“无法访问代码”和“无效代码”:
无法访问的代码是Java中的代码块/语句,在程序的生存期内,控件永远不会到达并永远不会执行。以下是无法访问代码的示例。这会生成编译器时间错误。
public void unreachableCodeExample() {
System.out.println("This will execute");
return;
System.out.println("This will not"); //This is Unreachable code
}
死亡代码是无法访问的代码,但不会产生编译时错误。但是,如果您在Eclipse(或其他IDE)中执行它,则会发出警告。参见下面的示例,
public void deadCodeExample() {
if (true) {
System.out.println("This will execute");
return;
}
System.out.println("This will not"); //This is dead code
}
答案 11 :(得分:0)
答案 12 :(得分:-1)
试试这个:
while (true) {
if(false == true) break;
}
S.O.P("I will never reach here!") <-- This code will never be executed.
代码是有效的,因为它符合编译器,但实际上循环永远不会退出,实际上S.O.P永远不会被执行。