您當前的位置:首頁 > 詩詞

Java 漫談(二)

作者:由 金剛糖葫蘆娃 發表于 詩詞時間:2018-11-12

類名

Java編譯器的設計與java原始碼的語法結構是相輔相成的,先有語法,再有編譯器。大家都知道,java是以類為單位進行組織的,類是java對世界的抽象描述,Java程式的執行其實就是多個類之間的相互呼叫。表現在原始碼上,java的語法規定,用class關鍵字宣告一個類,如下所示:

class

Demo

{

public

static

void

main

String

[]

args

{

System

out

println

9

);

}

}

class關鍵字緊跟一個空格後面就是類的名稱,再隔一個空格就是類的內容,用一對花括號包裹,類中的內容主要分為欄位(也稱為域或屬性)和方法兩部分。上面這個類沒有屬性,只有一個名為main的方法,它將會在螢幕上列印數字9。把這個類的程式碼儲存在檔案test。java中。

很多教科書上都說,類名需要首字母大寫,但我自己實驗了一下,其實小寫也可以編譯並且執行。然而,還是建議遵循規範,類名首字母大寫。

javac與java命令

編譯並執行上面的test。java,如下:

show

ls

test

java

show

javac

test

java

show

ls

Demo

class

test

java

show

java

Demo

9

上面的操作是在Linux系統的命令列中,show是當前所在目錄的名字,編譯使用的javac命令以及執行使用的java命令都是java自身提供的原生命令,這兩個命令可以說是java最基本的兩個工具了。高階開發工具(IDE)如IDEA,底層其實也是呼叫的這兩個命令,IDE雖然使開發更方便,但代價就是隱藏了很多底層細節,讓你不知道在作業系統層面到底發生了什麼。我個人其實更喜歡更底層打交道,這樣才會對計算機技術瞭解的更深。現在,從上面的展示中可以發現以下資訊:

1。 編譯之後的class檔名與類名保持一致;

2。 原始碼檔名可以與類名不一致,但是字尾必須是。java,否則編譯器無法識別;

3。 執行時,直接在java命令後面寫上類名即可,不必加上。class字尾,加上反而會報錯。

第二點需要展開說一下,一個java的原始碼檔案中,可以儲存多個類,但是原始碼中聲明瞭幾個class,在編譯後就會生成幾個對應的class檔案。這意味著,一個class檔案只能儲存一個類的資訊,但是多個類的原始碼可以共存在一個。java檔案中。習慣上,我們傾向於一個java檔案只儲存一個類的原始碼,也就是隻宣告一個class,很少出現多個class的情形,這樣做的目的是使工程結構更清晰,更方便管理。共存情況示例如下:

class

Demo1

{

public

static

void

main

String

[]

args

{

System

out

println

9

);

}

}

class

Demo2

{

public

static

void

main

String

[]

args

{

System

out

println

8

);

}

}

show

javac

test

java

show

ls

Demo1

class

Demo2

class

test

java

訪問許可權對原始碼檔案的影響

訪問許可權

下面引入訪問許可權的概念。說到訪問許可權,不得不提面試經常會被問到的java作為面嚮物件語言的三大特性:封裝、繼承和多型,而訪問許可權正是特性之一“封裝”的體現。所謂封裝,指的是隱藏實現細節,這也是設計的哲學之一:客戶只需要知道功能怎麼用即可,而不需要知道這個功能是如何實現的。

Java中的訪問許可權分為四個級別:私有許可權、預設許可權、繼承許可權和公共許可權,許可權依次增大。具體到語法上:

1。 private關鍵字代表私有許可權,只能修飾類的欄位或方法,不能修飾類本身,私有許可權的意思是隻能在該類內部可訪問,其他類訪問不到;

2。 protected關鍵字代表繼承許可權,同樣無法修飾類本身,被protected修飾的欄位或方法,只能被繼承該類的子類所訪問;

3。 public關鍵字代表公共許可權,可以修飾類本身以及類的欄位或方法,其含義是其他任何類都可以訪問;

4。 若類、類的欄位或方法沒有被以上任何一個關鍵字修飾,則意味著default(預設)許可權,預設許可權意味著只有和該類在同一個包下的類才可以訪問。

注意,

預設許可權並沒有對應的關鍵字

,default雖然是java的一個關鍵字,但是跟許可權無關;若想要類或類的欄位及方法擁有預設許可權,只要不在其前面新增任何許可權修飾符即可。關於繼承、包以及更多訪問許可權相關內容,以後會慢慢揭開它們的神秘面紗。

對原始碼檔案的影響

由上可知,類本身的訪問許可權只有兩種:公共許可權或預設許可權。具體到語法上,class的許可權修飾符,要麼是public,要麼啥都沒有。這會產生什麼影響呢?這會影響。java檔案的命名。上面提到,同一份java原始碼檔案中可以宣告多個類,而且檔案的命名與類的命名毫無關係。現在,引入訪問許可權機制以後,增加了以下約束:

1。 在一份原始碼檔案宣告的所有類當中,最多隻能有一個被public修飾;

2。 若一份原始碼檔案中存在一個類被public修飾,那麼該原始碼檔案的命名必須和該類名一致。

驗證

test。java檔案修改如下:

public

class

Demo1

{

public

static

void

main

String

[]

args

{

System

out

println

9

);

}

}

class

Demo2

{

public

static

void

main

String

[]

args

{

System

out

println

8

);

}

}

編譯:

show

javac

test

java

test

java

1

錯誤

類Demo1是公共的

應在名為

Demo1

java

的檔案中宣告

public

class

Demo1

{

^

1

個錯誤

這說明,一旦有一個類被宣告為public,那麼原始碼檔案的名稱必須以該類的名稱命名。將檔案改名為Demo1。java後編譯透過。如果兩個類都是public的會怎樣?

public

class

Demo1

{

public

static

void

main

String

[]

args

{

System

out

println

9

);

}

}

public

class

Demo2

{

public

static

void

main

String

[]

args

{

System

out

println

8

);

}

}

編譯:

show

javac

Demo1

java

Demo1

java

7

錯誤

類Demo2是公共的

應在名為

Demo2

java

的檔案中宣告

public

class

Demo2

{

^

1

個錯誤

上面的測試表明,當在一個。java檔案中宣告一個以上的public class時,會出現一山不容二虎的情況,編譯器會提示每個public類要儲存在一個單獨的以自己名字命名的。java檔案中。

那麼問題來了:java為什麼要這麼設計?網上查了很多資料,並沒有特別使我信服的,不過確實開闊了一下腦洞。自己做了些實驗,應該解開了這個謎題,欲知後事如何,且聽下回分解。

——————————————————————————————————————————————————

歡迎訪問我的部落格:覓渡。

標簽: Java  許可權  Class  檔案  原始碼