筆記:
static |
修飾詞加在任何的前面,都視為靜態 |
final |
加在變數前面為 不可以更改他的值,值鎖死 |
static final |
記憶體不但是唯一,且不可以更改值。 |
初始化順序比較:
有static{} 跟純 {} 還有建構子初始化速度
速度:static{} > {} > 建構子
加上父子類別速度比較
速度:父static{}>子static{} >父{} >父建構子>子{}>子建構子
package static_Test;
public class static_test {
public static void main(String[] args) throws ClassNotFoundException {
Sub sub1 = new Sub();
System.out.println("-----------分隔線-------------");
Super super1 = new Sub(); //父類別 可以實作子類別
Object obj = new Integer(5); //萬物父類別皆為object
// Integer IntObect = new Object(); 出錯,因為子類別不能轉成父類別來實作
System.out.println("-----------分隔線-------------");
System.out.println("obj內容呼叫: "+obj);
//方發1: 呼叫類別static變數,可以直接class類別名+變數名字
//方法2: 也可以 new一個實體出來,再用實體呼叫,但推薦上面的那一個
//畢竟static是靜態變數,記憶體位址不會隨個new 一個實體增加
//用方法1可以增加程式碼易讀性,降低複雜度
System.out.println("Super直接呼叫int I : "+Super.i );
System.out.println("建立 super1 實體呼叫int I : "+super1.i );
// Super.str = "我就是要改名"; //出錯,因為他不僅僅是靜態變數,還是final類型代表不可更改值,也不會因為new而多新的記體位置
// super1.Super_Final_int=15; //更上面一樣的錯誤
sub1.name = "光頭葛葛尋找紅心A"; //String name 沒有 final修飾詞 可以任意改值
System.out.println("Super直接呼叫 String str : "+Super.str );
final class Innerclass{ }//加final在內部類別 就會無法繼承
// class want_to_Extend_Innerclass extends Innerclass {} 會出錯 因為innerClass無法被繼承。
}
}
class Super {
final int Super_Final_int = 20;
static { //static { } 初始化 只會建構一次。不會再因為new又重建夠一次
System.out.println("Super static 呼叫1");
i = 1;
}
{ // {} object 初始化優於 建構子
System.out.println("Super object 呼叫1");
}
public Super() { //執行最慢的初始化
System.out.println("Super 建構子 呼叫1");
}
{
System.out.println("Super object 呼叫2");
}
static {
System.out.println("Super static 呼叫2");
i = 10;
}
static final String str = "qwer";
static int i;
}
class Sub extends Super {
String name = null;
static {
System.out.println("Sub static 呼叫1");
}
{
System.out.println("Sub Object 呼叫1");
name = "DemoBaseExtends";
}
public Sub() {
//super();
System.out.println("Sub 建構子 呼叫1");
}
{
System.out.println("Sub Object 呼叫2");
}
static {
System.out.println("Sub static 呼叫2");
}
}
/* OutPut:
Super static 呼叫1
Super static 呼叫2
Sub static 呼叫1
Sub static 呼叫2
Super object 呼叫1
Super object 呼叫2
Super 建構子 呼叫1
Sub Object 呼叫1
Sub Object 呼叫2
Sub 建構子 呼叫1
-----------分隔線-------------
Super object 呼叫1
Super object 呼叫2
Super 建構子 呼叫1
Sub Object 呼叫1
Sub Object 呼叫2
Sub 建構子 呼叫1
-----------分隔線-------------
obj內容呼叫: 5
Super直接呼叫int I : 10
建立 super1 實體呼叫int I : 10
Super直接呼叫 String str : qwer
*/
@copyright MRcodingRoom
觀看更多文章請點MRcoding筆記
觀看更多文章請點MRcoding筆記