摘要:注本文首發(fā)于公眾號(hào),可長按或掃描下面的小心心來訂閱關(guān)于構(gòu)造器與初始化無參構(gòu)造器默認(rèn)構(gòu)造器自己未寫編譯器幫忙自動(dòng)創(chuàng)建的若自行定義了構(gòu)造器無論參數(shù)有否,編譯器便停止默認(rèn)創(chuàng)建動(dòng)作類里的對象引用默認(rèn)初始化為,基本類型初始化為構(gòu)造器也是類的靜態(tài)方法四
注: 本文首發(fā)于 My 公眾號(hào) CodeSheep ,可 長按 或 掃描 下面的 小心心 來訂閱 ↓ ↓ ↓關(guān)于構(gòu)造器與初始化
無參構(gòu)造器 = 默認(rèn)構(gòu)造器 = 自己未寫編譯器幫忙自動(dòng)創(chuàng)建的
若自行定義了構(gòu)造器(無論參數(shù)有否),編譯器便停止默認(rèn)創(chuàng)建動(dòng)作
類里的對象引用默認(rèn)初始化為null,基本類型初始化為0
構(gòu)造器也是類的靜態(tài)方法?。?!
四種常見初始化方式:
自動(dòng)初始化:無法被阻止的,先于構(gòu)造器,即所謂的基本類型賦空值(0),對象賦null
指定初始化:定義類成員的時(shí)候直接賦初始值
初始化子句:(匿名內(nèi)部類的初始化的必需品!且一定先于構(gòu)造器執(zhí)行)
public class Example { int i; int j; { i = 1; j = 2; } }
構(gòu)造器初始化:在構(gòu)造器中對成員賦上值
靜態(tài)域的初始化:
java中的static關(guān)鍵字是只能用于域,而不能用于普通的局部變量
未賦值過的類的靜態(tài)域默認(rèn)有初值:(object=null、基本數(shù)據(jù)類型 = 0)
靜態(tài)子句的概念:包含有多個(gè)靜態(tài)域初始化的的語句塊,舉例:
class Cups { Static cup cup1; Static cup cup2; static { // 靜態(tài)子句 cup1 = new Cup(1); cup2 = new Cup(2) } }
數(shù)組的初始化:
java是不允許定義數(shù)組時(shí)指定數(shù)組大小的
所有數(shù)組都有一個(gè)固定成員length
對象數(shù)組初始化方法:
形式1:只能被用在數(shù)組定義處,比較受限 Integer[] a = { new Integer(1), new Integer(2), 3, // 會(huì)被自動(dòng)包裝 } 形式2:可用于任何地方,典型在函數(shù)傳參時(shí):如:Example.func( new Ingeger[] { new Integer(1), new Integer(2), 3 } ) Integer[] b = new Ingeger[] { new Integer(1), new Integer(2), 3, // 會(huì)被自動(dòng)包裝 }
可變參數(shù)列表
public class Example { static void f( int i, String... trailing ) { ... for( String s : trailing ) ... } public static void main( String[] args ) { f( 1, "one" ); f( 1, "one", "tow" ); f( 1 ); } }
特別注意:
若函數(shù)參數(shù)只使用可變函數(shù)列表這將會(huì)使重載變得難以理解,解決辦法是:(1)要么在參數(shù)中加一個(gè)非可變參數(shù);(2)要么只在重載方法的一個(gè)版本上使用可變參數(shù);(3)不要嘗試這種做法
初始化的順序:
static成員先于non-static
類成員定義順序=初始化順序(即使變量散布于類方法之間)
某個(gè)成員先定義,然后再在構(gòu)造器中初始化,其值的就先被編譯器賦空值(null和0),然后再被賦上具體值,這個(gè)是有個(gè)先后關(guān)系的!
關(guān)于this當(dāng)以object來調(diào)用方法時(shí),編譯器會(huì)將該對象的引用作為第一個(gè)參數(shù)來傳給方法:object.func(1) = Class.func(object,1)
注意類的static方法無this,且static方法內(nèi)部不可調(diào)用非static方法,反過來ok
this可以用來在constructor中調(diào)用constructor,舉例:
// 利用this實(shí)現(xiàn)constructor中調(diào)用constructor public class Example { int _i = 0; String s = ""; Example( int i ) { this._i = i; } Example( String s, int i ) { this(i); // 該句必須在最開始,且this()這種只能使用一次 this._s = s; } }關(guān)于重載
關(guān)于清理(finalize終結(jié)處理 和 jvm垃圾回收)java重載唯一規(guī)則:獨(dú)一無二的參數(shù)列表
永遠(yuǎn)不要幻想以返回值區(qū)分重載
關(guān)于jvm的垃圾回收,有幾點(diǎn)必須記住的:
對象可能不被垃圾回收
垃圾回收并不等于C++中的destructor
垃圾回收只與內(nèi)存有關(guān)
java允許在類中創(chuàng)建一個(gè)名為finalize()的方法做終結(jié)處理,但該函數(shù)一般不是來給你做內(nèi)存釋放這類動(dòng)作的!
建議: 如果是進(jìn)行除釋放存儲(chǔ)空間之外的清理工作(如關(guān)閉文件句柄等),還是由程序員來明確地調(diào)用某個(gè)恰當(dāng)?shù)姆椒?/pre> 關(guān)于枚舉類型java中enum也是一個(gè)類,擁有自己的方法
舉例:
// 定義一個(gè)枚舉類型 public enum Spiciness { NOT, MILD, MEDIUM } // 使用枚舉類型 Spiciness howHot = Spiciness.MEDIUM; System.out.println(howHot); // ① 打印 MEDIUM for( Spiciness s : Spiciness.values() ) { System.out.println( s + ", ordinal " + s.ordinal() ); } // output: // NOT, ordinal 0 // MILD, ordinal 1 // MEDIUM, ordinal 2 Spiciness exam = Spiciness.MILD; switch( exam ) { case NOT: ... case MILD: // 所以這個(gè)case一定會(huì)走到這個(gè)分支! ... case MEDIUM: ... default: ... }由上面的例子可以看出:
編譯器自動(dòng)在enum中添加了tostring()方法,所以上面的①處可以打印出MEDIUM
編譯器自動(dòng)在enum中創(chuàng)建了ordinal()方法用來表示某個(gè)enum常量的聲明順序
編譯器自動(dòng)在enum中創(chuàng)建了static的values()方法,用來按照enum常量的聲明順序來生成由這些常量值所構(gòu)成的數(shù)組
switch和enum是絕配??!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68138.html
摘要:非內(nèi)部類通過一個(gè)特殊的鏈接到其外圍類的對象,而類型的內(nèi)部類無此引用。 showImg(https://segmentfault.com/img/remote/1460000012925199); 用thinkpad打字確實(shí)很爽啊! Thinking in java系列博文目錄: Java編程思想學(xué)習(xí)錄(連載之:一切都是對象) Java編程思想學(xué)習(xí)錄(連載之:初始化與清理) Java...
摘要:系列博文目錄編程思想學(xué)習(xí)錄連載之一切都是對象編程思想學(xué)習(xí)錄連載之初始化與清理編程思想學(xué)習(xí)錄連載之內(nèi)部類編程思想學(xué)習(xí)錄連載之異常本篇文章將講述關(guān)于異常的相關(guān)知識(shí)注本文首發(fā)于公眾號(hào),可長按或掃描下面的小心心來訂閱基本概念使用異常來提供一致性的錯(cuò) showImg(https://segmentfault.com/img/remote/1460000013228854); Thinking ...
摘要:前端技術(shù)棧還是非常龐大的,為了能夠借助已經(jīng)存在的輪子來造出一輛車,所以我選擇了進(jìn)行實(shí)踐。狀態(tài)的管理的狀態(tài)管理依靠完成,用其來管理的所有組件狀態(tài)。私有云客戶端打造主頁面首先是主頁面,可以打開任何一個(gè)云主機(jī)系統(tǒng)的頁面看,基本類似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技術(shù)棧打造個(gè)人私有...
摘要:前端技術(shù)棧還是非常龐大的,為了能夠借助已經(jīng)存在的輪子來造出一輛車,所以我選擇了進(jìn)行實(shí)踐。狀態(tài)的管理的狀態(tài)管理依靠完成,用其來管理的所有組件狀態(tài)。私有云客戶端打造主頁面首先是主頁面,可以打開任何一個(gè)云主機(jī)系統(tǒng)的頁面看,基本類似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技術(shù)棧打造個(gè)人私有...
摘要:將用戶命令通過接口傳送給,從而進(jìn)行資源的增刪改等操作。要使用編寫應(yīng)用程序,當(dāng)下大多語言都可以很方便地去實(shí)現(xiàn)請求來操作的接口從而控制和查詢資源,但本文主要是利用已有的客戶端來更加優(yōu)雅地實(shí)現(xiàn)的資源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技術(shù)棧打造個(gè)人私有云系列文章目錄】 利用K8S...
閱讀 3491·2023-04-25 22:45
閱讀 1294·2021-11-11 16:54
閱讀 2802·2019-08-30 15:44
閱讀 3198·2019-08-30 15:44
閱讀 1654·2019-08-30 13:55
閱讀 948·2019-08-29 18:45
閱讀 1207·2019-08-29 17:25
閱讀 1017·2019-08-29 12:59