zoukankan      html  css  js  c++  java
  • Java中的final关键字

    final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。申明为final的常量不能再次赋值,一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。下面来一一介绍:

     1. final变量

    final变量是只读的,再次赋值会报错,final变量就是常量,而且通常常量名要大写。

    它必须在构造器中初始化,或者调用this()初始化,否则编译器会报错“final变量(变量名)需要进行初始化”。

    1 public static final String PATH= "C:\file";
    2 PATH= new String("C:\file") //JVM会报错,invalid compilation error

    有一种情况需要注意,当变量申明是符合数据类型时,变量将自动默认为final变量,如下代码会报错。

    public class Test{
        public Byte b = 10;
        public void test(Byte b){
            b = 19; //JVM会报错,invalid compilation error
            }
    }

    2. final方法

    代表这个方法不可以被子类的方法重写。如果一个方法的功能已经足够完整了,以后不用更改,可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定

     1 class Test1{
     2     public final String getValue(){
     3         return "abc";
     4     }
     5 }
     6  
     7 class Test2 extends Test1{
     8     @Override
     9     public final String getValue(){
    10         return "def"; //compilation error: overridden method is final
    11     }
    12 }

    3. final类

    final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。

     1   final class Test1{
     2       public final String getValue(){
     3           return "abc";
     4       }
     5   }
     6    
     7   class Test2 extends Test1{//compilation error: cannot inherit from final class
     8       @Override
     9       public final String getValue(){
    10          return "def"; //compilation error: overridden method is final
    11      }
    12  }


    4. 一种特殊的final对象,对于集合对象声明为final指的是引用不能被更改,但是你可以向其中增加,删除或者改变内容

    1 private final List test= new ArrayList();
    2 test.add(“a”);  //valid
    3 test.add("b"); //valid
    4 test= new Vector();  //not valid
  • 相关阅读:
    【Linux】解压分卷压缩的zip文件
    kafka数据清理
    在 Kubernetes 上安装 Gitlab CI Runner Gitlab CI 基本概念以及 Runner 的安装
    APM监控--(三)zipkin部署手册
    K8S使用NodePort类型Service
    kubernetes基本概念 pod, service
    rsyslog配置解析
    日志收集之rsyslog to kafka
    linux auditd审计的简单使用和理解
    Nginx的try_files指令使用实例
  • 原文地址:https://www.cnblogs.com/clarke157/p/6575352.html
Copyright © 2011-2022 走看看