1. 程式人生 > >動手動腦--類與對象

動手動腦--類與對象

通過 .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);
}
}

  技術分享圖片

如果先要在靜態成原函數中調用非靜態中的變量或方法,可以在靜態成員函數中聲明一個類的對象,然後再調用類的非靜態成員或方法。

動手動腦--類與對象