当前位置: 首页 > 编程笔记 >

详解Java中final的用法

莫飞翮
2023-03-14
本文向大家介绍详解Java中final的用法,包括了详解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修饰符可以修饰静态变量、成员变量和局部变量,分别表示静态常量、实例常量和局部常量。
 public class Demo{
  public static final int MAX_VALUE = 23;  //静态常量
  public static final int MIN_VALUE = 10;  //静态常量
  private final Date birthday = new Date(); //成员常量
 }

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

  • final修饰的成员变量必须初始化。
 public class FinalTest {
   final int a = 1;  //成员常量 默认初始化
   static final int b = 2;  //静态常量 默认初始化
   final int c;  //成员常量
   static final int d;  //静态常量
   
   public FinalTest(){
     c = 3;  //成员常量 未默认初始化,可在构造函数中初始化
   }
   
   static {
     d = 4;  //静态常量 未默认初始化,可在静态代码块中初始化
   }
 }

final 变量只能赋一次值,如果将引用类型的变量用 final 修饰,该变量只能始终引用一个对象,但可以改变对象的内容。

 public class FinalTest {
   String str = "";
   public void print(){
     System.out.println(str);
   }  
   public static void main(String[] args){
     final FinalTest finalTest = new FinalTest();
     finalTest.str = "xixihaha";
     finalTest.print();
   }
 }

总结:

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

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

 以上就是本文的全部内容,希望对大家的学习有所帮助。

 类似资料:
  • 本文向大家介绍详解Java中的final关键字的使用,包括了详解Java中的final关键字的使用的使用技巧和注意事项,需要的朋友参考一下 final含义 final是Java中的一个保留关键字,可以声明成员变量、方法和类。一旦你将引用声明为final类型,你将不能再改变这个引用了。编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。 final变量 凡是对成员变量或者本地变量(

  • 本文向大家介绍java final本质详解,包括了java final本质详解的使用技巧和注意事项,需要的朋友参考一下 含义:final 含义是【仅可以被赋值一次】。 赋值位置:在【声明时赋值】、在【构造方法中赋值】 举例: 注意:我们说 final 是仅可以赋值一次没错,但是我们知道在 java 中【值有两种】,【基本数据类型的值】和【引用数据类型的值】,对于基本数据类型来说,赋值就是直接把【值

  • 本文向大家介绍举例讲解Java中final关键字的用法,包括了举例讲解Java中final关键字的用法的使用技巧和注意事项,需要的朋友参考一下 1. final variable final variable 就是一个常量,一旦被初始化就不可以被改变。 输出: (1)Blank final variable 在声明时未初始化的 final variable 被称作 blank final vari

  • 本文向大家介绍详解Java编程中static关键字和final关键字的使用,包括了详解Java编程中static关键字和final关键字的使用的使用技巧和注意事项,需要的朋友参考一下 Java static关键字以及Java静态变量和静态方法 static 修饰符能够与变量、方法一起使用,表示是“静态”的。 静态变量和静态方法能够通过类名来访问,不需要创建一个类的对象来访问该类的静态成员,所以st

  • 本文向大家介绍java 中 ChannelHandler的用法详解,包括了java 中 ChannelHandler的用法详解的使用技巧和注意事项,需要的朋友参考一下 java 中 ChannelHandler的用法详解 前言: ChannelHandler处理一个I/O event或者拦截一个I/O操作,在它的ChannelPipeline中将其递交给相邻的下一个handler。 通过继承Cha

  • 本文向大家介绍Java中isAssignableFrom的用法详解,包括了Java中isAssignableFrom的用法详解的使用技巧和注意事项,需要的朋友参考一下 class1.isAssignableFrom(class2) 判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回 true;否则返回 false。如果该