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