zoukankan      html  css  js  c++  java
  • Java中final的使用

    概念

    final 具有“不可改变的”的含义,可以修饰 非抽象类、非抽象成员方法和变量。

    • 用 final 修饰的类不能被继承,没有子类。
    • 用 final 修饰的方法不能被子类的方法覆盖(重写)。
    • 用 final 修饰的变量表示常量,只能被赋一次值(声明变量的时候)。

    注:

    final 不能用来修饰构造方法,因为“方法覆盖”这一概念仅适用于类的成员方法,而不适用于类的构造方法,父类的构造方法和子类的构造方法之间不存在覆盖的关系,因此用final修饰构造方法没有任何意义。

    父类中用 private 修饰的方法不能被子类的方法所覆盖,因此可以理解为 private 类型的方法默认是 final 类型的。

     final 类

    把类定义为 final,使这个类不能被继承。具体使用场景如下:

    • 不是专门为继承而设计的类,类本身的方法之间有复杂的调用关系。如果随意创建这些类的子类,子类有可能会错误的修改了父类的实现细节。
    • 处于安全的原因,类的实现细节不允许在被扩展。
    • 在创建对象模型时,确信这个类不会再被扩展。

    例如:JDK中的java.lang.String 类被定义为 final 类型。

    public final class String{...}

    final 方法

    在某些情况下,出于安全原因,父类不允许子类覆盖某个方法,此时可以把这个方法声明为 final 类型。

    例如:JDK中的java.lang.Object 类中,getClass()方法为 final 类型,而 equals() 方法不为 final 类型。

    所有 Object 的子类都可以覆盖 equals() 方法,但不能覆盖 getClass() 方法。

    final 变量

    用 final 修饰的变量表示取值不会改变的常量。

    例如:JDK中 java.lang.Integer 类中定义了两个常量。

    public static final int   MIN_VALUE = 0x80000000;

    public static final int   MAX_VALUE = 0x7fffffff;

    final 变量具有以下特征:

    • final修饰符可以修饰静态变量、成员变量和局部变量,分别表示静态常量、实例常量和局部常量。
    1 public class Demo{
    2   public static final int MAX_VALUE = 23;    //静态常量
    3   public static final int MIN_VALUE = 10;    //静态常量
    4   private final Date birthday = new Date();  //成员常量
    5 }

    静态常量一般以大写字母命名,单词之间以“_”符号分开。

    • final修饰的成员变量必须初始化。
     1 public class FinalTest {
     2     final int a = 1;    //成员常量 默认初始化
     3     static final int b = 2;    //静态常量 默认初始化
     4     final int c;    //成员常量
     5     static final int d;    //静态常量
     6     
     7     public FinalTest(){
     8         c = 3;    //成员常量 未默认初始化,可在构造函数中初始化
     9     }
    10     
    11     static {
    12         d = 4;    //静态常量 未默认初始化,可在静态代码块中初始化
    13     }
    14 }
    • final 变量只能赋一次值,如果将引用类型的变量用 final 修饰,该变量只能始终引用一个对象,但可以改变对象的内容。
     1 public class FinalTest {
     2     String str = "";
     3     public void print(){
     4         System.out.println(str);
     5     }    
     6     public static void main(String[] args){
     7         final FinalTest finalTest = new FinalTest();
     8         finalTest.str = "xixihaha";
     9         finalTest.print();
    10     }
    11 }

    总结:

    实际程序中,通过 final 修饰符来定义常量,目的为:

    • 提高程序的安全性。
    • 提高代码可维护性。
    • 提供代码可读性。

    参考:《Java面向对象编程》

    在巩固知识和提高自己的同时,分享自己的心得和想法。
  • 相关阅读:
    webApi2 结合uploadify 上传报错解决办法
    对特殊字符进行转移
    数据库事务MTDC出错解决办法
    查询数据所有的外键关系
    查询SQL阻塞语句
    Django介绍
    Docker简介
    Docker CE部署
    jQuery快速入门
    系统批量运维管理器paramiko详解
  • 原文地址:https://www.cnblogs.com/JiJie-LianG/p/4695865.html
Copyright © 2011-2022 走看看