扯一下final、權限、內部類、引用類型

2020-12-21 像蝸牛一樣瘋狂編程

final關鍵字

學習了繼承後,我們知道,子類可以在父類的基礎上改寫父類內容,比如,方法重寫。那麼我們能不能隨意地繼承API中提供的類,改寫其內容呢?顯然這是不合適的。為了避免這種隨意改寫的情況,Java提供了 final 關鍵字,用於修飾不可改變內容。final : 不可改變。可以用於修飾類、方法和變量。類:被修飾的類,不能被繼承。方法:被修飾的方法,不能被重寫。變量:被修飾的變量,不能被重新賦值。修飾類的 使用格式:final class 類名 {}查詢 API發現像 public final class String 、 public final class Math 、 public final class Scanner等,很多我們學習過的類,都是被final修飾的,目的就是供我們使用,而不讓我們所以改變其內容。修飾方法的格式:修飾符 final 返回值類型 方法名(參數列表){ //方法體}重寫被 final 修飾的方法,編譯時就會報錯修飾變量:

1. 局部變量——基本類型

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

2. 局部變量——引用類型

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

3. 成員變量

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

顯示初始化;

構造方法初始化。

被final修飾的常量名稱,一般都有書寫規範,所有字母都大寫。

權限修飾符

在Java中提供了四種訪問權限,使用不同的訪問權限修飾符修飾時,被修飾的內容會有不同的訪問權限,

public :公共的。protected :受保護的default :默認的private :私有的

public具有最大權限。private則是最小權限。

編寫代碼時,如果沒有特殊的考慮,建議這樣使用權限:

成員變量使用 private ,隱藏細節。構造方法使用 public ,方便創建對象。成員方法使用 public ,方便調用方法。小貼士:不加權限修飾符,其訪問能力與default修飾符相同

內部類

什麼是內部類

將一個類A定義在另一個類B裡面,裡面的那個類A就稱為內部類,B則稱為外部類。成員內部類

成員內部類 :定義在類中方法外的類。

格式:class 外部類 {

class 內部類{

}

}

在描述事物時,若一個事物內部還包含其他事物,就可以使用內部類這種結構。比如,汽車類 Car 中包含發動機類 Engine ,這時, Engine 就可以使用內部類來描述,定義在成員位置。

代碼舉例:

訪問特點

內部類可以直接訪問外部類的成員,包括私有成員。外部類要訪問內部類的成員,必須要建立內部類的對象。創建內部類對象格式:

外部類名.內部類名 對象名 = new 外部類型().new 內部類型();

內部類仍然是一個獨立的類,在編譯之後會內部類會被編譯成獨立的 .class文件,但是前面冠以外部類的類名和$符號 。

比如,Person$Heart.class

匿名內部類【重點】

匿名內部類 :是內部類的簡化寫法。它的本質是一個 帶具體實現的 父類或者父接口的 匿名的 子類對象。

開發中,最常用到的內部類就是匿名內部類了。以接口舉例,當你使用一個接口時,似乎得做如下幾步操作,

1. 定義子類

2. 重寫接口中的方法

3. 創建子類對象

4. 調用重寫後的方法

我們的目的,最終只是為了調用方法,那麼能不能簡化一下,把以上四步合成一步呢?匿名內部類就是做這樣的快捷方式。

前提 匿名內部類必須繼承一個父類或者實現一個父接口。

引用類型用法總結

實際的開發中,引用類型的使用非常重要,也是非常普遍的。我們可以在理解基本類型的使用方式基礎上,進一步去掌握引用類型的使用方式。基本類型可以作為成員變量、作為方法的參數、作為方法的返回值,那麼當然引用類型也是可以的。

類作為成員變量時,對它進行賦值的操作,實際上,是賦給它該類的一個對象。

相關焦點

  • java關鍵字——final
    對於初學者來說,我們先看這個英文的中文意思,final最終的。final可以修飾類、變量、方法,下面我們分別做講解。1.final修飾類final類表示最終的類,言外之意就是不能有其他類繼承這個final類,所以在做開發時如果自己寫的類不能有繼承,那麼就用final修飾;注意點:final類中的變量可以根據需要設為final,但是final類中的所有方法都會被隱式地指定為final方法2.final變量final變量表示最終的變量,言外之意就是這個變量為常量
  • Java內部類新解,你沒有見過的船新版本
    這樣問題就很簡單了,B類要訪問A類的非靜態成員,要滿足兩個條件:要有A類的實例。且要有訪問成員的權限或者方式。而編譯器在編譯期間就幫我們幹了這兩件事,下面驗證一下。的成員變量和下面的構造函數 final OuterClass this$0; OuterClass$InnerClass(OuterClass); void print();}結論就是:編譯器修改了內部類:增加了一個final的外層類實例作為內部類的成員變量;修改了內部類的構造函數,將外部類實例通過內部類的構造函數傳遞給內部類
  • final關鍵字要掌握的知識點
    fianl修飾的類是不能被繼承的final修飾的方法是不能被子類重寫的final修飾的變量是不可變的final修飾的引用類型變量>基本類型i,我在read方法裡改變它的值編譯器會報錯,因為final修飾的不可變引用類型array,我在構造方法裡指定它裡面元素是1,然後在read方法裡更改元素是2
  • 「002期」JavaSE面試題(二):基本數據類型與訪問修飾符
    Java中成員的訪問權限共有四種,可見性如下:Q:接口和抽象類有什麼區別?不能:定義抽象類就是讓其他類繼承的,如果定義為final,該類就不能被繼承,這樣彼此就回產生矛盾,所以final不能修飾抽象類。
  • Java之final關鍵字詳解
    前言針對Java語言中的final關鍵字,想必都不陌生了。本來主要是來對final做關鍵字做一個總結。final關鍵字用法修飾類當用final去修飾一個類的時候,表示這個類不能被繼承。注意:a.被final修飾的類,final類中的成員變量可以根據自己的實際需要設計為fianl。b. final類中的成員方法都會被隱式的指定為final方法。說明:在自己設計一個類的時候,要想好這個類將來是否會被繼承,如果可以被繼承,則該類不能使用fianl修飾,在這裡呢,一般來說工具類我們往往都會設計成為一個fianl類。在JDK中,被設計為final類的有String、System等。
  • static和final,今天的文章要說的就是訪問控制中的這兩個關鍵字
    昨天的一篇文章介紹了訪問控制中的訪問修飾符以及它們的訪問權限。下面這篇文章我們介紹訪問控制中的第二部分static和final關鍵字。static關鍵字static修飾成員變量用static修飾的成員變量不屬於對象的數據結構,static變量是屬於類的變量,通常可以通過類名來引用static成員。
  • Java之final關鍵字的簡單介紹中
    各位小夥伴,大家好,在之前的文章小編有介紹過關鍵字fina修飾類和成員方法Java之final關鍵字的簡單介紹上。這次,小編要介紹的是關鍵字final修飾局部變量。代碼如下:public class Demo01Final {public static void main(String[] args) {int num1=11;System.out.println(num1);num1=12;//變量可以改變Java之成員變量和局部變量的區別System.out.println(num1);//一旦使用final來修飾變量,這個變量就不能進行改變
  • 「原創」Java並發編程系列06|你不知道的final
    (final要求地址值不能改變)當final修飾一個基本數據類型時,表示該基本數據類型的值一旦在初始化後便不能發生變化; 如果final修飾一個引用類型時,則在對其初始化之後便不能再讓其指向其他對象了,但該引用所指向的對象的內容是可以發生變化的
  • Java面向對象之final、abstract抽象、和變量生命周期
    只要滿足以下條件就可以考慮把一個類設計成final類:在設計之初就考慮不進入繼承體系的類。出於安全考慮,類的實現細節不允許被拓展和修改。比如:基本數據類型的包裝類就是一個典型的例子。該類不會再被拓展。java裡final修飾的類有很多,比如八大基本數據類型的包裝類(Byte,Character、Short、Integer、Long、Float、Double、Boolean)和String等。
  • final 關鍵字的使用
    相信很多人還不知道final關鍵字的使用吧,那就和我一起看看吧1,final關鍵字修飾類Java中的關鍵字被修飾後不能被繼承package chap;final class Animal{}class Dog extends
  • Java初學者系列:一文讀懂final關鍵字
    final直接翻譯為中文的意思是最終的、最後的,java中如果在做某種定義的時候用到了final的話,那即是表示這個final所修飾的內容是「沒有後續的」,這具體是什麼意思呢,接下來我們通過代碼實例來看一下final可以修飾的內容,以及會產生的後果。
  • java.lang.String為什麼是final的?
    str1 和 str2 指向了同一個地址,多引用,一個常量,節省了空間。這個時候把 str1 的 值改為了 "李四",那麼 str2 的值是多少呢?假設字符串是可變的,那麼 str2 的值也是"李四"了。
  • Java之final關鍵字的簡單介紹上
    各位小夥伴們大家好,這次小編要介紹的是final關鍵字,首先我們來了解一下final關鍵字的含義,final關鍵字代表最終,不可改變的。其次,小編簡單介紹一下final關鍵字的用法:1.可以用來修飾一個類2可以用來修飾一個方法3.可以用來修飾一個成員變量4.可以用來修飾一個局部變量這次小編要介紹的是,final關鍵字用來修飾一個類和方法。
  • 內部審計職責及權限
    具體而言,內部審計應履行如下職責: (一)對公司內部監控機制的可靠性、有效性和完整性進行審查和評估; (二)對公司組織結構、系統和程序是否恰當進行審查和評估,以確保成果與既定目標一致; (三)對以確保遵守各項規章制度和既定內部政策為目標的各項制度進行審查和評估
  • final Fantasia(final幻想曲)
    1974年的50萬日元是什麼概念,我換算了一下,其購買力大致相當於今天的8,400美元……1974年正是日本高速增長的末期,所以即使定價如此誇張,這款唱頭依舊賣出了200支以上……此後,final逐漸轉向了系統定製路線,這也是高井先生當年所追求的方向——想獲得最佳的聲音,音響系統中的每一個環節(黑膠唱機/前後級功放/喇叭/避震等)要相互配合,並且最好能根據客人的聽音環境與欣賞品味量身定做
  • 一篇文章帶你弄懂Final關鍵字的相關知識
    一、final關鍵字1.如果一個類被final修飾符所修飾,表示該類不可能有子類,這樣的類就叫做最終類。final關鍵字可以修飾類、變量、方法。2.final關鍵字修飾類、修飾方法、修飾變量的特點final關鍵字修飾類:不能被別的類繼承;final關鍵字修飾方法:方法也不能被覆蓋,也就是方法不能被繼承的子類重寫;final關鍵字修飾變量:成員變量、局部變量是常量,僅一次賦值。