为什么在java中没有变量的重置选项

时间:2014-09-21 16:20:29

标签: java initialization language-features primitive-types

有时当我们声明并初始化一个变量时,假设我们有一个int i =10;,那么在一些代码之后,这个变量将被修改,如下面的代码所示

public class reset {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i = 10;
        int co = 1;
        while (co < 10) {
            i++;
            System.out.println(i + "*" + co + "=" + i * co);
            if (i == 99) {
                i = 11; //line 11
                co++;
            }
        }
    }
}

然后在某些时候(这里是第11行)我们需要重新初始化然后变量,如果我们有任何语言功能自动执行它,那就不好了,例如

reset:i

我认为它对生产力非常有益,不是吗?

4 个答案:

答案 0 :(得分:4)

  

我们需要重新初始化变量,如果我们有自动执行任何语言功能,那会不会很好?

没有

  

我认为它对生产力非常有益,不是吗?

没有

将变量重置为其起始值在许多情况下表明变量的范围很大。因此,使用干净的代码,您几乎不需要这样的功能。

当然,每项功能都需要以更复杂的语言为代价。

答案 1 :(得分:2)

初始化线

int i = 10;

只需创建字节码指令即可将值10赋值给变量。该任务与任何其他任务没有什么不同。

要实现重置,需要为每个变量保留一些额外的元数据来说明特殊的初始值是什么。那个元数据当前没有保存在符号表中,因为Java中没有概念对于初始值&#39;。额外的开销将与reset命令的效用进行权衡。

可能是一个好主意,但你可以通过声明一个常量并重新分配常量来获得相同的东西。

答案 2 :(得分:1)

这段代码怎么样?我可以从初学者的角度理解你的问题,但通常需要更多的练习来了解为什么不需要某些结构:

public class NoReset {
    private static final int X_START = 11;
    private static final int X_END = 99;
    private static final int Y_START = 1;
    private static final int Y_END = 9;

    public static void main(String[] args) {
        for (int y = Y_START; y <= Y_END; y++) {
            for (int x = X_START; x <= X_END; x++) {
                final int result = x * y;
                System.out.printf("%d * %d = %d%n", x, y, result);
            }
        }
    }
}

请注意,您不应嵌套到多个循环,但创建“隐藏循环”至少是危险的,在代码中跟踪i等变量非常困难。

答案 3 :(得分:0)

如果您想使用当前的Java语言来执行您想要的操作,那么只需在每个要为其执行“重置”的类中提供一个函数,如:

private void reset() {
    var = xxx;
    var2 = yyy;
    ...
}