關鍵字是電腦語言事先定義的,是特別意義的標識符,又叫保留字。用來表示一種數據類型或程序的結構等,關鍵字不能用作變量名、類名、方法名或參數。java目前共有50個關鍵字,其中"const"和"goto"這兩個關鍵字在Java語言中並沒有具體含義(未被使用)。
1、關鍵字總覽
基本數據類型(9):boolean、char、byte、short、int、long、float、double、null
變量引用(2):super、this
類、方法、變量修飾符(15):class、abstract(類、方法)、interface、enum、static(程序塊、方法、內部類、變量)、final(類、方法、常量)、extends、implements、new、strictfp、synchronized、transient、volatile、native、void
程序結構(11):if、else、for、do、while、switch、case、continue、break、return、instanceof
java包(2):import、package
訪問控制(4):private(屬性、方法)、default(類、屬性、方法)、protected(屬性、方法)、public(類、屬性、方法)
異常處理(5):try、catch、throw、throws、finally
未使用(2):goto、const
2、關鍵字基本含義
關鍵字 | 含義 |
abstract | 表明類或者成員方法具有抽象屬性 |
assert | 用來進行程序調試 |
boolean | 基本數據類型之一,布爾類型 |
break | 提前跳出一個kua |
byte | 基本數據類型之一,字節類型 |
case | 用在switch語句之中,表示其中的一個分支 |
catch | 用在異常處理中,用來捕捉異常 |
char | 基本數據類型之一,字符類型 |
class | 類 |
const | 保留關鍵字,沒有具體含義 |
continue | 回到一個塊的開始處 |
default | 默認,例如,用在switch語句中,表明一個默認的分支 |
do | 用在do-while循環結構中 |
double | 基本數據類型之一,雙精度浮點數類型 |
else | 用在條件語句中,表明當條件不成立時的分支 |
enum | 枚舉 |
extends | 表明一個類型是另一個類型的子類型,這里常見的類型有類和接口 |
final | 用來說明最終屬性,表明一個類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變 |
finally | 用於處理異常情況,用來聲明一個基本肯定會被執行到的語句塊 |
float | 基本數據類型之一,單精度浮點數類型 |
for | 一種循環結構的引導詞 |
goto | 保留關鍵字,沒有具體含義 |
if | 條件語句的引導詞 |
implements | 表明一個類實現了給定的接口 |
import | 表明要訪問指定的類或包 |
instanceof | 用來測試一個對象是否是指定類型的實例對象 |
int | 基本數據類型之一,整數類型 |
interface | 接口 |
long | 基本數據類型之一,長整數類型 |
native | 用來聲明一個方法是由與計算機相關的語言(如C/C++/FORTRAN語言)實現的 |
new | 用來創建新實例對象 |
null | 用來標識一個不確定的對象 |
package | 包 |
private | 一種訪問控制方式:私用模式 |
protected | 一種訪問控制方式:保護模式 |
public | 一種訪問控制方式:共用模式 |
return | 從成員方法中返回數據 |
short | 基本數據類型之一,短整數類型 |
static | 表明具有靜態屬性 |
strictfp | 用來聲明FP_strict(單精度或雙精度浮點數)表達式遵循IEEE 754算術規范 |
super | 表明當前對象的父類型的引用或者父類型的構造方法 |
switch | 分支語句結構的引導詞 |
synchronized | 表明一段代碼需要同步執行 |
this | 指向當前實例對象的引用 |
throw | 拋出一個異常 |
throws | 聲明在當前定義的成員方法中所有需要拋出的異常 |
transient | 聲明不用序列化的成員域 |
try | 嘗試一個可能拋出異常的程序塊 |
void | 聲明當前成員方法沒有返回值 |
volatile |
表明兩個或者多個變量必須同步地發生變化 |
while |
用在循環結構中 |
3、重點介紹
1)訪問權限private(私有)、default(包)、protected(包、繼承)、public(公有)
注意:class只能用public、default修飾,除了內部類。
2)final、finally、finalize
final用於聲明屬性(常量),方法和類,分別表示屬性不可改變,方法不可覆蓋,類不可繼承(因此一個類不可以即申明為abstract,又申明為final)。
finally是異常處理語句結構的一部分,表示總是執行(需要自己在方法中添加finally執行的內容)。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,供垃圾收集時的其他資源回收,例如關閉文件等。
3)continue、break、return
continue:終止本次循環的執行,即跳過本次循環未執行的代碼直接進入下次循環
break:在循環體內則是強行結束整個循環,直接轉向循環下面的語句;在switch語句內則表示跳出switch語句體。
return:返回一個值給調用該方法的語句;中斷函數執行,返回調用函數處
4)static、final
static是靜態修飾關鍵字,可以修飾變量、程序塊以、內部類、方法。static修飾變量時jvm會將將其分配在內存數據段上,所有程序對它的引用都會指向這一個地址而不會重新分配內存,此變量可以通過類名直接訪問;當修飾一個程序塊的時候(也就是直接將代碼寫在static{...}中)時候,虛擬機就會優先加載靜態塊中代碼,這主要用於系統初始化;當修飾內部類的時候被稱為嵌套內部類(在類博文中介紹);當修飾一個方法時候你就可以直接通過類來調用這個方法而不需要新建對象。
final可以修飾變量、方法、類(2中已有介紹)。
網上有說常量存儲在PermGen space中(java常量池存放在哪里),查找可知PermGen space的全稱是Permanent Generation space,是指內存的永久保存區域,這塊內存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGen space中,它和存放類實例(Instance)的Heap區域不同,GC(Garbage Collection)不會在主程序運行期對PermGen space進行清理,所以如果你的應用中有很多CLASS的話,就很可能出現PermGen space錯誤,這種錯誤常見在web服務器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的第三方jar, 其大小超過了jvm默認的大小(4M)那么就會產生此錯誤信息了。
又看到這樣一篇文章JAVA中String類的intern()方法的作用,所以基本可以確定常量被存儲在永久保存區域(PermGen space)中。
通過這篇文章java中堆棧(stack)和堆(heap)可以知道PermGen space其實就是我們java中經常說的代碼區。