1. 程式人生 > >動手動腦--類與物件

動手動腦--類與物件

一、

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);
}
}

  

如果先要在靜態成原函式中呼叫非靜態中的變數或方法,可以在靜態成員函式中宣告一個類的物件,然後再呼叫類的非靜態成員或方法。