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

举例讲解Java中final关键字的用法

公西马鲁
2023-03-14
本文向大家介绍举例讲解Java中final关键字的用法,包括了举例讲解Java中final关键字的用法的使用技巧和注意事项,需要的朋友参考一下

1. final variable

final variable 就是一个常量,一旦被初始化就不可以被改变。

class Test1 {
 final double PI = 3.14; //常量的名称最好大写

 public Test1(){
  PI = 3.14;
 }

  void test(){
   System.out.println("PI is: " + PI);
  }

 public static void main(String[] args){
  Test1 t = new Test1();
  t.test();
 }
}

输出:

PI is: 3.14

(1)Blank final variable

在声明时未初始化的 final variable 被称作 blank final variable, blank final variable必须在 构造函数中被初始化,否则会抛出编译错误。

class Test1 {
 final double PI;

 Test1(){
 PI = 3.14; //在构造函数中初始化
 }

  void test(){
   System.out.println("PI is: " + PI);
  }

 public static void main(String[] args){
 Test1 t = new Test1();
 t.test();
 }
}

输出:

PI is: 3.14

(2)Uninitialized static final variable

在声明阶段未初始化的 static final variable 只能在静态代码块中被初始化

class Test1 {
 static final double PI;

 static {
 PI = 3.14;
 }

  void test(){
   System.out.println("PI is: " + PI);
  }

 public static void main(String[] args){
 Test1 t = new Test1();
 t.test();
 }
}

输出:

PI is: 3.14

2. final method

final method 不能被覆盖。也就是说子类可以调用父类的 fianl method,但是不能覆盖它。

class Test {
 static final double PI = 3.14;

  final void test(){
   System.out.println("PI is: " + PI);
  }
}

class Test1 extends Test{

 public static void main(String[] args){
 Test1 t = new Test1();
 t.test();
 }
}

输出:

PI is: 3.14

3. final class

final calss 不能被继承

final class Test1 {
 static final double PI = 3.14;

  final void test(){
   System.out.println("PI is: " + PI);
  }

 public static void main(String[] args){
 Test1 t = new Test1();
 t.test();
 }
}

输出:

PI is: 3.14

PS:java.lang.String类为什么设计成 final 的?
首先,先得清楚 final 这个关键字。
final的出现就是为了为了不想改变,而不想改变的理由有两点:设计或者效率。final 修饰的类是不被能继承的,所以 final 修饰的类是不能被篡改的。
了解了这一点,我们再看看问题:
(1)从设计上讲,
A、确保它们不会在子类中改变语义。String类是final类,这意味着不允许任何人定义String的子类。换言之,如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象。
B、String 一旦被创建是不能被修改的,因为 java 设计者将 String 为可以共享的,下面这段是源码中的注释:
(2)从效率上讲:
A、设计成final,JVM才不用对相关方法在虚函数表中查询,而直接定位到String类的相关方法上,提高了执行效率。
B、Java设计者认为共享带来的效率更高。
总而言之,就是要保证 java.lang.String 引用引用的对象一定是 java.lang.String的对象,而不是引用它的子孙类,这样才能保证它的效率和安全。

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

  • 本文向大家介绍请你讲讲Java里面的final关键字是怎么用的?相关面试题,主要包含被问及请你讲讲Java里面的final关键字是怎么用的?时的应答技巧和注意事项,需要的朋友参考一下 考察点:关键字 当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所

  • 本文向大家介绍Java中的final关键字深入理解,包括了Java中的final关键字深入理解的使用技巧和注意事项,需要的朋友参考一下  java final关键字详解: 前言: Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中我将带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的

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

  • 问题内容: 我经常遇到如下所示的方法: 如果在未传递最终参数的情况下调用此方法会发生什么。例如,可以将稍后更改的Object1(因此未声明为final)传递给此方法 问题答案: Java总是在将参数发送给方法之前先对其进行复制。这意味着最终的调用代码没有任何区别。这仅意味着无法在方法内部重新分配变量。(请注意,如果你有最终对象,则仍然可以更改对象的属性)。

  • 本文向大家介绍举例讲解Java中的Stream流概念,包括了举例讲解Java中的Stream流概念的使用技巧和注意事项,需要的朋友参考一下 1、基本的输入流和输出流 流是 Java 中最重要的基本概念之一。文件读写、网络收发、进程通信,几乎所有需要输入输出的地方,都要用到流。 流是做什么用的呢?就是做输入输出用的。为什么输入输出要用“流”这种方式呢?因为程序输入输出的基本单位是字节,输入就是获取一