當前位置:才華齋>計算機>java語言>

java類的構成

java語言 閱讀(7.69K)

Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於PC、資料中心、遊戲控制檯、科學超級計算機、行動電話和網際網路,同時擁有全球最大的開發者專業社群。以下是小編為大家搜尋整理的java類的基本構成,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

java類的構成

  1:Java 類的定義形式

一個完整的 Java 類通常由下面六個部分組成:

包定義語句

import 語句

類定義{

成員變數

構造方法

成員方法

}

其中:只有類定義和“{}”是不可或缺的,其餘部分都可以根據需要來定義。

下面分別來學習各個部分的基本規則,看看如何寫 Java 的類。

  2: 包

  2.1:包 是什麼

在 Java 中,包是類、介面或其它包的集合,包主要用來將類組織起來成為組,從而對類進行管理。

  2.2:包 能幹什麼

包對於下列工作非常有用:

(1):包允許您將包含類程式碼的檔案組織起來,易於查詢和使用適當的類。

(2):包不止是包含類和介面,還能夠包含其它包。形成層次的包空間。

(3):它有助於避免命名衝突。當您使用很多類時,確保類和方法名稱的唯一性是非常困難的。包能夠形成層次名稱空間,縮小了名稱衝突的範圍,易於管理名稱。

為便於管理數目眾多的類,Java 語言中引入了“包”的概念,可以說是對定義的 Java類進行“分組” ,將多個功能相關的類定義到一個“包”中,以解決命名衝突、引用不方便、安全性等問題。

就好似當今的戶籍制度,每個公民除有自己的名字“張三” 、 “李四”外還被規定了他的戶籍地。假定有兩個人都叫張三,只稱呼名字就無法區分他們,但如果事先登記他們的戶籍分別在北京和上海,就可以很容易的用“北京的張三” 、 “上海的張三”將他們區分開來。如果北京市仍有多個張三,還可以細分為“北京市.海淀區的張三” 、 “北京市.西城區.平安大街的張三”等等,直到能惟一標識每個“張三”為止。

JDK 中定義的類就採用了“包”機制進行層次式管理,下圖顯示了其組織結構的一部分:

從圖中可以看出,一個名為 java 的包中又包含了兩個子包:io 包和 lang 包。lang 包中包含了 System, String, Object 三個類的定義。事實上,Java 包中既可以包含類的定義,也可以包含子包,或同時包含兩者。

簡而言之: 從 邏輯 上 講 , 包 是一 組 相 關類 的集 合 ; 從 物 理 上 講 , 同 包即 同 目 錄。

  2.1:JDK 中常 用的 包

----包含一些 Java 語言的核心類,包含構成 Java 語言設計基礎的類。在此包中定義的最重要的一個類是“Object” ,代表類層次的根,Java 是一個單根系統,最終的根就是“Object” ,這個類會在後面講到。

Java 並不具有“自由”的方法,例如,不屬於任何類的方法,Java 中的所有方法必須始終屬於某個類。經常需要使用資料型別轉換方法。Java 在 包中定義了“包裝物件”類,使我們能夠實現資料型別轉換。如 Boolean、Character、Integer、Long、Float 和Double,這些在後面會講到。

此包中的其它類包括:

? Math——封裝最常用的數學方法,如正弦、餘弦和平方根。

? String,StringBuffer——封裝最常用的字串操作。

你不必顯示匯入該包,該 Java 包通常已經匯入。

----包含了構成抽象視窗工具集(abstract window toolkits)的多個類,這些類被用來構建和管理應用程式的圖形使用者介面(GUI)。

g----完全 Java 版的圖形使用者介面(GUI)解決方案,提供了很多完備的元件,可以應對複雜的桌面系統構建。

----包含執行與網路相關的操作的類,如 URL, Socket, ServerSocket 等。

----包含能提供多種輸入/輸出功能的類。

----包含一些實用工具類,如定義系統特性、使用與日期日曆相關的方法。還有重要的集合框架。

  2.2:Java 中 如何 表達 包 ——package 語 句

Java 語言使用 package 語句來實現包的定義。package 語句必須作為 Java 原始檔的第一條語句, 指明該檔案中定義的類所在的包。 若預設該語句, 則指定為無名包, 其語法格式為:

package pkg1[2[3…]]; //“[]”表示可選Java 編譯 器 把包對 應 於 文 件系 統 的目 錄管 理,因此包也可以巢狀使用,即一個包中可以含有類的定義也可以含有子包,其巢狀層數沒有限制。package 語句中,用‘.’來指明包的層次;

Java 語言要求包宣告的層次和實際儲存類的位元組碼檔案的目錄結構存在對應關係, 以便將來使用該類時能通過包名(也就是目錄名)查詢到所需要的類檔案。簡單地說就是包的層次結構需要和資料夾的層次對應。

注意:每 個源文 件 只 有一 個 包 的 聲 明, 而 且包 名 應 該 全部 小 寫 。

具體來說,程式設計師要做以下工作:

  2.3:編譯和 生 成 包

如果在程式 中已定義了包 p1,就必須將編譯生成的位元組碼檔案 s 儲存在與包名同名的子目錄中,可以選用下述兩種方式之一:

採用下述命令編譯:

javac

則編譯器會在當前目錄下生成 s 檔案, 再在適合位置手動建立一個名為 p1 的子目錄,將 s 複製到該 p1 目錄下。

採用簡化的編譯命令,就是可以帶包編譯

javac -d destpath

歸入該包的類的位元組程式碼檔案應放在 java 的類庫所在路徑的 destpath 子目錄下。 現在包的相對位置已經決定了,但 java 類庫的路徑還是不定的。事實上,java 可以有多個存放類庫的目錄,其中的預設路徑為 java 目錄下的 lib 子目錄,你可以通過使用-classpath 選項來確定你當前想選擇的類庫路徑。 除此之外, 你還可以在 CLASSPATH 環境變數中設定類庫路徑。 destpath 為目標路徑, 可以是本地的任何絕對或相對路徑。 則編譯器會自動在 destpath目錄下建立一個子目錄 p1,並將生成的s 檔案自動儲存到 destpath/p1 下。例如:

javac -d .

javac -d C:test

  2.4:帶包 執行

執行帶包的程式,需要使用類的全路徑,也就是帶包的路徑,比如上面的那個程式,就使用如下的程式碼進行執行:

java

  3:import

為了能夠使用某一個包的成員,我們需要在 Java 程式中明確匯入該包。使用“import”語句可完成此功能。在 java 原始檔中 import 語句應位於 package 語句之後,所有類的定義之前,可以有 0~多條,其語法格式為:

import package1[age2…].(classname|*);

java 執行時環境將到 CLASSPATH + package1.[package2…]路徑下尋找並載入相應的位元組碼檔案 s。 “*”號為萬用字元,代表所有的類。也就是說 import 語句為編譯器指明瞭尋找類的途徑。

例,使用 import 語句引入類程式:

java 編譯器預設為所有的 java 程式引入了 JDK 的 包中所有的類(import .*;) ,其中定義了一些常用類:System、String、Object、Math 等。因此我們可以直接使用這些類而不必顯式引入。但使用其它非無名包中的類則必須先引入、後使用。

  3.1:Java 類 搜尋方 式

程式中的 import 語句標明要引入 p1 包中的 Test 類, 假定環境變數 CLASSPATH 的值為

“.;C:jdk6lib;D:ex” , java 執行環境將依次到下述可能的位置尋找並載入該位元組碼

檔案 s:

.p1s

C:jdk6libp1s

D:exp1s

其中, “.”代表當前路徑,如果在第一個路徑下就找到了所需的類檔案,則停止搜尋。

否則依次搜尋後續路徑,如果在所有的路徑中都未找到所需的類檔案,則編譯或執行出錯。

  4: 訪問修飾 符

Java 語言允許對類中定義的各種屬性和方法進行訪問控制, 即規定不同的保護等級來限制對它們的使用。為什麼要這樣做?Java 語言引入類似訪問控制機制的 目的 在 於實 現 資訊的 封 裝 和 隱藏。 Java 語言為對類中的屬性和方法進行有效地訪問控制, 將它們分為四個等級:private, 無修飾符, protected, public,具體規則如下:

變數和方法可以處於四個訪問級別中的一個:公共,受保護,無修飾符或私有。類可以在公共或無修飾級別。

變數、方法或類有預設(無修飾符)訪問性,如果它沒有顯式受保護修飾符作為它的宣告的一部分的話。這種訪問性意味著,訪問可以來自任何方法,當然這些方法只能在作為物件的同一個包中的成員類當中。

以修飾符 protected 標記的變數或方法實際上比以預設訪問控制標記的更易訪問。 一個protected 方法或變數可以從同一個包中的類當中的任何方法進行訪問, 也可以是從任何子類中的任何方法進行訪問。 當它適合於一個類的子類但不是不相關的類時, 就可以使用這種受保護訪問來訪問成員。

  5: 類定義

Java 程式的基本單位是類,你建立類之後,就可用它來建立許多你需要的物件。Java把每一個可執行的成分都變成類。

類的定義形式如下:

這裡,類名要是合法的識別符號。在類定義的開始與結束處必須使用花括號。你也許想建立一個矩形類,那麼可以用如下程式碼:

  6:構 造方 法

  6.1:什麼是構造方法

類有一個特殊的成員方法叫作構造方法, 它的作用是建立物件並初始化成員變數。 在建立物件時,會自動呼叫類的構造方法。

  6.2:構 造方 法定義規則

Java 中的構造方法必須與該類具有相同的名字,並且沒有方法的返回型別(包括沒有void) 。另外,構造方法一般都應用 public 型別來說明,這樣才能在程式任意的位置建立類的例項--物件。

  6.3:示 例

下面是一個 Rectangle 類的構造方法,它帶有兩個引數,分別表示矩形的長和寬:

  6.4:說明

每個類至少有一個構造方法。 如果不寫一個構造方法, Java 程式語言將提供一個預設的,該構造方法沒有引數,而且方法體為空。

注意:如果一個類 中 已經 定義 了 構 造方 法則 系 統 不 再 提 供 預設 的 構 造方

  7:析構方法

析構方法 finalize 的功能是: 當物件被從記憶體中刪除時, 該成員方法將會被 自動呼叫。通常,在析構方法內,你可以填寫用來回收物件內部的動態空間的程式碼。

特別注意:當我們去呼叫析構方法的時候,並不會引起該物件例項從記憶體中刪除,而是不會起到任何作用。

在 Java 程式設計裡面,一般不需要我們去寫析構方法,這裡只是瞭解一下就可以了。

  8:屬性

  8.1:屬性是什麼

簡單點說,屬性就是物件所具有的靜態屬性。

  8.2:定義規則

Java 類中屬性的宣告採用如下格式:

訪問修飾符 修飾符 型別 屬性名稱=初始值;

訪問修飾符:可以使用四種不同的訪問修飾符中的一種,包括 public(公共的)、protected(受保護的) ,無修飾符和 private(私有的) 。public 訪問修飾符表示屬性可以從任何其它程式碼呼叫。private 表示屬性只可以由該類中的其它方法來呼叫。protected 將在以後的課程中討論。

修飾符:是對屬性特性的描述,例如後面會學習到的:static、final 等等。

型別:屬性的資料型別,可以是任意的型別。

屬性名稱:任何合法識別符號

初始值:賦值給屬性的初始值。如果不設定,那麼會自動進行初始化,基本型別使用預設值,物件型別自動初始化為 null。

  8.3:說明

屬性有時候也被稱為成員變數、例項變數、域,它們經常被互換使用。

  9:方 法

  9.1:方法是什麼

方法就是物件所具有的動態功能。

  9.2:定義規則

Java 類中方法的宣告採用以下格式:訪問修飾符 修飾符 返回值型別 方法名稱 (引數列表) throws 異常列表 {方法體}

訪問修飾符:可以使用四種不同的訪問修飾符中的一種,包括 public(公共的`)、protected(受保護的) ,無修飾符和 private(私有的) 。public 訪問修飾符表示方法可以從任何其它程式碼呼叫。private 表示方法只可以由該類中的其它方法來呼叫。protected 將在以後的課程中討論。

修飾符:是對方法特性的描述,例如後面會學習到的:static、final、abstract、synchronized 等等。

返回值型別::表示方法返回值的型別。 如果方法不返回任何值, 它必須宣告為 void(空)。

Java 技術對返回值是很嚴格的,例如,如果宣告某方法返回一個 int 值,那麼方法必須從所有可能的返回路徑中返回一個 int 值(只能在等待返回該 int 值的上下文中被呼叫。 )

方法名稱:可以是任何合法識別符號,並帶有用已經使用的名稱為基礎的某些限制條件。

引數列表:允許將引數值傳遞到方法中。列舉的元素由逗號分開,而每一個元素包含一個型別和一個識別符號。在下面的方法中只有一個形式引數,用 int 型別和識別符號 days 來宣告:public void test(int days){}

throws 異常列表:子句導致一個執行時錯誤(異常)被報告到呼叫的方法中,以便以合適的方式處理它。異常在後面的課程中介紹。

花括號內是方法體,即方法的具體語句序列。

  9.3:示例

比如現在有一個“車”的類——Car, “車”具有一些基本的屬性,比如四個輪子,一個方向盤,車的品牌等等。當然,車也具有自己的功能,也就是方法,比如車能夠“開動”——run。要想車子能夠開動,需要給車子新增汽油,也就是說,需要為 run 方法傳遞一些引數“油”進去。車子跑起來過後,我們需要知道當前車輛執行的速度,就需要 run 方法具有返回值“當前的速度” 。

  9.4:形參和實參

形參:就是形式引數的意思。是在定義方法名的時候使用的引數,用來標識方法接收的引數型別,在呼叫該方法時傳入。

實參:就是實際引數的意思。是在呼叫方法時傳遞給該方法的實際引數。

比如:上面的例子中“int oil”就是個形式引數,這裡只是表示需要加入汽油,這個方法才能正常執行,但具體加入多少,要到真正使用的時候,也就是呼叫這個方法的時候才具體確定,加入呼叫的時候傳入“80” ,這就是個實際引數。

形參和實參有如下基本規則:

(1):形參和實參的型別必須要一致,或者要符合隱含轉換規則

(2):形參型別不是引用型別時,在呼叫該方法時,是按值傳遞的。在該方法執行時,形參和實參是不同的變數,它們在記憶體中位於不同的位置,形參將實參的值複製一份,在該方法執行結束的時候形參被釋放,而實參內容不會改變。

(3):形參型別是引用型別時,在呼叫該方法時,是按引用傳遞的。執行時,傳給方法的是實參的地址, 在方法體內部使用的也是實參的地址, 即使用的就是實參本身對應的記憶體空間。所以在函式體內部可以改變實參的值。

  9.5:引數可變的方法

從 JDK5.0 開始,提供了引數可變的方法。

當不能確定一個方法的入口引數的個數時,5.0 以前版本的 Java 中,通常的做法是將多個引數放在一個數組或者物件集合中作為引數來傳遞,5.0 版本以前的寫法是:

int sum(Integer[] numbers){…}

//在別處呼叫該方法

sum(new Integer[] {12,13,20});

而在 5.0 版本中可以寫為:

int sum(Integer... numbers){//方法內的操作}

注意:方法定義中是三個點

//在別處呼叫該方法

sum(12,13,20);//正確

sum(10,11); //正確

也就是說,傳入引數的個數並不確定。但請注意:傳入引數的型別必須是一致的,究其本質,就是一個數組。

顯然,JDK5.0 版本的寫法更為簡易,也更為直觀,尤其是方法的呼叫語句,不僅簡化很多,而且更符合通常的思維方式,更易於理解。