基本上,我的目标是通过"删除"尽可能高效。我完成的变量,即使仍在范围内。到目前为止,我一直在使用if(true)
手动创建一个定义变量生命周期的范围,但我正在寻找像var.close()
这样的函数,唯一的目的是使变量基本上超出范围,并且不再为其保留内存位置。
我在下面使用的示例显然可以使用for()
来回避这个特定的实例(赋值我不想使用for()
),但我的关注比用作索引的变量更广泛。
(忽略存在的任何其他逻辑/语法错误,因为我还没有对此进行校对)
package root;
import javax.swing.JOptionPane;
public class DebugEight4
{
public static void main(String[] args)
{
String array[] = new String[100];
String entry = " ";
final String STOP = "/']";
StringBuffer message = new StringBuffer(
"The words in reverse order are:\n"
);
if(true)
/*
*forces x out of scope
* after while statement ends
*/
{
int x = 0;
while(!entry.equals(STOP))
{
entry = JOptionPane.showInputDialog(null,
"Enter another word\n" +
"Enter " + STOP + " when you want to stop");
if(!entry.equals(STOP) && x != 100)//prevents fragmentation error
{
array[x] = entry;
}
else
{
JOptionPane.showMessageDialog(null, "That\'s all! Let's see the results.");
}
++x;
}
}/* end x scoping if
* If the if(true) wasn't here, x would still exist!
*/
for(int y = array.length-1; y > 0; --y)
{
message.append(array[y]);
message.append("\n");
}
JOptionPane.showMessageDialog(null, message);
}
}
有什么想法吗?
答案 0 :(得分:2)
这正是范围的用途。您不需要发明自己的范围系统。任何变量都应在尽可能小的封闭范围内声明。但就你所需要而言,这就是你的意思。它是一个可见性原则,而不是一个效率原则,因为方法所需的所有堆栈都是在方法的入口处分配的,并且内部作用域不以任何方式对应于字节码指令。
答案 1 :(得分:0)
创建更有限的范围很容易。只需创建一个新块:
public static void whatever() {
int a = 5; // Exists until end of method
{
int b = 5; // Exists until end of outer block
{
int c = 5; // Exists until end of inner block
}
// c is no longer accessible
}
// b is no longer accessible
}
我建议不要这样做有几个原因: