溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java 類基礎(chǔ)(轉(zhuǎn))

發(fā)布時(shí)間:2020-08-11 20:38:13 來源:ITPUB博客 閱讀:111 作者:ba 欄目:編程語言
java 類基礎(chǔ)(轉(zhuǎn))[@more@]類是Java 的核心和本質(zhì)。它是Java 語言的基礎(chǔ),因?yàn)轭惗x了對象的本性。既然類是面向?qū)ο蟪绦蛟O(shè)計(jì)Java 語言的基礎(chǔ),因此,你想要在Java 程序中實(shí)現(xiàn)的每一個(gè)概念都必須封裝在類以內(nèi)。

因?yàn)轭愂荍ava 的基礎(chǔ),所以在本章和以后幾章中對其進(jìn)行介紹。本章將介紹類的基本元素,并學(xué)習(xí)如何運(yùn)用類來創(chuàng)建對象。同時(shí)也將學(xué)習(xí)方法、構(gòu)造函數(shù)及this 這個(gè)關(guān)鍵字。
從本書的開始我們就使用類了。當(dāng)然,使用的都是非常簡單的類。在前面幾章中創(chuàng)造的類主要都包含在main( ) 方法中,用它來表明Java 句法的基礎(chǔ)。你將看到,類的功能實(shí)質(zhì)上比你到目前為止看到的要強(qiáng)大得多。

也許理解類的最重要的事情就是它定義了一種新的數(shù)據(jù)類型。一旦定義后,就可以用這種新類型來創(chuàng)建該類型的對象。這樣,類就是對象的模板(template ),而對象就是類的一個(gè)實(shí)例(instance)。既然一個(gè)對象就是一個(gè)類的實(shí)例,所以你經(jīng)常看到object 和instance 這兩個(gè)詞可以互換使用。

6.1.1 類的通用格式
當(dāng)你定義一個(gè)類時(shí),你要聲明它準(zhǔn)確的格式和屬性。你可以通過指定它包含的數(shù)據(jù)和操作數(shù)據(jù)的代碼來定義類。盡管非常簡單的類可能只包含代碼或者只包含數(shù)據(jù),但絕大多數(shù)實(shí)際的類都包含上述兩者。你將看到,類的代碼定義了該類數(shù)據(jù)的接口。

使用關(guān)鍵字class來創(chuàng)建類。在這一點(diǎn)上,類實(shí)際上被限制在它的完全格式中。類可以(并且常常)是一個(gè)組合體。類定義的通用格式如下所示:

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
}
}

在類中,數(shù)據(jù)或變量被稱為實(shí)例變量(instance variables ),代碼包含在方法(methods)內(nèi)。定義在類中的方法和實(shí)例變量被稱為類的成員(members )。在大多數(shù)類中,實(shí)例變量被定義在該類中的方法操作和存取。這樣,方法決定該類中的數(shù)據(jù)如何使用。

定義在類中的變量被稱為實(shí)例變量,這是因?yàn)轭愔械拿總€(gè)實(shí)例(也就是類的每個(gè)對象) 都包含它自己對這些變量的拷貝。這樣,一個(gè)對象的數(shù)據(jù)是獨(dú)立的且是惟一的。關(guān)于這一點(diǎn)我們將馬上討論,但是這是一個(gè)重要的概念,因此要早一點(diǎn)學(xué)習(xí)。

所有的方法和我們到目前為止用過的方法main() 的形式一樣。但是,以后講到的方法將不僅僅是被指定為static或public 。注意類的通用格式中并沒有指定main() 方法。Java 類不需要main( ) 方法。main() 方法只是在定義您程序的起點(diǎn)時(shí)用到。而且,Java 小應(yīng)用程序也不要求main( ) 方法。

注意:如果你有C++編程經(jīng)驗(yàn)請注意,類的聲明和方法的實(shí)現(xiàn)要存儲(chǔ)在同一個(gè)地方并且不能被單獨(dú)定義。由于所有類的定義必須全部定義在一個(gè)單個(gè)的源文件中,這有時(shí)會(huì)生成很大的.java 文件。在Java 中設(shè)計(jì)這個(gè)特征是因?yàn)閺拈L遠(yuǎn)來說,在一個(gè)地方指明,定義以及實(shí)現(xiàn)將使代碼更易于維護(hù)。

6.1.2 一個(gè)簡單的類
讓我們先從一個(gè)簡單的例子來開始對類的研究。下面定義了一個(gè)名為box 的類,它定義了3個(gè)實(shí)例變量:width,height 和depth 。當(dāng)前,box類不包含任何方法(但是隨后將增加一些)。

class Box { double width; double height; double depth;

}

前面已經(jīng)說過,一個(gè)類定義一個(gè)新的數(shù)據(jù)類型。在本例中,新的數(shù)據(jù)類型名為Box。你可以使用這個(gè)名字來聲明Box 類型的對象。記住類聲明只是創(chuàng)建一個(gè)模板(或類型描述),它并不會(huì)創(chuàng)建一個(gè)實(shí)際的對象。因此,上述代碼不會(huì)生成任何Box 類型的對象實(shí)體。

要真正創(chuàng)建一個(gè)Box 對象,你必須使用下面的語句:

Box mybox = new Box(); // create a Box object called mybox

這個(gè)語句執(zhí)行后,mybox 就是Box的一個(gè)實(shí)例了。因此,它將具有“物理的”真實(shí)性。現(xiàn)在,先不必考慮這個(gè)語句的一些細(xì)節(jié)問題。

每次你創(chuàng)建類的一個(gè)實(shí)例時(shí),你是在創(chuàng)建一個(gè)對象,該對象包含它自己的由類定義的每個(gè)實(shí)例變量的拷貝。因此,每個(gè)Box對象都將包含它自己的實(shí)例變量拷貝,這些變量即width,height,和 depth 。要訪問這些變量,你要使用點(diǎn)號“.”運(yùn)算符。點(diǎn)號運(yùn)算符(dot operator)將對象名和成員名連接起來。例如,要將mybox 的width 變量賦值為100,使用下面的語句:

mybox.width = 100;
該語句告訴編譯器對mybox 對象內(nèi)包含的width 變量拷貝的值賦為100 。通常情況下,你可以使用點(diǎn)號運(yùn)算符來訪問一個(gè)對象內(nèi)的實(shí)例變量和方法。下面是使用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);
}
}

你應(yīng)該把包含該程序的的文件命名為BoxDemo.java,因?yàn)閙ain( ) 方法在名為 BoxDemo 的類中,而不是名為Box 的類中。當(dāng)你編譯這個(gè)程序時(shí),你會(huì)發(fā)現(xiàn)生成了兩個(gè)“.class ”文件,一個(gè)屬于box,另一個(gè)屬于BoxDemo 。Java 編譯器自動(dòng)將每個(gè)類保存在它自己的“ .class ”文件中。沒有必要分別將Box 類和Boxdemo 類放在同一個(gè)源文件中。你可以分別將它們放在各自的文件中,并分別命名為Box.Java 和 BoxDemo.java 。

要運(yùn)行這個(gè)程序,你必須執(zhí)行BoxDemo.class 。運(yùn)行該程序后,你會(huì)看見如下輸出:

Volume is 3000.0

前面已經(jīng)講過,每個(gè)對象都含有它自己的、由它的類定義的實(shí)例變量的拷貝。因此,假設(shè)你有兩個(gè)Box對象,每個(gè)對象都有其自己的depth,width 和height 拷貝。改變一個(gè)對象的實(shí)例變量對另外一個(gè)對象的實(shí)例變量沒有任何影響,理解這一點(diǎn)是很重要的。例如,下面的程序定義了兩個(gè)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);

}
}

該程序產(chǎn)生的輸出如下所示:

Volume is 3000.0
Volume is 162.0

你可以看到,mybox1 的數(shù)據(jù)與mybox2 的數(shù)據(jù)完全分離。
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI