動手動腦--類與對象
阿新 • • 發佈:2018-10-21
通過 .com bubuko 原函數 end 初始化順序 對象 調用 rgs
一、
public class Test { public static void main(String[] args) { Foo obj1=new Foo(); Foo obj2=new Foo(); System.out.println(obj1==obj2); } } class Foo{ int value=100; }
當“==”施加於原始數據類型變量時,是比較變量所保存的數據是否相等
當“==”施加於引用類型變量時,是比較這兩個變量是否引用同一對象。
引用代表地址,所以“==”實際上相當於比較兩個引用類型變量中保存的對象地址是否相同
二、
出現錯誤
public class Test { public static void main(String[] args) { Foo obj1=new Foo(); } } class Foo{ int value; public Foo(int initValue) { value=initValue; } }
沒有初始化
三、
public class InitializeBlockClass { { field=200; } public int field=100; public InitializeBlockClass(int value) { this.field=value; } public InitializeBlockClass() { } public static void main(String[] args) { InitializeBlockClass obj=new InitializeBlockClass(); System.out.println(obj.field); obj=new InitializeBlockClass(300); System.out.println(obj.field); } }
按順序依次執行
四、
class Root { static{ System.out.println("Root的靜態初始化塊"); } { System.out.println("Root的普通初始化塊"); } public Root() { System.out.println("Root的無參數的構造器"); } } class Mid extends Root { static{ System.out.println("Mid的靜態初始化塊"); } { System.out.println("Mid的普通初始化塊"); } public Mid() { System.out.println("Mid的無參數的構造器"); } public Mid(String msg) { //通過this調用同一類中重載的構造器 this(); System.out.println("Mid的帶參數構造器,其參數值:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf的靜態初始化塊"); } { System.out.println("Leaf的普通初始化塊"); } public Leaf() { //通過super調用父類中有一個字符串參數的構造器 super("Java初始化順序演示"); System.out.println("執行Leaf的構造器"); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } }
由父類到子類先輸出靜態初始化塊,然後是普通初始化塊,無參數和有參構造器。
五、
public class Stac { public int num; static void change(Stac a) { a.num=10; } public static void main(String[] args) { Stac b=new Stac(); b.num=100; b.change(b); System.out.println(b.num); } }
如果先要在靜態成原函數中調用非靜態中的變量或方法,可以在靜態成員函數中聲明一個類的對象,然後再調用類的非靜態成員或方法。
動手動腦--類與對象