Java類的基本構(gòu)成
下面是關(guān)于Java類的基本構(gòu)成內(nèi)容,歡迎閱讀!
1:Java 類的定義形式
一個(gè)完整的 Java 類通常由下面六個(gè)部分組成:
包定義語句
import 語句
類定義{
成員變量
構(gòu)造方法
成員方法
}
其中:只有類定義和“{}”是不可或缺的,其余部分都可以根據(jù)需要來定義。
下面分別來學(xué)習(xí)各個(gè)部分的基本規(guī)則,看看如何寫 Java 的類。
2: 包
2.1:包 是什么
在 Java 中,包是類、接口或其它包的集合,包主要用來將類組織起來成為組,從而對(duì)類進(jìn)行管理。
2.2:包 能干什么
包對(duì)于下列工作非常有用:
(1):包允許您將包含類代碼的文件組織起來,易于查找和使用適當(dāng)?shù)念悺?/p>
(2):包不止是包含類和接口,還能夠包含其它包。形成層次的包空間。
(3):它有助于避免命名沖突。當(dāng)您使用很多類時(shí),確保類和方法名稱的唯一性是非常困難的。包能夠形成層次命名空間,縮小了名稱沖突的范圍,易于管理名稱。
為便于管理數(shù)目眾多的類,Java 語言中引入了“包”的概念,可以說是對(duì)定義的 Java類進(jìn)行“分組” ,將多個(gè)功能相關(guān)的類定義到一個(gè)“包”中,以解決命名沖突、引用不方便、安全性等問題。
就好似當(dāng)今的戶籍制度,每個(gè)公民除有自己的名字“張三” 、 “李四”外還被規(guī)定了他的戶籍地。假定有兩個(gè)人都叫張三,只稱呼名字就無法區(qū)分他們,但如果事先登記他們的戶籍分別在北京和上海,就可以很容易的用“北京的張三” 、 “上海的張三”將他們區(qū)分開來。如果北京市仍有多個(gè)張三,還可以細(xì)分為“北京市.海淀區(qū)的張三” 、 “北京市.西城區(qū).平安大街的張三”等等,直到能惟一標(biāo)識(shí)每個(gè)“張三”為止。
JDK 中定義的類就采用了“包”機(jī)制進(jìn)行層次式管理,下圖顯示了其組織結(jié)構(gòu)的一部分:
從圖中可以看出,一個(gè)名為 java 的包中又包含了兩個(gè)子包:io 包和 lang 包。lang 包中包含了 System, String, Object 三個(gè)類的定義。事實(shí)上,Java 包中既可以包含類的定義,也可以包含子包,或同時(shí)包含兩者。
簡(jiǎn)而言之: 從 邏輯 上 講 , 包 是一 組 相 關(guān)類 的集 合 ; 從 物 理 上 講 , 同 包即 同 目 錄。
2.1:JDK 中常 用的 包
java.lang----包含一些 Java 語言的核心類,包含構(gòu)成 Java 語言設(shè)計(jì)基礎(chǔ)的類。在此包中定義的最重要的一個(gè)類是“Object” ,代表類層次的根,Java 是一個(gè)單根系統(tǒng),最終的根就是“Object” ,這個(gè)類會(huì)在后面講到。
Java 并不具有“自由”的方法,例如,不屬于任何類的方法,Java 中的所有方法必須始終屬于某個(gè)類。經(jīng)常需要使用數(shù)據(jù)類型轉(zhuǎn)換方法。Java 在 Java.lang 包中定義了“包裝對(duì)象”類,使我們能夠?qū)崿F(xiàn)數(shù)據(jù)類型轉(zhuǎn)換。如 Boolean、Character、Integer、Long、Float 和Double,這些在后面會(huì)講到。
此包中的其它類包括:
? Math——封裝最常用的數(shù)學(xué)方法,如正弦、余弦和平方根。
? String,StringBuffer——封裝最常用的字符串操作。
你不必顯示導(dǎo)入該包,該 Java 包通常已經(jīng)導(dǎo)入。
java.awt----包含了構(gòu)成抽象窗口工具集(abstract window toolkits)的多個(gè)類,這些類被用來構(gòu)建和管理應(yīng)用程序的圖形用戶界面(GUI)。
javax.swing----完全 Java 版的圖形用戶界面(GUI)解決方案,提供了很多完備的組件,可以應(yīng)對(duì)復(fù)雜的桌面系統(tǒng)構(gòu)建。
java.net----包含執(zhí)行與網(wǎng)絡(luò)相關(guān)的操作的類,如 URL, Socket, ServerSocket 等。
java.io----包含能提供多種輸入/輸出功能的類。
java.util----包含一些實(shí)用工具類,如定義系統(tǒng)特性、使用與日期日歷相關(guān)的方法。還有重要的集合框架。
2.2:Java 中 如何 表達(dá) 包 ——package 語 句
Java 語言使用 package 語句來實(shí)現(xiàn)包的定義。package 語句必須作為 Java 源文件的第一條語句, 指明該文件中定義的類所在的包。 若缺省該語句, 則指定為無名包, 其語法格式為:
package pkg1[.pkg2[.pkg3…]]; //“[]”表示可選Java 編譯 器 把包對(duì) 應(yīng) 于 文 件系 統(tǒng) 的目 錄管 理,因此包也可以嵌套使用,即一個(gè)包中可以含有類的定義也可以含有子包,其嵌套層數(shù)沒有限制。package 語句中,用‘.’來指明包的層次;
Java 語言要求包聲明的層次和實(shí)際保存類的字節(jié)碼文件的目錄結(jié)構(gòu)存在對(duì)應(yīng)關(guān)系, 以便將來使用該類時(shí)能通過包名(也就是目錄名)查找到所需要的類文件。簡(jiǎn)單地說就是包的層次結(jié)構(gòu)需要和文件夾的層次對(duì)應(yīng)。
注意:每 個(gè)源文 件 只 有一 個(gè) 包 的 聲 明, 而 且包 名 應(yīng) 該 全部 小 寫 。
具體來說,程序員要做以下工作:
2.3:編譯和 生 成 包
如果在程序 Test.java 中已定義了包 p1,就必須將編譯生成的字節(jié)碼文件 Test.class 保存在與包名同名的子目錄中,可以選用下述兩種方式之一:
采用下述命令編譯:
javac Test.java
則編譯器會(huì)在當(dāng)前目錄下生成 Test.class 文件, 再在適合位置手動(dòng)創(chuàng)建一個(gè)名為 p1 的子目錄,將 Test.class 復(fù)制到該 p1 目錄下。
采用簡(jiǎn)化的編譯命令,就是可以帶包編譯
javac -d destpath Test.java
歸入該包的類的字節(jié)代碼文件應(yīng)放在 java 的類庫(kù)所在路徑的 destpath 子目錄下。 現(xiàn)在包的相對(duì)位置已經(jīng)決定了,但 java 類庫(kù)的路徑還是不定的。事實(shí)上,java 可以有多個(gè)存放類庫(kù)的目錄,其中的缺省路徑為 java 目錄下的 lib 子目錄,你可以通過使用-classpath 選項(xiàng)來確定你當(dāng)前想選擇的類庫(kù)路徑。 除此之外, 你還可以在 CLASSPATH 環(huán)境變量中設(shè)置類庫(kù)路徑。 destpath 為目標(biāo)路徑, 可以是本地的任何絕對(duì)或相對(duì)路徑。 則編譯器會(huì)自動(dòng)在 destpath目錄下建立一個(gè)子目錄 p1,并將生成的.class 文件自動(dòng)保存到 destpath/p1 下。例如:
javac -d . Test.java
javac -d C: est Test.java
2.4:帶包 運(yùn)行
運(yùn)行帶包的程序,需要使用類的全路徑,也就是帶包的路徑,比如上面的那個(gè)程序,就使用如下的代碼進(jìn)行運(yùn)行:
java p1.Test
3:import
為了能夠使用某一個(gè)包的成員,我們需要在 Java 程序中明確導(dǎo)入該包。使用“import”語句可完成此功能。在 java 源文件中 import 語句應(yīng)位于 package 語句之后,所有類的定義之前,可以有 0~多條,其語法格式為:
import package1[.package2…].(classname|*);
java 運(yùn)行時(shí)環(huán)境將到 CLASSPATH + package1.[package2…]路徑下尋找并載入相應(yīng)的字節(jié)碼文件 classname.class。 “*”號(hào)為通配符,代表所有的類。也就是說 import 語句為編譯器指明了尋找類的途徑。
例,使用 import 語句引入類程序:TestPackage.java
java 編譯器默認(rèn)為所有的 java 程序引入了 JDK 的 java.lang 包中所有的類(import java.lang.*;) ,其中定義了一些常用類:System、String、Object、Math 等。因此我們可以直接使用這些類而不必顯式引入。但使用其它非無名包中的類則必須先引入、后使用。
3.1:Java 類 搜尋方 式
程序中的 import 語句標(biāo)明要引入 p1 包中的 Test 類, 假定環(huán)境變量 CLASSPATH 的值為
“.;C:jdk6lib;D:ex” , java 運(yùn)行環(huán)境將依次到下述可能的位置尋找并載入該字節(jié)碼
文件 Test.class:
.p1Test.class
C:jdk6libp1Test.class
D:exp1Test.class
其中, “.”代表當(dāng)前路徑,如果在第一個(gè)路徑下就找到了所需的類文件,則停止搜索。
否則依次搜索后續(xù)路徑,如果在所有的路徑中都未找到所需的類文件,則編譯或運(yùn)行出錯(cuò)。
4: 訪問修飾 符
Java 語言允許對(duì)類中定義的各種屬性和方法進(jìn)行訪問控制, 即規(guī)定不同的保護(hù)等級(jí)來限制對(duì)它們的使用。為什么要這樣做?Java 語言引入類似訪問控制機(jī)制的 目的 在 于實(shí) 現(xiàn) 信息的 封 裝 和 隱藏。 Java 語言為對(duì)類中的屬性和方法進(jìn)行有效地訪問控制, 將它們分為四個(gè)等級(jí):private, 無修飾符, protected, public,具體規(guī)則如下:
變量和方法可以處于四個(gè)訪問級(jí)別中的一個(gè):公共,受保護(hù),無修飾符或私有。類可以在公共或無修飾級(jí)別。
變量、方法或類有缺省(無修飾符)訪問性,如果它沒有顯式受保護(hù)修飾符作為它的聲明的一部分的話。這種訪問性意味著,訪問可以來自任何方法,當(dāng)然這些方法只能在作為對(duì)象的同一個(gè)包中的成員類當(dāng)中。
以修飾符 protected 標(biāo)記的變量或方法實(shí)際上比以缺省訪問控制標(biāo)記的更易訪問。 一個(gè)protected 方法或變量可以從同一個(gè)包中的類當(dāng)中的任何方法進(jìn)行訪問, 也可以是從任何子類中的任何方法進(jìn)行訪問。 當(dāng)它適合于一個(gè)類的子類但不是不相關(guān)的類時(shí), 就可以使用這種受保護(hù)訪問來訪問成員。
5: 類定義
Java 程序的基本單位是類,你建立類之后,就可用它來建立許多你需要的對(duì)象。Java把每一個(gè)可執(zhí)行的成分都變成類。
類的定義形式如下:
這里,類名要是合法的標(biāo)識(shí)符。在類定義的開始與結(jié)束處必須使用花括號(hào)。你也許想建立一個(gè)矩形類,那么可以用如下代碼:
6、Java中區(qū)分大小寫。
類和接口名首字母必須大寫,采用駝峰命名法,每一個(gè)名單詞的首字母大寫,例如:MyFirstJavaProgram;
7、類名和源文件名必須一致。
例如下面的程序
public class FirstJava{
public static void main(String [] arg0){
System.out.println("My First Java File"); //輸出一句話:My First Java File
}
}
類名是FirstJava,那么你保存的源程序文件名為FirstJava.java。
8、方法名命名。
大小寫都行,一般來說都是第一個(gè)單詞小寫,后面的單詞還是采用駝峰命名法,例如:getValue(),setValue(int value);
9、成員變量名命名。
大小寫都行,一般都是第一個(gè)單詞小寫。如果是全局靜態(tài)變量或者常量全部單詞都要大寫,例如:public static int VALUE = 10;public static final int VALUE = 10;
10、方法參數(shù)命名。
方法參數(shù)大小寫都行,一般都是第一個(gè)單詞小寫;
11、入口方法。
所有Java程序的入口是public static void main(String [] arg0)方法,所以看程序一般都是從main方法看起;
12、注意分行。
Java程序中的分號(hào)";"表示你這句話說完了,一句話說完了就另起一行,不要想著節(jié)省紙張。
13、Java標(biāo)識(shí)符。
Java中所有的名字(類名、方法名、變量、常量)統(tǒng)稱為標(biāo)識(shí)符,關(guān)于標(biāo)識(shí)符有以下幾點(diǎn)需要注意:
標(biāo)識(shí)符是大小寫敏感的;
所有的標(biāo)識(shí)符都應(yīng)該以字母(A-Z或者a-z),美元符($)、或者下劃線(_)開始 ,首字符之后可以是任何字符的組合;
Java關(guān)鍵字不能用作標(biāo)識(shí)符 ;
例如:
合法標(biāo)識(shí)符舉例:age、$salary、_value、__1_value
非法標(biāo)識(shí)符舉例:123abc、-salary、#name、25name、class、&time、if
14、Java中的注釋。
注釋就是輔助說明你的程序,方便閱讀,注釋的部分會(huì)被Java編譯器忽略掉。注釋分為單行注釋("//"或者"/* ............*/")和多行注釋(/** .........*/),
/**
* 程序的入口方法。(這個(gè)是多行注釋)
*/
public static void main(String[] args) {
/* 打印一句話 (這是單行注釋) */
System.out.println();// 打印一句話(這是單行注釋)
}
15、Java中的空行。
空行會(huì)被編譯器忽略,用空行多是為了讓程序整潔易讀。
總結(jié):寫代碼重要的是整潔、易讀,讓自己和別人都看得懂很重要。這里可能有人會(huì)說我自己寫的代碼我還不知道,如果你這樣認(rèn)為那你肯定沒有寫過多少代碼。在工作中有的時(shí)候你是做很多項(xiàng)目,做完一個(gè)再做一個(gè)之后讓你回頭改第一個(gè)項(xiàng)目的bug這個(gè)時(shí)候如果你的代碼寫的不整潔也沒有添加注釋的話你有你受的,這也是給寫程序的人們一個(gè)建議。
16、算數(shù)運(yùn)算符
+在數(shù)字, 字符, 字符串相加時(shí)是不同的
/整數(shù)除法忽略小數(shù)部分
%模數(shù)的符號(hào)忽略不計(jì), 結(jié)果的正負(fù)只取決于被模數(shù)
++自增1, 如果寫在前面就是先運(yùn)算后取值, 如果寫在后面就是先取值后運(yùn)算
--自減1, 和++同理
17、賦值運(yùn)算符
賦值運(yùn)算符就是給運(yùn)算符左邊的變量賦值
= 給運(yùn)算符左邊的變量賦值
+= 也是給左邊的變量賦值, 例如: x += 5 類似于 x = x + 5
-=, *=, /=, %= 和+=原理相同
18、比較運(yùn)算符
比較運(yùn)算符就是比較運(yùn)算符兩邊的值, 得到一個(gè)布爾值
==, !=, >, <, >=, <=
19、邏輯運(yùn)算符
對(duì)布爾值進(jìn)行操作, 得到的結(jié)果也是布爾值
& 與(并且) AND 左右兩邊都為true, 結(jié)果才為true
| 或(或者) OR 左右兩邊有一邊為true, 結(jié)果就為true
&& 和 & 運(yùn)行結(jié)果相同, 具有短路效果、 如果前半為false, 那么后半不執(zhí)行
|| 和 | 運(yùn)行結(jié)果相同, 具有短路效果、 如果前半為true, 那么后半不執(zhí)行
^ 異或 XOR 兩邊不同就是true, 相同就是false
! 非 NOT 取反, 原來是true結(jié)果就是false, 原來是false結(jié)果就是true。
【Java類的基本構(gòu)成】相關(guān)文章:
Java類基本構(gòu)成05-11
Java類的基本構(gòu)成09-15
Java類的基本構(gòu)成09-11
java類的構(gòu)成08-02
計(jì)算機(jī)二級(jí)Java入門教程:Java類的基本構(gòu)成10-06
計(jì)算機(jī)二級(jí)入門教程:Java類的基本構(gòu)成06-19
java集合類基本簡(jiǎn)介10-26
java File類的基本使用方法09-15
C語言的基本構(gòu)成10-19