成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

《Java編程思想》讀書筆記-類與對(duì)象

NickZhou / 1585人閱讀

摘要:類最基本的作用,在于通過(guò)類獲取到相應(yīng)的對(duì)象,在向?qū)ο蟀l(fā)送消息時(shí)以期望對(duì)象做某些特定的事情。先導(dǎo)概念引用中一切皆對(duì)象,因此采用一個(gè)指向?qū)ο蟮囊脕?lái)操縱對(duì)象。對(duì)象可以存活于作用域之外。

歡迎各位讀者關(guān)注我的微信公眾號(hào),共同探討Java相關(guān)技術(shù)。生命不止,學(xué)習(xí)不休!

也許你慢慢地對(duì)程序有了這樣的認(rèn)識(shí):程序只是一些列帶有方法的對(duì)象的組合,這些方法以其它對(duì)象為參數(shù),可在任何地方返回,并發(fā)送消息給其他對(duì)象。這樣的認(rèn)識(shí),目前來(lái)說(shuō),是對(duì)的。
一覽焦點(diǎn)

Java中的類

新建的對(duì)象去了哪里

誰(shuí)來(lái)安置無(wú)家可歸的對(duì)象

總結(jié)

Java中的類
決定了對(duì)象的外觀與行為。Java中用class關(guān)鍵字來(lái)對(duì)類進(jìn)行定義。

在Java中,允許程序員定義一個(gè)新的數(shù)據(jù)類型來(lái)滿足其應(yīng)用的需求。其形式為class后跟上新類型的名稱。比如:

class NewTypeName {
    //class definition
}

通過(guò)以上代碼,你就定義了一個(gè)新的名為NewTypeName的數(shù)據(jù)類型。類型名稱可以由程序員自己定義,而class關(guān)鍵字是必須的、大小寫敏感的,一定不能寫錯(cuò)。但是單純地定義一個(gè)空類定義的類,是沒(méi)有任何意義的。

類最基本的作用,在于通過(guò)類獲取到相應(yīng)的對(duì)象,在向?qū)ο蟀l(fā)送消息時(shí),以期望對(duì)象做某些特定的事情。
類的內(nèi)部結(jié)構(gòu)

在對(duì)類進(jìn)行定義后,就可以在類中設(shè)置以下兩種類型的元素:字段和方法。

先導(dǎo)概念

引用:Java中一切皆對(duì)象,因此采用一個(gè)指向?qū)ο蟮?b>引用來(lái)操縱對(duì)象。

引用具有操作對(duì)象的能力

引用不一定需要有一個(gè)對(duì)象與之關(guān)聯(lián)

基本數(shù)據(jù)類型:Java中對(duì)于小而簡(jiǎn)單的變量,采用對(duì)象的形式表示會(huì)導(dǎo)致原本輕量的變量變得無(wú)比厚重且耗費(fèi)內(nèi)存空間。所以Java中定義了8種基本數(shù)據(jù)類型,其直接存儲(chǔ)值,并置于虛擬機(jī)棧中。每種基本數(shù)據(jù)類型所占存儲(chǔ)空間大小恒定不變。

所有數(shù)值類型都有正負(fù)號(hào)

boolean類型所占用的存儲(chǔ)空間的大小沒(méi)有明確指定,僅能取字面值true或false

基本數(shù)據(jù)類型都有其對(duì)應(yīng)的包裝類型

對(duì)于高精度的數(shù)字,需要用BigInteger(支持任何精度的整數(shù))或BigDecimal(支持任何精度的定點(diǎn)數(shù))來(lái)表示,二者沒(méi)有對(duì)應(yīng)的基本類型

基本數(shù)據(jù)類型如下表

基本類型 大小 包裝類型
boolean - Boolean
char 16bit Character
byte 8bit Byte
short 16bit Short
int 32bit Integer
long 64bit Long
float 32bit Float
double 64bit Double

字段

字段可以是基本數(shù)據(jù)類型中的一種,也可以是任何類型的對(duì)象,可以通過(guò)其引用與其所指向的對(duì)象。如果是對(duì)某個(gè)對(duì)象的引用,那么必須通過(guò)初始化使其與一個(gè)實(shí)際的對(duì)象關(guān)聯(lián)。

如何引用對(duì)象中的某個(gè)字段

對(duì)象名稱.字段名稱

示例

class NewTypeName {
    int i;
    int j;
    int k;

    public static void main(String [] args) {
        NewTypeName type = new NewTypeName();
        //此處type是對(duì)象的名稱,其是一個(gè)引用,i/j/k分別是NewTypeName這個(gè)類中的字段
        type.i = 1;
        type.j = 2;
        type.k = 3;
    }
}

基本成員默認(rèn)值

如果是基本數(shù)據(jù)類型并作為類的成員使用時(shí),即使沒(méi)有初始化,也會(huì)確保其有一個(gè)默認(rèn)值,默認(rèn)值如下表所示:

基本類型 默認(rèn)值
boolean false
char "u0000"(null)
byte 0
short 0
int 0
long 0l
float 0.0f
double 0.0d

如果是基本類型且作為方法的局部變量使用時(shí),獲取的默認(rèn)值可能為人一直

如果是引用類型,在沒(méi)有進(jìn)行初始化的情況下,默認(rèn)為null

方法

Java中方法用來(lái)表示用用來(lái)做某些事情的方式。方法的基本構(gòu)成部分包括:方法名稱、參數(shù)、返回值和方法體

一個(gè)方法的基本形式

ReturnType methodName(String arg1, Integer arg2) { /* Method Body */ }

構(gòu)件解析

返回類型:描述方法在調(diào)用之后返回的值

方法名稱:程序員自定義的方法的名稱

參數(shù)列表:描述了要從外部傳遞給方法體的參數(shù)的類型和名稱

方法體:描述一個(gè)方法實(shí)際要做的事情

方法名稱和參數(shù)列表合起來(lái)稱為“方法簽名”,其唯一確定地標(biāo)識(shí)出某個(gè)方法

在Java中,參數(shù)總是以值的形式進(jìn)行傳遞。如果是基本數(shù)據(jù)類型,則傳遞的是類型的真值;如果是引用類型,則傳遞的是引用的值。Java中不存在引用傳遞。
return關(guān)鍵字在Java的方法中表示返回,存在如下兩種情況:

如果返回類型不為void,則在return后要跟上與返回類型相兼容的值

如果返回類型為void,則return關(guān)鍵字的作用只是用來(lái)退出方法,不必在return后跟任何返回值

新建的對(duì)象去了哪里
在Java中,創(chuàng)建了一個(gè)引用變量后,最安全的方案就是為其綁定一個(gè)實(shí)際存在的對(duì)象,能有效防止惱人的NullPointerException(空指針異常);
對(duì)象來(lái)自哪里

Java中通過(guò)new操作符來(lái)實(shí)現(xiàn)對(duì)象的創(chuàng)建,其基本形式為:

new NewTypeName();

其中new關(guān)鍵字,表示向堆中申請(qǐng)內(nèi)存;NewTypeName表示一個(gè)數(shù)據(jù)類型,在申請(qǐng)到內(nèi)存空間后,會(huì)以這個(gè)數(shù)據(jù)類型為模板進(jìn)行對(duì)象的實(shí)例化;實(shí)例化完成后,會(huì)對(duì)對(duì)象中的字段進(jìn)行默認(rèn)值填充。

對(duì)象存儲(chǔ)到什么地方

在Java中有5個(gè)不同的地方可以進(jìn)行數(shù)據(jù)存儲(chǔ):

寄存器:位于處理器內(nèi)部,是最快的存儲(chǔ)區(qū),不能由程序進(jìn)行直接控制

虛擬機(jī)棧:位于隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)中,通過(guò)棧指針的移動(dòng)進(jìn)行內(nèi)存分配以及內(nèi)存回收,遵循上釋放下分配的原則;這一區(qū)域主要存放基本數(shù)據(jù)類型及數(shù)據(jù)引用

堆:位于RAM中,是一種通用的存儲(chǔ)池,對(duì)象存儲(chǔ)的地方。在此處,編譯器不需要知道存儲(chǔ)的數(shù)據(jù)在堆里的生命周期,而由垃圾回收期進(jìn)行管理

常量存儲(chǔ):常量值通常直接存放在程序代碼內(nèi)部

非RAM存儲(chǔ):可完全存活于程序外的數(shù)據(jù)。如流對(duì)象和持久化對(duì)象

誰(shuí)來(lái)安置無(wú)家可歸的對(duì)象
無(wú)家可歸的對(duì)象,意味著沒(méi)有引用指向該對(duì)象,該對(duì)象找不到它的歸屬。

在大多數(shù)語(yǔ)言中,都存在作用域的概念。作用域決定了在其內(nèi)部定義的變量名的可見(jiàn)性和生命周期。在Java中不允許嵌套的作用域中,較小的作用域擁有與較大的作用域相同的變量,如下代碼無(wú)法通過(guò)編譯:

//此處的代碼無(wú)法實(shí)際運(yùn)行,只做演示
{
    int x = 11;
    {
        int x = 12;
    }
}

Java中貫徹了一切都是對(duì)象的觀念。對(duì)象不具備和基本數(shù)據(jù)類型一樣的生命周期。對(duì)象可以存活于作用域之外

如以下代碼:

{
    String s = new String("Hello World");
}//運(yùn)行到這里,s已經(jīng)在作用域之外

在上述代碼中,在超過(guò)作用域之后,引用變量s的生命周期已經(jīng)結(jié)束,但"Hello World"這個(gè)String對(duì)象卻依舊存在。其生存于堆中,只是我們?cè)贈(zèng)]有引用變量來(lái)指向這個(gè)對(duì)象了,因此這個(gè)對(duì)象對(duì)于我們來(lái)說(shuō)是不可見(jiàn)的。

那么另外一個(gè)問(wèn)題是,Java是如何來(lái)保障這些沒(méi)有引用變量指向的對(duì)象不會(huì)把內(nèi)存塞爆的呢?Java采用了垃圾回收器,用來(lái)監(jiān)視所有用new關(guān)鍵字創(chuàng)建的對(duì)象,如果一個(gè)對(duì)象不再被引用,那么垃圾收集器便會(huì)在隨后的內(nèi)存回收活動(dòng)中銷毀該對(duì)象,并釋放其所占用的內(nèi)存。因此,Java程序員是不需要太在乎內(nèi)存的回收的。

總結(jié)

本文主要以Java的類為切入點(diǎn),描述了從類到對(duì)象的創(chuàng)建,然后到對(duì)象的存放和銷毀的整個(gè)流程。由于我們大多數(shù)的時(shí)間都是在創(chuàng)建新的類來(lái)滿足我們的業(yè)務(wù)需求,因此一個(gè)類的內(nèi)部結(jié)構(gòu)異常重要,好的結(jié)構(gòu)能最大化地提升程序運(yùn)行效率。這涉及到后面講解的設(shè)計(jì)模式,在此只對(duì)類的構(gòu)成作一個(gè)了解。

在下一節(jié)中,我們嘗試運(yùn)用目前已學(xué)習(xí)的內(nèi)容,來(lái)完成我們的第一個(gè)Java程序。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77432.html

相關(guān)文章

  • Java編程思想讀書筆記-對(duì)象導(dǎo)論

    摘要:而面向?qū)ο髣t是向程序員提供表示問(wèn)題空間中元素的工具,我們將問(wèn)題空間中的元素及其在解空間中的表示稱為對(duì)象。為什么要把對(duì)象看作是服務(wù)提供者呢這是將問(wèn)題分解為對(duì)象集合的一種合理方式。職能太多,可能會(huì)導(dǎo)致對(duì)象的內(nèi)聚性降低。在試圖將子類對(duì)象當(dāng)作其基類 計(jì)算機(jī)是頭腦延伸的工具,是一種不同類型的表達(dá)媒體。本文以背景性的和補(bǔ)充性的材料,介紹包括開(kāi)發(fā)方法概述在內(nèi)的面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-orie...

    NickZhou 評(píng)論0 收藏0
  • Java應(yīng)用架構(gòu)設(shè)計(jì):模塊化模式與OSGi》讀書筆記

    摘要:本書概括以軟件系統(tǒng)為例,重點(diǎn)講解了應(yīng)用架構(gòu)中的物理設(shè)計(jì)問(wèn)題,即如何將軟件系統(tǒng)拆分為模塊化系統(tǒng)。容器獨(dú)立模塊不依賴于具體容器,采用輕量級(jí)容器,如獨(dú)立部署模塊可獨(dú)立部署可用性模式發(fā)布接口暴露外部配置使用獨(dú)立的配置文件用于不同的上下文。 本文為讀書筆記,對(duì)書中內(nèi)容進(jìn)行重點(diǎn)概括,并將書中的模塊化結(jié)合微服務(wù)、Java9 Jigsaw談?wù)劺斫狻?本書概括 以Java軟件系統(tǒng)為例,重點(diǎn)講解了應(yīng)用架構(gòu)...

    seanHai 評(píng)論0 收藏0
  • java 8 實(shí)戰(zhàn)》讀書筆記 -第十三章 函數(shù)式的思考

    摘要:當(dāng)我們希望能界定這二者之間的區(qū)別時(shí),我們將第一種稱為純粹的函數(shù)式編程,后者稱為函數(shù)式編程。函數(shù)式編程我們的準(zhǔn)則是,被稱為函數(shù)式的函數(shù)或方法都只能修改本地變量。另一種觀點(diǎn)支持引用透明的函數(shù)式編程,認(rèn)為方法不應(yīng)該有對(duì)外部可見(jiàn)的對(duì)象修改。 一、實(shí)現(xiàn)和維護(hù)系統(tǒng) 1.共享的可變數(shù)據(jù) 如果一個(gè)方法既不修改它內(nèi)嵌類的狀態(tài),也不修改其他對(duì)象的狀態(tài),使用return返回所有的計(jì)算結(jié)果,那么我們稱其為純粹...

    Donne 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評(píng)論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你的“對(duì)象”還好嗎?

    摘要:很多情況下,通常一個(gè)人類,即創(chuàng)建了一個(gè)具體的對(duì)象。對(duì)象就是數(shù)據(jù),對(duì)象本身不包含方法。類是相似對(duì)象的描述,稱為類的定義,是該類對(duì)象的藍(lán)圖或原型。在中,對(duì)象通過(guò)對(duì)類的實(shí)體化形成的對(duì)象。一類的對(duì)象抽取出來(lái)。注意中,對(duì)象一定是通過(guò)類的實(shí)例化來(lái)的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<