为什么我无法在 String a;
行上放置断点?
public void localMethod() {
String a;
a = "haha";
System.out.println(a);
}
我知道局部变量在显式为其赋值之前不会被初始化。 但它只是一行代码,它做了一些事情。为什么我不能停在那里? 哪些行可以作为断点?
我使用的是Eclipse,jdk6_31
最佳答案
声明本身并不是真正的可执行代码 - 它只是声明某些东西的存在。您应该能够在第二行上放置一个断点,这实际上做了一些事情。
诚然,我不明白为什么 IDE 不应该支持向不可执行行添加断点的概念 - 它可能必须真正在可执行文件中安装断点执行环境中的点...
编辑:为了澄清我的意思,这段代码:
public void foo() {
String a;
String b;
a = "hello";
b = " world";
System.out.println(a + b);
}
将编译为与以下内容相同的字节码:
public void foo() {
String a;
a = "hello";
String b;
b = " world";
System.out.println(a + b);
}
由于声明,没有代码必须执行 - 它不会在该时间点保留空间或类似的东西。编译器在方法的堆栈空间内分配一个“槽”,并将在整个方法中使用该槽 - 但它可以重用同一槽,而无需额外的初始化,即使变量是在循环内声明的,例如。
关于java - 为什么我不能在未初始化的局部变量上放置断点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10336105/