動手動腦--類與物件
阿新 • • 發佈:2018-11-07
一、
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); } }
如果先要在靜態成原函式中呼叫非靜態中的變數或方法,可以在靜態成員函式中宣告一個類的物件,然後再呼叫類的非靜態成員或方法。