最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

java 核心技術(shù)-12版 卷Ⅰ- 4.2.1 對(duì)象與對(duì)象變量

2023-02-17 21:02 作者:CC挑燈夜讀_谷  | 我要投稿

????要想使用對(duì)象,首先必須構(gòu)造對(duì)象,并指定其初始狀態(tài)。然后對(duì)對(duì)象應(yīng)用方法。

????在Java設(shè)計(jì)語言中,要使用構(gòu)造器(constructor或稱構(gòu)造函數(shù))構(gòu)造新實(shí)例。構(gòu)造器是一種特殊的方法,其作用是構(gòu)造并初始化對(duì)象。下面來看一個(gè)例子。標(biāo)準(zhǔn)Java庫中包含一個(gè)Date類。它的對(duì)象可以描述一個(gè)時(shí)間點(diǎn),例如“Decemeber 31,1999,23:59:59 GMT”。

????注釋:你可能會(huì)感到奇怪:為什么用類表示日期,而不是像其他語言中那樣用一個(gè)內(nèi)置(built-in)類型來表示?例如,Visual Basic中有一個(gè)內(nèi)置的date 類型,程序員可以采用#12/31/1999#格式指定日期??雌饋磉@似乎很方便,程序員只需要使用內(nèi)置的date類型,而不用考慮類。但實(shí)際上,Visual Basic這樣設(shè)計(jì)合適嗎?在有些地區(qū),日期表示為月/日/年 ,而另外一些地區(qū)則表示為 日/月/年。語言設(shè)計(jì)者是否能夠遇見這些問題呢?如果沒有處理好這類問題,語言就有可能陷入混亂,對(duì)此感到不滿的程序員也會(huì)喪失使用這種語言的熱情。如果使用類,這些設(shè)計(jì)任務(wù)就交給了類庫的設(shè)計(jì)者。如果類設(shè)計(jì)得不完善,那么其他程序員可以很容易地編寫自己的類,改進(jìn)或替換(replace)這些系統(tǒng)類(作為印證:Java的日期類庫開始時(shí)有些混亂,現(xiàn)在已經(jīng)重新設(shè)計(jì)了兩次)。


????構(gòu)造器總是與類同名。因此,Date類的構(gòu)造器就名為Date。要想構(gòu)造一個(gè)Date對(duì)象,需要在構(gòu)造器前面加上new操作符,如下所示:

new Date();

????這個(gè)表達(dá)式會(huì)構(gòu)造一個(gè)新對(duì)象。這個(gè)對(duì)象初始化為當(dāng)前的日期和時(shí)間。

????如果需要的話,可以將這個(gè)對(duì)象傳遞給一個(gè)方法:

System.out.println(new Date());

????或者,可以對(duì)剛構(gòu)造的對(duì)象應(yīng)用一個(gè)方法。Date類中有一個(gè)toString方法。這個(gè)方法將生成日期的一個(gè)字符串描述??梢匀缦聦?duì)新構(gòu)造的Date對(duì)象應(yīng)用toString方法:

String s = new Date().toString();

????在這個(gè)例子中,構(gòu)造的對(duì)象僅使用了一次。通常,你可以希望保留所構(gòu)造的對(duì)象從而能繼續(xù)使用,為此,需要將對(duì)象放在一個(gè)變量中:

????Date now = new Date();

圖4-3顯示了對(duì)象變量 now,它引用了新構(gòu)造的對(duì)象。

4-3

????對(duì)象與對(duì)象變量之間存在著一個(gè)重要的區(qū)別。例如,以下語句

Date startTime;// startTime doesn't refer to any Object

????定義了一個(gè)對(duì)象變量 startTime,它可以引用Date類型的對(duì)象。但是,一定要認(rèn)識(shí)到:變量startTime不是一個(gè)對(duì)象,而且實(shí)際上它甚至還沒有引用任何對(duì)象。此時(shí)不能在這個(gè)變量上使用任何Date方法。下面的語句:

????s= startTime.toString();//not yet

????將產(chǎn)生編譯錯(cuò)誤。

????必須首先初始化starTime變量,這里有兩個(gè)選擇。當(dāng)然,可以初始化這個(gè)變量,讓它引用一個(gè)新構(gòu)造的對(duì)象:

????startTime= new Date();

????也可以設(shè)置這個(gè)變量,讓它引用一個(gè)已有的對(duì)象:

startTime =now;

現(xiàn)在,這兩個(gè)變量都引用同一個(gè)對(duì)象(如同4.4)

4-4

????要認(rèn)識(shí)到重要的一點(diǎn):對(duì)象變量并不實(shí)際包含一個(gè)對(duì)象,它只是引用一個(gè)對(duì)象。

????在Java中,任何對(duì)象變量的值都是一個(gè)引用,指向存儲(chǔ)在另外一個(gè)地方的某個(gè)對(duì)象,new 操作符的返回值也是一個(gè)引用。下面的語句:

????Date startTime = new Date();

????有兩個(gè)部分,表達(dá)式new Date() 構(gòu)造了一個(gè)Date 類型的對(duì)象,它的值是新創(chuàng)建對(duì)象的一個(gè)引用。再將這個(gè)引用存儲(chǔ)在 startTime變量中。

????可以顯式將對(duì)象變量設(shè)置為null,指示這個(gè)對(duì)象變量目前沒有引用任何對(duì)象。

?????startTime = null;

...

if(startTime != null)

????System.out.println(startTime);

????我們將在4.3.6節(jié)更相信地討論null。

C++注釋: 很多人錯(cuò)誤地認(rèn)為Java中的對(duì)象變量就相當(dāng)于C++中的引用。然而,C++中沒有null引用,而且引用不能賦值。應(yīng)當(dāng)把Java中的對(duì)象變量看做類似于C++的對(duì)象指針。例如,Date now;// java

實(shí)際上等同于

Date* now;// C++

一旦建立了這種關(guān)聯(lián),一切就清楚了。當(dāng)然,只有使用了new 調(diào)用后 Date* 指針才會(huì)初始化。就這一點(diǎn)而言,C++與Java的語法幾乎是一樣的。

????Date* now = new Date();// C++

????如果把一個(gè)變量復(fù)制到另一個(gè)變量,兩個(gè)變量就指向同一個(gè)日期,即它們是同一個(gè)對(duì)象的指針。Java中的 null 引用對(duì)應(yīng)于C++的NULL指針。

????所有的Java對(duì)象都存儲(chǔ)在堆中。當(dāng)一個(gè)對(duì)象包含另一個(gè)對(duì)象變量時(shí),它只是包含另一個(gè)堆對(duì)象的指針。

????在C++中,指針十分令人頭疼,因?yàn)樗鼈兒苋菀壮鲥e(cuò)。稍不小心就會(huì)創(chuàng)建一個(gè)錯(cuò)誤的指針,或者使內(nèi)存管理出現(xiàn)問題。在Java語言中,這些問題都不復(fù)存在。如果使用一個(gè)沒有初始化的指針,那么運(yùn)行時(shí)系統(tǒng)將會(huì)產(chǎn)生一個(gè)運(yùn)行時(shí)錯(cuò)誤,而不是生成隨機(jī)的結(jié)果。另外,你不必?fù)?dān)心內(nèi)存管理問題,垃圾回收期會(huì)處理相關(guān)的事宜。

????C++確實(shí)做了很大的努力,它通過支持復(fù)制構(gòu)造器和賦值運(yùn)算符來實(shí)現(xiàn)對(duì)象的自動(dòng)復(fù)制。例如,一個(gè)鏈表(linked list)的副本是一個(gè)新鏈表,其內(nèi)容與原始鏈表相同,但是有一組獨(dú)立的鏈接。這樣一來就可以適當(dāng)?shù)卦O(shè)計(jì)類,使它們與內(nèi)置類型有相同的復(fù)制行為。在Java中,必須使用clone 方法獲得一個(gè)對(duì)象的完整副本。


思考問題:

????Date now = new Date();

如何通過 now 獲取今天的最早的時(shí)刻(0點(diǎn)0份0秒),以及今天的最后

如何獲取明天,下月1號(hào),以及今年的年初和年尾

java 核心技術(shù)-12版 卷Ⅰ- 4.2.1 對(duì)象與對(duì)象變量的評(píng)論 (共 條)

使用qq登录你需要登录后才可以评论。
清原| 基隆市| 福贡县| 嘉禾县| 久治县| 汾阳市| 海丰县| 司法| 怀集县| 正定县| 贵南县| 奉贤区| 来凤县| 永年县| 南充市| 泾川县| 应城市| 宁乡县| 晴隆县| 工布江达县| 罗平县| 安康市| 高邮市| 彩票| 义乌市| 犍为县| 历史| 磐石市| 澄迈县| 包头市| 大田县| 潮州市| 盘山县| 古交市| 安泽县| 五台县| 满洲里市| 东台市| 富宁县| 渝中区| 廉江市|