java 類基礎(轉)
java 類基礎(轉)[@more@]類是Java 的核心和本質。它是Java 語言的基礎,因為類定義了物件的本性。既然類是物件導向程式設計Java 語言的基礎,因此,你想要在Java 程式中實現的每一個概念都必須封裝在類以內。
因為類是Java 的基礎,所以在本章和以後幾章中對其進行介紹。本章將介紹類的基本元素,並學習如何運用類來建立物件。同時也將學習方法、建構函式及this 這個關鍵字。
從本書的開始我們就使用類了。當然,使用的都是非常簡單的類。在前面幾章中創造的類主要都包含在main( ) 方法中,用它來表明Java 句法的基礎。你將看到,類的功能實質上比你到目前為止看到的要強大得多。
也許理解類的最重要的事情就是它定義了一種新的資料型別。一旦定義後,就可以用這種新型別來建立該型別的物件。這樣,類就是物件的模板(template ),而物件就是類的一個例項(instance)。既然一個物件就是一個類的例項,所以你經常看到object 和instance 這兩個詞可以互換使用。
6.1.1 類的通用格式
當你定義一個類時,你要宣告它準確的格式和屬性。你可以透過指定它包含的資料和運算元據的程式碼來定義類。儘管非常簡單的類可能只包含程式碼或者只包含資料,但絕大多數實際的類都包含上述兩者。你將看到,類的程式碼定義了該類資料的介面。
使用關鍵字class來建立類。在這一點上,類實際上被限制在它的完全格式中。類可以(並且常常)是一個組合體。類定義的通用格式如下所示:
class classname {
type instance-variable1;
type instance-variable2;
// ...
type instance-variableN;
type methodname1(parameter-list) {
// body of method
}
type methodname2(parameter-list) {
// body of method
}
// ...
type methodnameN(parameter-list) {
// body of method
}
}
在類中,資料或變數被稱為例項變數(instance variables ),程式碼包含在方法(methods)內。定義在類中的方法和例項變數被稱為類的成員(members )。在大多數類中,例項變數被定義在該類中的方法操作和存取。這樣,方法決定該類中的資料如何使用。
定義在類中的變數被稱為例項變數,這是因為類中的每個例項(也就是類的每個物件) 都包含它自己對這些變數的複製。這樣,一個物件的資料是獨立的且是惟一的。關於這一點我們將馬上討論,但是這是一個重要的概念,因此要早一點學習。
所有的方法和我們到目前為止用過的方法main() 的形式一樣。但是,以後講到的方法將不僅僅是被指定為static或public 。注意類的通用格式中並沒有指定main() 方法。Java 類不需要main( ) 方法。main() 方法只是在定義您程式的起點時用到。而且,Java 小應用程式也不要求main( ) 方法。
注意:如果你有C++程式設計經驗請注意,類的宣告和方法的實現要儲存在同一個地方並且不能被單獨定義。由於所有類的定義必須全部定義在一個單個的原始檔中,這有時會生成很大的.java 檔案。在Java 中設計這個特徵是因為從長遠來說,在一個地方指明,定義以及實現將使程式碼更易於維護。
6.1.2 一個簡單的類
讓我們先從一個簡單的例子來開始對類的研究。下面定義了一個名為box 的類,它定義了3個例項變數:width,height 和depth 。當前,box類不包含任何方法(但是隨後將增加一些)。
class Box { double width; double height; double depth;
}
前面已經說過,一個類定義一個新的資料型別。在本例中,新的資料型別名為Box。你可以使用這個名字來宣告Box 型別的物件。記住類宣告只是建立一個模板(或型別描述),它並不會建立一個實際的物件。因此,上述程式碼不會生成任何Box 型別的物件實體。
要真正建立一個Box 物件,你必須使用下面的語句:
Box mybox = new Box(); // create a Box object called mybox
這個語句執行後,mybox 就是Box的一個例項了。因此,它將具有“物理的”真實性。現在,先不必考慮這個語句的一些細節問題。
每次你建立類的一個例項時,你是在建立一個物件,該物件包含它自己的由類定義的每個例項變數的複製。因此,每個Box物件都將包含它自己的例項變數複製,這些變數即width,height,和 depth 。要訪問這些變數,你要使用點號“.”運算子。點號運算子(dot operator)將物件名和成員名連線起來。例如,要將mybox 的width 變數賦值為100,使用下面的語句:
mybox.width = 100;
該語句告訴編譯器對mybox 物件內包含的width 變數複製的值賦為100 。通常情況下,你可以使用點號運算子來訪問一個物件內的例項變數和方法。下面是使用Box 類的完整程式:
/* A program that uses the Box class.
Call this file BoxDemo.java
*/
class Box {
double width; double height; double depth;
}
// This class declares an object of type Box.
class BoxDemo {
public static void main(String args[]) {
Box mybox = new Box();
double vol;
// assign values to mybox's instance variables
mybox.width = 10;
mybox.height = 20;
mybox.depth = 15;
// compute volume of box
vol = mybox.width * mybox.height * mybox.depth;
System.out.println("Volume is " + vol);
}
}
你應該把包含該程式的的檔案命名為BoxDemo.java,因為main( ) 方法在名為 BoxDemo 的類中,而不是名為Box 的類中。當你編譯這個程式時,你會發現生成了兩個“.class ”檔案,一個屬於box,另一個屬於BoxDemo 。Java 編譯器自動將每個類儲存在它自己的“ .class ”檔案中。沒有必要分別將Box 類和Boxdemo 類放在同一個原始檔中。你可以分別將它們放在各自的檔案中,並分別命名為Box.Java 和 BoxDemo.java 。
要執行這個程式,你必須執行BoxDemo.class 。執行該程式後,你會看見如下輸出:
Volume is 3000.0
前面已經講過,每個物件都含有它自己的、由它的類定義的例項變數的複製。因此,假設你有兩個Box物件,每個物件都有其自己的depth,width 和height 複製。改變一個物件的例項變數對另外一個物件的例項變數沒有任何影響,理解這一點是很重要的。例如,下面的程式定義了兩個Box 物件:
// This program declares two Box objects.
class Box { double width; double height;
double depth;
}
class BoxDemo2 {
public static void main(String args[]) {
Box mybox1 = new Box();
Box mybox2 = new Box();
double vol;
// assign values to mybox1's instance variables
mybox1.width = 10;
mybox1.height = 20;
mybox1.depth = 15;
/* assign different values to mybox2's
instance variables */
mybox2.width = 3;
mybox2.height = 6;
mybox2.depth = 9;
// compute volume of first box
vol = mybox1.width * mybox1.height * mybox1.depth;
System.out.println("Volume is " + vol);
// compute volume of second box
vol = mybox2.width * mybox2.height * mybox2.depth;
System.out.println("Volume is " + vol);
}
}
該程式產生的輸出如下所示:
Volume is 3000.0
Volume is 162.0
你可以看到,mybox1 的資料與mybox2 的資料完全分離。
因為類是Java 的基礎,所以在本章和以後幾章中對其進行介紹。本章將介紹類的基本元素,並學習如何運用類來建立物件。同時也將學習方法、建構函式及this 這個關鍵字。
從本書的開始我們就使用類了。當然,使用的都是非常簡單的類。在前面幾章中創造的類主要都包含在main( ) 方法中,用它來表明Java 句法的基礎。你將看到,類的功能實質上比你到目前為止看到的要強大得多。
也許理解類的最重要的事情就是它定義了一種新的資料型別。一旦定義後,就可以用這種新型別來建立該型別的物件。這樣,類就是物件的模板(template ),而物件就是類的一個例項(instance)。既然一個物件就是一個類的例項,所以你經常看到object 和instance 這兩個詞可以互換使用。
6.1.1 類的通用格式
當你定義一個類時,你要宣告它準確的格式和屬性。你可以透過指定它包含的資料和運算元據的程式碼來定義類。儘管非常簡單的類可能只包含程式碼或者只包含資料,但絕大多數實際的類都包含上述兩者。你將看到,類的程式碼定義了該類資料的介面。
使用關鍵字class來建立類。在這一點上,類實際上被限制在它的完全格式中。類可以(並且常常)是一個組合體。類定義的通用格式如下所示:
class classname {
type instance-variable1;
type instance-variable2;
// ...
type instance-variableN;
type methodname1(parameter-list) {
// body of method
}
type methodname2(parameter-list) {
// body of method
}
// ...
type methodnameN(parameter-list) {
// body of method
}
}
在類中,資料或變數被稱為例項變數(instance variables ),程式碼包含在方法(methods)內。定義在類中的方法和例項變數被稱為類的成員(members )。在大多數類中,例項變數被定義在該類中的方法操作和存取。這樣,方法決定該類中的資料如何使用。
定義在類中的變數被稱為例項變數,這是因為類中的每個例項(也就是類的每個物件) 都包含它自己對這些變數的複製。這樣,一個物件的資料是獨立的且是惟一的。關於這一點我們將馬上討論,但是這是一個重要的概念,因此要早一點學習。
所有的方法和我們到目前為止用過的方法main() 的形式一樣。但是,以後講到的方法將不僅僅是被指定為static或public 。注意類的通用格式中並沒有指定main() 方法。Java 類不需要main( ) 方法。main() 方法只是在定義您程式的起點時用到。而且,Java 小應用程式也不要求main( ) 方法。
注意:如果你有C++程式設計經驗請注意,類的宣告和方法的實現要儲存在同一個地方並且不能被單獨定義。由於所有類的定義必須全部定義在一個單個的原始檔中,這有時會生成很大的.java 檔案。在Java 中設計這個特徵是因為從長遠來說,在一個地方指明,定義以及實現將使程式碼更易於維護。
6.1.2 一個簡單的類
讓我們先從一個簡單的例子來開始對類的研究。下面定義了一個名為box 的類,它定義了3個例項變數:width,height 和depth 。當前,box類不包含任何方法(但是隨後將增加一些)。
class Box { double width; double height; double depth;
}
前面已經說過,一個類定義一個新的資料型別。在本例中,新的資料型別名為Box。你可以使用這個名字來宣告Box 型別的物件。記住類宣告只是建立一個模板(或型別描述),它並不會建立一個實際的物件。因此,上述程式碼不會生成任何Box 型別的物件實體。
要真正建立一個Box 物件,你必須使用下面的語句:
Box mybox = new Box(); // create a Box object called mybox
這個語句執行後,mybox 就是Box的一個例項了。因此,它將具有“物理的”真實性。現在,先不必考慮這個語句的一些細節問題。
每次你建立類的一個例項時,你是在建立一個物件,該物件包含它自己的由類定義的每個例項變數的複製。因此,每個Box物件都將包含它自己的例項變數複製,這些變數即width,height,和 depth 。要訪問這些變數,你要使用點號“.”運算子。點號運算子(dot operator)將物件名和成員名連線起來。例如,要將mybox 的width 變數賦值為100,使用下面的語句:
mybox.width = 100;
該語句告訴編譯器對mybox 物件內包含的width 變數複製的值賦為100 。通常情況下,你可以使用點號運算子來訪問一個物件內的例項變數和方法。下面是使用Box 類的完整程式:
/* A program that uses the Box class.
Call this file BoxDemo.java
*/
class Box {
double width; double height; double depth;
}
// This class declares an object of type Box.
class BoxDemo {
public static void main(String args[]) {
Box mybox = new Box();
double vol;
// assign values to mybox's instance variables
mybox.width = 10;
mybox.height = 20;
mybox.depth = 15;
// compute volume of box
vol = mybox.width * mybox.height * mybox.depth;
System.out.println("Volume is " + vol);
}
}
你應該把包含該程式的的檔案命名為BoxDemo.java,因為main( ) 方法在名為 BoxDemo 的類中,而不是名為Box 的類中。當你編譯這個程式時,你會發現生成了兩個“.class ”檔案,一個屬於box,另一個屬於BoxDemo 。Java 編譯器自動將每個類儲存在它自己的“ .class ”檔案中。沒有必要分別將Box 類和Boxdemo 類放在同一個原始檔中。你可以分別將它們放在各自的檔案中,並分別命名為Box.Java 和 BoxDemo.java 。
要執行這個程式,你必須執行BoxDemo.class 。執行該程式後,你會看見如下輸出:
Volume is 3000.0
前面已經講過,每個物件都含有它自己的、由它的類定義的例項變數的複製。因此,假設你有兩個Box物件,每個物件都有其自己的depth,width 和height 複製。改變一個物件的例項變數對另外一個物件的例項變數沒有任何影響,理解這一點是很重要的。例如,下面的程式定義了兩個Box 物件:
// This program declares two Box objects.
class Box { double width; double height;
double depth;
}
class BoxDemo2 {
public static void main(String args[]) {
Box mybox1 = new Box();
Box mybox2 = new Box();
double vol;
// assign values to mybox1's instance variables
mybox1.width = 10;
mybox1.height = 20;
mybox1.depth = 15;
/* assign different values to mybox2's
instance variables */
mybox2.width = 3;
mybox2.height = 6;
mybox2.depth = 9;
// compute volume of first box
vol = mybox1.width * mybox1.height * mybox1.depth;
System.out.println("Volume is " + vol);
// compute volume of second box
vol = mybox2.width * mybox2.height * mybox2.depth;
System.out.println("Volume is " + vol);
}
}
該程式產生的輸出如下所示:
Volume is 3000.0
Volume is 162.0
你可以看到,mybox1 的資料與mybox2 的資料完全分離。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958068/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java基礎:類的深入研究(轉)Java
- Java基礎類庫【Java】Java
- Java基礎類庫Java
- JAVA基礎--Arrays類Java
- Java基礎--Java 內部類Java
- Java基礎-設計一個Java類所需的方法(轉)Java
- JAVA基礎:謹慎使用Date和Time類(轉)Java
- Java基礎| 類和物件Java物件
- Java基礎 - 類載入Java
- 【Java基礎】類和介面Java
- JAVA基礎:使用Properties類帶來的好處(轉)Java
- Java基礎 ---Throwable異常類Java
- Java基礎-抽象類和介面Java抽象
- java基礎介紹(轉)Java
- 整理Java基礎知識--Calendar 類Java
- Java 常用類總結(SE基礎)Java
- 理解Java中物件基礎Object類Java物件Object
- Java基礎-內部類詳解Java
- Java基礎篇—Java類載入機制Java
- 重拾java基礎之內部類Java
- Java基礎系列(七):物件與類(下)Java物件
- JAVA基礎之介面與內部類Java
- Java基礎類String學習分析Java
- java基礎的內部類定時Java
- JAVA基礎之三-介面和抽象類Java抽象
- java 繼承的基礎(轉)Java繼承
- Java基礎內部類4-內部類進階Java
- Java基礎10---包、內部類、匿名內部類Java
- Java基礎8:深入理解內部類Java
- 整理Java基礎知識--Number&Math類Java
- java基礎-複用類-複用方式(2)Java
- java基礎學習之類集框架(十)Java框架
- Java基礎——深入理解類的載入Java
- java基礎學習之一:物件和類Java物件
- java基礎:型別轉換castJava型別AST
- Java基礎7:關於Java類和包的那些事Java
- 類之基礎
- Java基礎之介面與抽象類及多型、內部類Java抽象多型