• Java final修饰符


      final的定义:

      在英文层面上,final的意思是"最后的","最终的"意思,在Java中也同样表示出此种含义。

      final的运用对象:

      final适用于修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。

      final修饰类:

      由于final定以后的对象不能进行修改和重载,用final修饰的类不能被继承,即不能拥有自己的子类。如果视图对一个已经用final修饰的类进行继承,在编译期间或发生错误。

      final修饰变量:

      一旦定义了final变量并在首次为其显示初始化后,final修饰的变量值不可被改变。

      这里需要注意以下几个问题:

      1. final修饰的变量,无论是类属性、对象属性、形参还是局部变量,这些变量都是需要进行显示初始化(即为其显示指定初始值)。

      对于final修饰的形参,由于是实参传递过来的,很好理解。

      对于final修饰的局部变量,与未用final修饰的变量一样,都是需要显示初始化。即局部变量都是需要显示初始化的。

      对于一般的类属性和对象属性,由类和对象的初始化过程中可以看出,首先都进行了默认初始化。然后对有显示赋值的变量才再进行显示初始化。

      但对final修饰的类属性和对象属性而言,如果不显示初始化,其默认将是进行默认初始化后的值,这与final本身出发点矛盾,因此,Java语法规定:

      final修饰的类属性和变量属性必须要进行显示初始化赋值。

      另外,无论对于基本数据类型还是引用数据类型,final修饰的变量都是首次显示初始化后值都不能修改。对于基本数据类型,很好理解。对于引用

      数据类型,引用变量指向的是实际的对象,但其存储的是所指向对象的地址,因此,其值不能修改并不意味着其所指向的对象不能修改。

      final赋值:

      Java中没有真正的常量。只有final型的变量,可以当常量来用。
      final型变量,只有两个地方可以赋值:
      1.在定义的时候可以赋值。
      2.在构造函数中可以赋值。如果在定义时赋值了,则在构造函数中不能赋值。包括定义时赋了null值,则在构造函数中也不能再赋值。

    例:

        public final String AAAA;
        public Doggie(){
            AAAA="Good Morning";
        }
    public final String AAAA="aaaa";

    再举一个特殊的例子作为区别对待:

    public class Test {
    
        public static void main(String[] args) {
    
            String country = "China";
            String name = "qqyumidi";
    
            String userInfo = country + name;  //编译后此处依然是country和name变量
            String user = "China" + "qqyumidi";  //编译后此处直接变成Chinaqqyumidi
    
        }
    }

    另一种写法为:

    public class Test {
    
        public static void main(String[] args) {
    
            final String country = "China";
            final String name = "qqyumidi";
    
            String userInfo = country + name;  //编译后此处直接是Chianqqyumidi
    
        }
    }
  • 相关阅读:
    A
    博弈论
    K
    快速幂
    基数排序
    计数排序
    KMP求字符串最小循环节
    二分图多重匹配
    hdu2818行列匹配+排序
    二分图行列匹配与最大匹配必须边
  • 原文地址:https://www.cnblogs.com/claricre/p/6222983.html
Copyright © 2020-2023  润新知