摘要:類最基本的作用,在于通過類獲取到相應的對象,在向對象發送消息時以期望對象做某些特定的事情。先導概念引用中一切皆對象,因此采用一個指向對象的引用來操縱對象。對象可以存活于作用域之外。
歡迎各位讀者關注我的微信公眾號,共同探討Java相關技術。生命不止,學習不休!
也許你慢慢地對程序有了這樣的認識:程序只是一些列帶有方法的對象的組合,這些方法以其它對象為參數,可在任何地方返回,并發送消息給其他對象。這樣的認識,目前來說,是對的。一覽焦點
Java中的類
新建的對象去了哪里
誰來安置無家可歸的對象
總結
Java中的類決定了對象的外觀與行為。Java中用class關鍵字來對類進行定義。
在Java中,允許程序員定義一個新的數據類型來滿足其應用的需求。其形式為class后跟上新類型的名稱。比如:
class NewTypeName { //class definition }
通過以上代碼,你就定義了一個新的名為NewTypeName的數據類型。類型名稱可以由程序員自己定義,而class關鍵字是必須的、大小寫敏感的,一定不能寫錯。但是單純地定義一個空類定義的類,是沒有任何意義的。
類最基本的作用,在于通過類獲取到相應的對象,在向對象發送消息時,以期望對象做某些特定的事情。
在對類進行定義后,就可以在類中設置以下兩種類型的元素:字段和方法。
先導概念
引用:Java中一切皆對象,因此采用一個指向對象的引用來操縱對象。
引用具有操作對象的能力
引用不一定需要有一個對象與之關聯
基本數據類型:Java中對于小而簡單的變量,采用對象的形式表示會導致原本輕量的變量變得無比厚重且耗費內存空間。所以Java中定義了8種基本數據類型,其直接存儲值,并置于虛擬機棧中。每種基本數據類型所占存儲空間大小恒定不變。
所有數值類型都有正負號
boolean類型所占用的存儲空間的大小沒有明確指定,僅能取字面值true或false
基本數據類型都有其對應的包裝類型
對于高精度的數字,需要用BigInteger(支持任何精度的整數)或BigDecimal(支持任何精度的定點數)來表示,二者沒有對應的基本類型
基本數據類型如下表
基本類型 | 大小 | 包裝類型 |
---|---|---|
boolean | - | Boolean |
char | 16bit | Character |
byte | 8bit | Byte |
short | 16bit | Short |
int | 32bit | Integer |
long | 64bit | Long |
float | 32bit | Float |
double | 64bit | Double |
字段
字段可以是基本數據類型中的一種,也可以是任何類型的對象,可以通過其引用與其所指向的對象。如果是對某個對象的引用,那么必須通過初始化使其與一個實際的對象關聯。
如何引用對象中的某個字段
對象名稱.字段名稱
示例
class NewTypeName { int i; int j; int k; public static void main(String [] args) { NewTypeName type = new NewTypeName(); //此處type是對象的名稱,其是一個引用,i/j/k分別是NewTypeName這個類中的字段 type.i = 1; type.j = 2; type.k = 3; } }
基本成員默認值
如果是基本數據類型并作為類的成員使用時,即使沒有初始化,也會確保其有一個默認值,默認值如下表所示:
基本類型 | 默認值 |
---|---|
boolean | false |
char | "u0000"(null) |
byte | 0 |
short | 0 |
int | 0 |
long | 0l |
float | 0.0f |
double | 0.0d |
如果是基本類型且作為方法的局部變量使用時,獲取的默認值可能為人一直
如果是引用類型,在沒有進行初始化的情況下,默認為null
方法
Java中方法用來表示用用來做某些事情的方式。方法的基本構成部分包括:方法名稱、參數、返回值和方法體
一個方法的基本形式
ReturnType methodName(String arg1, Integer arg2) { /* Method Body */ }
構件解析
返回類型:描述方法在調用之后返回的值
方法名稱:程序員自定義的方法的名稱
參數列表:描述了要從外部傳遞給方法體的參數的類型和名稱
方法體:描述一個方法實際要做的事情
方法名稱和參數列表合起來稱為“方法簽名”,其唯一確定地標識出某個方法
在Java中,參數總是以值的形式進行傳遞。如果是基本數據類型,則傳遞的是類型的真值;如果是引用類型,則傳遞的是引用的值。Java中不存在引用傳遞。
return關鍵字在Java的方法中表示返回,存在如下兩種情況:
如果返回類型不為void,則在return后要跟上與返回類型相兼容的值
如果返回類型為void,則return關鍵字的作用只是用來退出方法,不必在return后跟任何返回值
新建的對象去了哪里在Java中,創建了一個引用變量后,最安全的方案就是為其綁定一個實際存在的對象,能有效防止惱人的NullPointerException(空指針異常);
Java中通過new操作符來實現對象的創建,其基本形式為:
new NewTypeName();
其中new關鍵字,表示向堆中申請內存;NewTypeName表示一個數據類型,在申請到內存空間后,會以這個數據類型為模板進行對象的實例化;實例化完成后,會對對象中的字段進行默認值填充。
在Java中有5個不同的地方可以進行數據存儲:
寄存器:位于處理器內部,是最快的存儲區,不能由程序進行直接控制
虛擬機棧:位于隨機訪問存儲器(RAM)中,通過棧指針的移動進行內存分配以及內存回收,遵循上釋放下分配的原則;這一區域主要存放基本數據類型及數據引用
堆:位于RAM中,是一種通用的存儲池,對象存儲的地方。在此處,編譯器不需要知道存儲的數據在堆里的生命周期,而由垃圾回收期進行管理
常量存儲:常量值通常直接存放在程序代碼內部
非RAM存儲:可完全存活于程序外的數據。如流對象和持久化對象
誰來安置無家可歸的對象無家可歸的對象,意味著沒有引用指向該對象,該對象找不到它的歸屬。
在大多數語言中,都存在作用域的概念。作用域決定了在其內部定義的變量名的可見性和生命周期。在Java中不允許嵌套的作用域中,較小的作用域擁有與較大的作用域相同的變量,如下代碼無法通過編譯:
//此處的代碼無法實際運行,只做演示 { int x = 11; { int x = 12; } }
Java中貫徹了一切都是對象的觀念。對象不具備和基本數據類型一樣的生命周期。對象可以存活于作用域之外。
如以下代碼:
{ String s = new String("Hello World"); }//運行到這里,s已經在作用域之外
在上述代碼中,在超過作用域之后,引用變量s的生命周期已經結束,但"Hello World"這個String對象卻依舊存在。其生存于堆中,只是我們再沒有引用變量來指向這個對象了,因此這個對象對于我們來說是不可見的。
那么另外一個問題是,Java是如何來保障這些沒有引用變量指向的對象不會把內存塞爆的呢?Java采用了垃圾回收器,用來監視所有用new關鍵字創建的對象,如果一個對象不再被引用,那么垃圾收集器便會在隨后的內存回收活動中銷毀該對象,并釋放其所占用的內存。因此,Java程序員是不需要太在乎內存的回收的。
總結本文主要以Java的類為切入點,描述了從類到對象的創建,然后到對象的存放和銷毀的整個流程。由于我們大多數的時間都是在創建新的類來滿足我們的業務需求,因此一個類的內部結構異常重要,好的結構能最大化地提升程序運行效率。這涉及到后面講解的設計模式,在此只對類的構成作一個了解。
在下一節中,我們嘗試運用目前已學習的內容,來完成我們的第一個Java程序。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77432.html
摘要:而面向對象則是向程序員提供表示問題空間中元素的工具,我們將問題空間中的元素及其在解空間中的表示稱為對象。為什么要把對象看作是服務提供者呢這是將問題分解為對象集合的一種合理方式。職能太多,可能會導致對象的內聚性降低。在試圖將子類對象當作其基類 計算機是頭腦延伸的工具,是一種不同類型的表達媒體。本文以背景性的和補充性的材料,介紹包括開發方法概述在內的面向對象程序設計(Object-orie...
摘要:本書概括以軟件系統為例,重點講解了應用架構中的物理設計問題,即如何將軟件系統拆分為模塊化系統。容器獨立模塊不依賴于具體容器,采用輕量級容器,如獨立部署模塊可獨立部署可用性模式發布接口暴露外部配置使用獨立的配置文件用于不同的上下文。 本文為讀書筆記,對書中內容進行重點概括,并將書中的模塊化結合微服務、Java9 Jigsaw談談理解。 本書概括 以Java軟件系統為例,重點講解了應用架構...
摘要:當我們希望能界定這二者之間的區別時,我們將第一種稱為純粹的函數式編程,后者稱為函數式編程。函數式編程我們的準則是,被稱為函數式的函數或方法都只能修改本地變量。另一種觀點支持引用透明的函數式編程,認為方法不應該有對外部可見的對象修改。 一、實現和維護系統 1.共享的可變數據 如果一個方法既不修改它內嵌類的狀態,也不修改其他對象的狀態,使用return返回所有的計算結果,那么我們稱其為純粹...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創建了一個具體的對象。對象就是數據,對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
閱讀 1239·2021-11-11 16:54
閱讀 888·2021-10-19 11:44
閱讀 1354·2021-09-22 15:18
閱讀 2457·2019-08-29 16:26
閱讀 2961·2019-08-29 13:57
閱讀 3107·2019-08-26 13:32
閱讀 1091·2019-08-26 11:58
閱讀 2344·2019-08-26 10:37