摘要:類最基本的作用,在于通過(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ì)象做某些特定的事情。
在對(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(空指針異常);
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)值填充。
在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
摘要:而面向?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...
摘要:本書概括以軟件系統(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)...
摘要:當(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é)果,那么我們稱其為純粹...
摘要:很多情況下,通常一個(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); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個(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); 馬上就要到七夕了,離年底老媽老爸...
閱讀 1264·2021-11-11 16:54
閱讀 904·2021-10-19 11:44
閱讀 1370·2021-09-22 15:18
閱讀 2479·2019-08-29 16:26
閱讀 2984·2019-08-29 13:57
閱讀 3128·2019-08-26 13:32
閱讀 1107·2019-08-26 11:58
閱讀 2368·2019-08-26 10:37