Java中的關鍵字與保留字


1、關鍵字(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

2、保留字(14個)

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

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

3、abstract class與interface

  在面向對象的概念中,我們知道所有的對象都是通過類來描繪的,但是並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。

  抽象類往往用來表征我們在對問題領域進行分析、 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,我們不能把它們實例化(拿不出一個具體的東西)所以稱之為抽象。

  比如:我們要描述“水果”,它就是一個抽象,它有質量、體積等一些共性(水果有質量),但又缺乏特性(蘋果、橘子都是水果,它們有自己的特性),我們拿不出唯一一種能代表水果的東西(因為蘋果、橘子都不能代表水果),可用抽象類來描述它,所以抽象類是不能夠實例化的。當我們用某個類來具體描述“蘋果”時,這個類就可以繼承描述“水果”的抽象類,我們都知道“蘋果”是一種“水果”。

1
2
3
4
5
6
7
8
9
10
11
12
13
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和final
     public void method1();  //接口中的方法一定是抽象方法,所以不用abstract修飾
                             //接口中不能賦予方法的默認行為,即不能有方法的具體實現
}

  共同點:

  • 抽象類和接口中的抽象方法都不能有具體實現,而必須由他們的子類實現所有的抽象方法(必須實現,哪怕方法體是空的)。
  • 都不能被實例化。

  不同點:

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

4、final

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

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

5、static

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

  靜態變量與實例變量

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

  靜態方法

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

  靜態代碼塊

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

private、protected、public


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM