Java中的变量是如何被调用的,这些变量只设置了一次,但从来没有设置过,并且不是最终的?

Java中的变量是如何被调用的,这些变量只设置了一次,但从来没有设置过,并且不是最终的?,java,Java,我有几个变量只需要设置一次,但在启动应用程序后再也不需要设置,例如屏幕宽度、数组X长度、应用程序启动时间等 我不声明这些是最终的,因为软件将决定分配给它们的值,而不是手动分配给我。我将单词大写,这样我就可以看到没有其他代码会给它赋值,只有1 这是一个糟糕的编程实践吗?如果是的话,我应该怎么做?我通常只有一个包含所有这些最终变量和我的标志的文件,我不喜欢将它们存储在本地 public class myClass{ final int screenWidth; final int a

我有几个变量只需要设置一次,但在启动应用程序后再也不需要设置,例如屏幕宽度、数组X长度、应用程序启动时间等

我不声明这些是最终的,因为软件将决定分配给它们的值,而不是手动分配给我。我将单词大写,这样我就可以看到没有其他代码会给它赋值,只有1

这是一个糟糕的编程实践吗?如果是的话,我应该怎么做?我通常只有一个包含所有这些最终变量和我的标志的文件,我不喜欢将它们存储在本地

public class myClass{
    final int screenWidth;
    final int arrayXLength;
    final int timeAppStarted;

    public myClass(){
        screenWidth = getScreenWidth();
        arrayXLength = arrayX.length;
        timeAppStarted = getTime();
    }
}
这没什么错-您可以在构造函数中为它们分配适当的值


注意:这些将被指定一个默认值,因此您可能需要检查是否进行了正确的指定。同样,您也可以声明为整数,而不是原始数据类型int。

最好将这些变量标记为final。Java中的final关键字意味着变量只能在应用程序启动后初始化一次


请注意,如果在声明final变量时没有初始化它,那么在代码中只能在静态块、实例初始值设定项块或构造函数中初始化它们。

您可以实际使用final并在以后初始化它们,final仅仅意味着它们可以在不需要手动操作的情况下初始化。拥有final变量并不意味着该值必须是编译时常量。它可以在以后作为构造函数参数传递,我将单词大写,这样我就可以看到没有其他代码会给它赋值-是的,这很糟糕。这只是你的惯例。您无法阻止它的发生包括最终屏幕宽度、数组长度、应用程序启动时间。一旦应用程序启动,分配它一次。最后的变量赋值是允许的,这是一个非常通用的语句。对我来说,这只是个变量,有点复杂。。。可以初始化这些变量的代码非常有限,比如构造函数或静态初始值设定项。是的,我会编辑我的答案来记下来。真的吗?最终整型屏幕宽度=null;-1 null不能分配给int 2,如果它可以,例如,假设整数而不是int,这将永远不允许在以后更改,在构造函数中也不允许这样做。修正了;-。所以如果我声明了最终的int屏幕宽度;并调用它的值它将返回什么,是0还是null?它将返回零,因为未声明的基本数据类型具有与其关联的默认值。要具有空值,它必须是对象的空值。然而,为了解决这个问题,您可以声明最终的整数屏幕宽度;这会产生你想要的效果。执行此操作时,实际上没有初始化变量。将所有大写字母用作实例字段违反了公认的Java编码标准。