Java常見關鍵字解析

來源:互聯網
上載者:User

標籤:middle   包括   資料類型   microsoft   stat   派生   set   改變   1.2   

Java常見關鍵字解析Java關鍵字Java關鍵字與保留字

  1,Java 關鍵字列表 (依字母排序 共50組):

   abstract, assert, boolean, break, byte, case, catch, char, class, const(保留關鍵字), continue, default, do, double, else, enum, extends, final, finally, float, for, goto(保留關鍵字), if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while

  2,保留字列表 (依字母排序 共14組),Java保留字是指現有Java版本尚未使用,但以後版本可能會作為關鍵字使用:true,false,null,byValue, cast, future, generic, inner, operator, outer, rest,var, goto (保留關鍵字) , const (保留關鍵字)

  3、goto和const是保留字也是關鍵字。

java標識符

標識符就是用於Java程式中變數,類,方法等命名的符號,
1Java標識符只能由數字、字母、底線_或$符號以及Unicode字元集組成
[2]Java標識符必須以字母、底線“_”或“$”符號以及Unicode字元集開頭
[3]Java標識符不可以是Java關鍵字、保留字(const、goto)和字面量(true、false、null)
[4]Java標識符區分大小寫,是大小寫敏感的

1、 構造器 1、 this關鍵字

this關鍵字只能在方法內部使用,表示對“調用方法的那個對象”的引用。
類方法不能用this調用。

2、 static關鍵字

static方法就是沒有this的方法。
在static方法內部不能調用非靜態方法;而在非靜態方法中是可以調用靜態方法的,且可以在沒有建立任何對象的前提下。
static不能修飾成員變數,即static修飾欄位的語句行不能出現在main方法及其它方法中。Java中靜態變數只能在類主體中定義,不能在方法中定義。 靜態變數屬於類所有而不屬於方法。

2、 存取控制許可權

 


 

 

2.1、 private:你無法訪問的

  只能當前類能夠訪問private修飾的變數或方法

2.2、 default:包存取權限(預設default)

  同一個包內的所有類都可以訪問沒有修飾符(即預設)的變數或方法。即當前的包中的所有其他類對那個成員都有存取權限,但對於包之外的類,卻是不能訪問該成員的。

  取得對某成員訪問權的途徑有如下方式:

   1. 用public修飾成員,任何人在任何地方都有存取權限
   2. 不加存取權限修飾詞,並將其他類放在同一包內
   3. 繼承,繼承來的類可以訪問父類的public成員和protected成員
   4. 提供get和set方法,以讀取和改變數值(JavaBeans的基本原理)

2.3、 protected:繼承存取權限

  基類的protected成員只有衍生類別能夠訪問(同一包內的其他類也可以訪問)

2.4、 public:介面存取權限

  所有的類都可以訪問。對於介面來說只能使用public修飾。

2.5、 類的存取權限

為了控制某個類的存取權限

  1. 修飾詞必須出現於class之前(預設修飾(去掉public)為包存取控制許可權)
  2. 每個編譯單元(檔案)都只能有一個public類。
  3. public類的名稱必須與含有該編譯單元的檔案名稱相同(包括大小寫)
  4. 編譯單元內完全不帶public修飾也有可能。在這種情況下可以隨便對檔案命名。

注意

  1. 類不可以是private,及protected的。只能是public或預設包存取權限。(實際上內部類可以使private或protected,但這是一個特例)

  2. 如果不希望其他任何人對該類有存取權限,可以把所有的構造器都指定為private,從而阻止任何人建立該類的對象。

    在這種情況下可以在該類的static成員內部建立,例如:

//第一種方式class Soup1{private Soup1(){}public static Soup1 makeSoup(){return new Soup1();     //通過靜態成員建立該類的對象}}//第二種方式(用到了設計模式-單例模式)class Soup2{private Soup2(){}private static Soup2 ps1 = new Soup2();public static Soup2 acess(){return new Soup1();     //通過靜態成員建立該類的對象}pubblic void f(){}}
3、 final關鍵字3.1、 final資料

1、 final關鍵字可以用於成員變數、本地變數、方法以及類。
2、 final成員變數必須在聲明的時候初始化或者在構造器中初始化,否則就會報編譯錯誤。
3、 你不能夠對final變數再次賦值。
4、 本地變數必須在聲明時賦值。
5、 在匿名類中所有變數都必須是final變數。
6、 final方法不能被重寫。
7、 final類不能被繼承。
8、 沒有在聲明時初始化final變數的稱為空白final變數(blank final variable),它們必須在構造器中初始化,或者調用this()初始化。不這麼做的話,編譯器會報錯“final變數(變數名)需要進行初始化”。

final+基礎資料型別 (Elementary Data Type):在Java中對基礎資料型別 (Elementary Data Type)用final修飾表示這類變數可在編譯時間執行計算式,減輕運行負擔,但在定義時必須對其進行賦值。

final+static+基本類型資料:即編譯期常量,只佔據一段不能改變的儲存空間。將用大寫表示,並使底線分隔各個單詞。

final+對象或數組(數組也是一個對象):final使引用恒定不變。一旦引用被初始化指向一個對象,就無法把它改為指向另一個對象。但對象自身是可變的。

注意:不能因為某個資料是final的就認為它在程式編譯完成時就知道他的值了,也可能實在程式執行運行時才知道他的值的。例如private final value = rand.nextInt(20),在編譯完成時並不知道value的值,在程式執行運行後才知道它的值的。

空白final:例如private final int num;
final在使用時一般在定義處賦值,而對於這種空白final定義類型沒有在定義處賦值就必須在構造器中賦值。

final參數:當final用來修飾參數時,
若修飾的參數為基本型別參數(final int i),則基本類型的值不能被改變,即只能讀不能執行i++,i--等改變i的值的操作。否則不能編譯。
若修飾的參數為對象(final Car car)時,不能更改指向的對象的參數引用;如car = new Car()就是錯誤的用法。

3.2、 final方法

final修飾的方法,無法被覆蓋。
注意:其實類中的所有private方法都隱式地指定為final的。所以private final void f() 這種寫法編譯器不會不報錯的。 由於private修飾的方法子類是訪問不到的,子類更加不可能去覆蓋了,所以與final修飾的方法無法被覆蓋並不衝突。

3.3、 final類

final修飾的類不能被繼承。
final修飾的類中的類成員跟普通的類的類成員沒有區別;但是final類中的方法都是隱式指定為final類型的

String
String str1 = "hello";String str2 = "he" + new String("llo");System.err.println(str1 == str2);

String str1 = "hello";這裡的str1指的是方法區的字串常量池中的“hello”,編譯時間期就知道的; String str2 = "he" + new String("llo");這裡的str2必須在運行時才知道str2是什麼,所以它是指向的是堆裡定義的字串“hello”,所以這兩個引用是不一樣的。
如果用str1.equal(str2),那麼返回的是True;因為兩個字串的內容一樣。

instanceof

o instanceof Class 若instanceof左邊的參數為null,則返回FALSE。

transient

Java的Serializable提供了一種序列化對象執行個體的機制。當序列化對象時,可能有一個特殊的對象資料成員,我們不想用Serializable機制來儲存它。為了在一個特定對象的一個域上關閉Serializable,可以在這個域前加上關鍵字transient。
transient是Java語言的關鍵字,用來表示一個域不是該對象序列化的一部分。當一個對象被序列化的時候,transient型變數的值不包括在序列化的表示中,然而非transient型的變數是被包括進去的。

Java常見關鍵字解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.