final關鍵字

final關鍵字

一、final關鍵字的概述

​ 學習了繼承後,我們知道,子類可以在父類的基礎上改寫父類內容,比如,方法重寫.那麼我們能不能隨意的繼承API中提供的類,改寫其內容呢?顯然這是不合適的.爲了避免這種隨意的改寫的情況,java提供了final關鍵字,用於修改不可改變內容.

  • final :不可改變.可以修飾類,方法和變量.

二、fianl關鍵字的用法

2.1fianl用於修飾類

格式如下:

final class 類名 {
  
}
注意事項 :被final修飾的類是不能被繼承的,但內容可以修改.
2.2fianl用於修飾成員方法

格式如下:

權限修飾符 final 返回值類型 方法名 (參數列表) {
    
}
注意事項 :被final修飾的方法不能被重寫,重寫時就會編譯報錯.
2.3fianl用於修飾局部變量
  1. 局部變量——基本類型

    基本類型的局部變量,被final修飾後,只能賦值一次,不能更改.代碼如下:

    public class FinalDemo1 {
        public static void main(String[] args) {
            // 聲明變量,使用final修飾
            final int a;
            // 第一次賦值 
            a = 10;
            // 第二次賦值
            a = 20; // 報錯,不可重新賦值
    
    
            // 聲明變量,直接賦值,使用final修飾
            final int b = 10;
            // 第二次賦值
            b = 20; // 報錯,不可重新賦值
        }
    }
    
    1. 局部變量——應用類型

      引用類型的局部變量,被final修飾後,只能指向一個對象,地址不能在更改.但不影響內部的成員變量值的修改,代碼如下:

      public class FinalDemo2 {
          public static void main(String[] args) {
              // 創建 User 對象
              final   User u = new User();
              // 創建 另一個 User對象
              u = new User(); // 報錯,指向了新的對象,地址值改變。
      
              // 調用setName方法
              u.setName("張三"); // 可以修改
          }
      }
      
2.4fianl用於修飾成員變量

成員變量涉及到初始化的問題初始化方式有兩種,只能二選一:

  • 顯示初始化:

    public class User {
        final String USERNAME = "張三";
        private int age;
    }
    
  • 構造方法初始化:

    public class User {
        final String USERNAME ;
        private int age;
        public User(String username, int age) {
            this.USERNAME = username;
            this.age = age;
        }
    }
    
總結 :
  • final修飾的常量名稱,一般都有書寫規範,所有字母都大寫.

    final:
          概述:關鍵字,用於修飾不可改變內容
          使用:final關鍵字可以修飾類,方法,變量
    final關鍵字修飾類:final修飾的類是不能被繼承的
           格式:
                public final class 類名{
                    
                 }
    
    final關鍵字修飾方法:final修飾的方法是不能被重寫的
           格式:
           權限修飾符 final 返回值類型 方法名(參數列表){
               
           }
    final關鍵字修飾變量:final修飾的變量,只能賦值一次,不能重複賦值
           格式:
             final 數據類型 變量名 =;   推薦
    
             final 數據類型 變量名;
                  變量名 =;
    ===========================================================
    
      // final關鍵字修飾局部變量: 基本數據類型,引用數據類型
      // final關鍵字修飾局部變量: 基本數據類型
            final int NUM = 10;
            // num = 20; 錯誤的,因爲num被final修飾,變成了常量,常量只能賦值一次
            System.out.println(NUM);// 10
    
            final int NUM2;
            NUM2 = 100;
            // num2 = 1000; 錯誤的,因爲num2被final修飾,變成了常量,常量只能賦值一次
            System.out.println(NUM2);//100
    
    ===========================================================
        
            // final關鍵字修飾局部變量: 引用數據類型
            final Animal anl = new Animal();
            anl.name = "jack";
            System.out.println(anl.name);// jack
            // anl = new Animal();錯誤的,因爲anl被final修飾,變成了常量,常量只能賦值一次
            anl.name = "rose";
            System.out.println(anl.name);// rose
    
            // final關鍵字修飾成員變量:只能賦值一次
        	final int AGE = 18;// 直接賦值
        	final int WEIGHT;
        	String name;
    
            // 通過構造方式賦值: 一定要保證所有構造方法都可以給該常量賦值
        	public Dog(){
        	    this.WEIGHT = 30;
        	}
    	
        	public Dog(String name){
        	    this.WEIGHT = 30;
        	    this.name = name;
        	}
    
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章