将变量重新初始化为常量

时间:2014-11-06 16:03:55

标签: java variables switch-statement constants

我是Java新手。我想知道是否有一种方法可以在将声明的全局变量用作变量之后将其重新初始化为常量...这是因为在对声明的变量进行一些工作之后我想在Switch的情况下使用它声明......

class A {
    int x;
    int y;
    public static void main(String args[]) {
        A a = new A();

        System.out.println(a.x);
        a.y = 3;
        a.x = 5;
        switch (a.y) {
            case a.x:// Something
        }
    }
}

这是我需要的一个例子... print语句提到,我需要用变量x做一些事情。后来我想在Switch case语句中使用它。我不想在切换案例陈述后使用x ...请帮助我......

5 个答案:

答案 0 :(得分:4)

  

我想知道在将声明的全局变量用作变量后,是否有办法将声明的全局变量重新初始化为常量...

不,没有。 (Java也没有全局变量;查看代码,xy实例数据成员 .Java对全局变量最接近的是{ {1}} [aka" class"]公共类中的数据成员。)

  

那是因为在对声明的变量做了一些工作之后我想在Switch case语句中使用它......

如果案例值(public static,在您的情况下)不是常数,则不能这样做。相反,您必须使用a.x

if/else if/else

答案 1 :(得分:1)

不,答案是你不能用Java做到这一点。

"事物"案件需要成为常数 在Java 7或更高版本中,您还可以使用字符串作为案例标签。

Switch statement Java

答案 2 :(得分:1)

这是不可能的。要在switch中使用某些内容,它必须是编译时已知的常量。如果你想根据变量设置它(即在运行时),那么在编译时就无法知道它。

答案 3 :(得分:1)

您只能打开编译时常量。我认为你想要实现的目标可以用一个简单的if语句来完成。

if (a.y == a.x) {
    // do stuff.
}

由于Java中的常量是编译时间,"重新初始化"作为一个概念没有意义。

答案 4 :(得分:1)

在Java中,当您编写switch语句时,编译器必须能够在编译时告诉 case选项的值是什么。如果您想设置一个switch,其中case个选项之一将是在运行时确定的值 - 抱歉,您不能。请改用if语句。

传统上,switch语句(以及其他语言中的CASE语句)用于设置跳转表。也就是说,在C程序中:

switch (n) {
    case 1:
        ...code
    case 2:
        ...code
    case 14:
        ...code
}

编译器将设置一个至少包含14个条目的表。表中的#1,#2和#14条目将包含它将跳转到的位置的代码地址。 (其他人将拥有“默认”位置的地址。)然后,编译器生成的代码将不是一系列“比较为1,如果相等 - 那么否则比较为2,如果相等 - 然后......“各种指示;相反,在确保n在表的范围内之后,它将索引到表中,找到地址,然后直接跳转到那里。效率很高。如果给它一个整数,Java会做同样的事情(对于String,它可以根据哈希码创建一个跳转表,但它仍然需要比较字符串的相等性 - 感谢@ErwinBolwidt提供关于此的更多信息)。

然而,所有这些背后的要点是,为了生成表,编译器必须提前知道值。所以你要求的东西不受支持,至少在C或Java中是这样。 (我认为有些语言会放宽这一点并在case中允许变量值,但它们可能全部或大部分都是解释语言。)