Java中的關鍵字與保留字

來源:互聯網
上載者:User

前言:很基礎的知識,接上篇。

關鍵字(45個)

Java的關鍵字對java的編譯器有特殊的意義,他們用來表示一種資料類型,或者表示程式的結構等,關鍵字不能用作變數名、方法名、類名、包名。

包引入和包聲明:import package用於類的介面聲明:class extends implements interface修飾符:abstract final native private protected public static synchronized transient volatile資料類型:boolean byte char short int long float double流程式控制制:break case continue default for do while if else return switch 建立對象:new引用:this super方法傳回型別:void異常處理:catch finally throw throws try操作符:instanceof某些資料類型的可先值(非關鍵字):false true null

保留字(14個)

保留字是為java預留的關鍵字,他們雖然現在沒有作為關鍵字,但在以後的升級版本中有可能作為關鍵字。

byValue cast false future generic inner operator outer rest true var goto const null

abstract class與interface

  在物件導向的概念中,我們知道所有的對象都是通過類來描繪的,但是並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的資訊來描繪一個具體的對象,這樣的類就是抽象類別。
  抽象類別往往用來表徵我們在對問題領域進行分析、 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,我們不能把它們執行個體化(拿不出一個具體的東西)所以稱之為抽象。
  比如:我們要描述“水果”,它就是一個抽象,它有品質、體積等一些共性(水果有品質),但又缺乏特性(蘋果、橘子都是水果,它們有自己的特性),我們拿不出唯一一種能代表水果的東西(因為蘋果、橘子都不能代表水果),可用抽象類別來描述它,所以抽象類別是不能夠執行個體化的。當我們用某個類來具體描述“蘋果”時,這個類就可以繼承描述“水果”的抽象類別,我們都知道“蘋果”是一種“水果”。

public abstract class AbstractClass {public int t; // 普通資料成員public abstract void method1(); // 抽象方法,抽象類別的子類在類中必須實現抽象類別中的抽象方法public void method2() {// 非抽象方法// 抽象類別中可以賦予非抽象方法方法的預設行為,即方法的具體實現}}public interface Interface{ static final int I = 0;//介面中不能有普通資料成員,只能夠有靜態不能被修改的資料成員,static表示全域,final表示不可修改//可以不用static final 修飾,會隱式的聲明為static和finalpublic void method1();  //介面中的方法一定是抽象方法,所以不用abstract修飾//介面中不能賦予方法的預設行為,即不能有方法的具體實現}

共同點:

  • 抽象類別和介面中的抽象方法都不能有具體實現,而必須由他們的子類實現所有的抽象方法(必須實現,哪怕方法體是空的)。
  • 都不能被執行個體化。

不同點:

  • 繼承上,子類只可以繼承一個抽象類別,卻可以實現多個介面。所以抽象類別作為類型定義工具的效能大打折扣。在這一點上,介面的優勢就出來了,任何一個實現了一個介面所規定的方法的類都可以具有這個介面的類型,而一個類可以實現任意多個介面,從而這個類就有了多種類型。
  • 成員方法上,抽象類別可以提供方法的實現,供子類繼承,而介面不可以。這是抽象類別的優點,抽象類別添加的實現方法,所有子類都可以得到,而在介面中添加抽象方法,還需要在所有子類中都去一一實現這些方法。
  • 資料成員上,抽象類別中可以有自己的資料成員,而在介面中只能夠有靜態不能被修改的資料成員。不過在介面中一般不定義資料成員。
  • 設計理念上,抽象類別像是提取一些具體子類的公因式,而介面是為了將一些不相關的類“雜湊”成一個共同的群體。其實abstract class表示的是"is-a"關係,interface表示的是"like-a"關係。

final

  在Java環境中,final關鍵字具有“無法改變”含義。可以用來修飾非抽象類別、非抽象成員方法和變數。可能出於兩種理解而阻止改變:設計和效率。

  • final類。final類不能被繼承,因此final類的成員方法沒有機會被覆蓋,預設都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會載被擴充,那麼就設計為final類。 
  • final方法。定義為final的方法無法被子類覆蓋,子類只能繼承,無法修改。編譯器在遇到調用final方法時候會轉入內嵌機制,大大提高執行效率。
  • final變數。用final修飾的成員變數是常量,值一旦給定就無法修改。
  • final參數。final修飾的參數,可以讀取使用,但無法修改參數值。

static

  static是“靜態”的意思,修飾成員變數、成員方法、形成靜態代碼塊。被static修飾的成員變數和成員方法獨立於該類的任何對象。也就是說,它不依賴類特定的執行個體,被類的所有執行個體共用。只要這個類被載入,Java虛擬機器就能根據類名在運行時資料區的方法區內找到他們。因此,static對象可以在它的任何對象建立之前訪問,無需引用任何對象。

  靜態變數與執行個體變數

  • 靜態變數在記憶體中只有一個拷貝(節省記憶體),JVM只為靜態分配一次記憶體,在載入類的過程中完成靜態變數的記憶體配置,可用類名直接存取(方便),當然也可以通過對象來訪問(不推薦)。靜態變數不屬於某個執行個體對象,而是屬於類,所以叫類變數。
  • 執行個體變數,每建立一個執行個體,就會為執行個體變數分配一次記憶體,執行個體變數可以在記憶體中有多個拷貝,互不影響(靈活)。執行個體變數屬於某個對象的屬性,必須建立了對象,才能使用執行個體變數。

  靜態方法

  • 靜態方法可以通過類來調用,也可以通過執行個體訪問。
  • 靜態方法中不能用this和super關鍵字。
  • 靜態方法中不能直接存取類中的執行個體變數和執行個體方法,只能訪問所屬類的靜態變數和靜態方法,因為執行個體成員與特定的對象關聯。
  • 因為static獨立於任何執行個體,所以靜態方法必須被實現,而不能是抽象方法。

  靜態代碼塊

  靜態代碼塊是獨立於類成員的語句塊,可以有多個,可以在任意位置,不在任何方法體內。當JVM載入類時會按照位置先後順序執行這些static代碼塊,每個代碼塊只執行一次。利用靜態代碼塊可以對一些static變數進行賦初值。

private、protected、public

  存取權限控制,在這裡。

待續……

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.