【问题标题】:When to choose variables to declare as final static何时选择要声明为最终静态变量的变量
【发布时间】:2012-11-14 17:53:35
【问题描述】:

我也使用了 final 和 static 变量。我发现这些变量是,

最终变量

  • 最终变量只能通过初始化程序或赋值语句初始化一次。

  • 与常量的值不同,最终变量的值在编译时不一定是已知的。

我应该将哪些变量声明为 final-

我经常使用那些值普遍不变且永远不会改变的变量,例如 PI 的值。

public static final double PI = 3.141592653589793;

静态变量

  • 这些是属于类而不属于对象(实例)的变量。

  • 静态变量仅在执行开始时初始化一次。

  • 由类的所有实例共享的单个副本

  • 静态变量可以通过类名直接访问,不需要任何对象。

我应该将哪些变量声明为 final-

大多数时候,我使用那些我只想初始化一次的变量并在 enitre 类中使用它们。

何时使用 final 静态变量

现在,我在我的一个数据库项目中遇到了一个术语final static。我发现有些数据库对象甚至数据库版本被声明为 statci final。

 static final String DATA_BASE = "BackUpDatabase.db";
    static final int DATA_BASE_VERSION = 1;

现在,我的问题是我们应该将哪些变量声明为 finalstaticfinal static,因为使用它们中的任何一个都可以解决问题,然后将两者一起使用。

【问题讨论】:

    标签: java android static final


    【解决方案1】:

    静态方法或类是隐式的 final 。 因为所有对象都只存在此方法的一个副本,这意味着子类无权修改副本。 假设您在父类中有一个方法,并且您不希望子类更改此方法..只需将父方法声明为最终方法。干得好。

    class Parent {
    
        final void myMethod() {
            //No one can change this method from subclassess 
            //compiler works efficiently because it knows that this method will not change
        }
    }
    
    class Child extends Parent{
       //from this class I can use myMethod but I cannot override.
    }
    

    【讨论】:

      【解决方案2】:

      静态变量

      • 可以通过调用静态方法改变静态变量值 同班。
      • 从此创建的所有对象的静态变量值都相同 班级 。如果我们更改值,那么该类的所有对象都将得到 新值,旧值将丢失。
      • 值可以多次更改。

      最终变量

      这个变量值可以通过两种方式初始化:

      1. 在声明变量时。
      2. 在创建该类的对象时,类构造函数将具有this.finalvariable = newfinalvariablevalue;

      一旦初始化,它就不能被任何方法(静态或非静态)更改。

      【讨论】:

        【解决方案3】:

        final 只是说值一旦初始化就不能改变; static 表示该属性属于 Class 而不是对象。

        所以当你说 final static;这意味着只有一个变量副本并且不能更改。

        【讨论】:

          【解决方案4】:

          - static 在 java 中表示 Class 的成员。它由类的所有实例共享。

          - final java 中的关键字表示常量,但根据应用的不同有不同的解释。

          - 当我们在字段上使用static final 时,将其视为全局变量。

          - PI是Math Class的静态变量,使用类名直接访问,如Math.PI

          - 使用大写字母来定义静态最终变量。

          最终解释:

          final variable :它的值不能改变

          final method :不能被覆盖

          final class :不能扩展

          final Parameter : 从调用者的参数接收到的值不能改变

          final Object Reference Variable :它不能引用任何其他对象,除了它当前引用的对象

          【讨论】:

            【解决方案5】:
            static -  Only use when a variable which is used globally 
            final -  Only use when you need to declare a value as constant 
            
            static final - Only use when a value is globally used and it is a constant.
            
            : - Here global means across all the instances of a java class
            

            【讨论】:

            • +1 Here global means across all the instances of a java class **where constant is declared**
            【解决方案6】:

            仅将变量声明为静态可能会导致其值被声明它的类的一个或多个实例更改。

            如@Vulcan 所说,将它们声明为 static final 将帮助您创建一个 CONSTANT。只有一个副本存在,可以在任何地方访问。

            【讨论】:

              【解决方案7】:

              声明为static final(反之亦然)的变量被理解为有意义的常量,并以全部大写字母命名,下划线表示空格。

              一个常见的常量示例是Integer.MAX_VALUEMath.PI

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-07-10
                • 1970-01-01
                相关资源
                最近更新 更多