1. 程式人生 > >JAVA的newInstance()和new的區別(JAVA反射機制,通過類名來獲取該類的例項化物件)

JAVA的newInstance()和new的區別(JAVA反射機制,通過類名來獲取該類的例項化物件)

newInstance()是實現IOC、反射、面對介面程式設計 和 依賴倒置 等技術方法的必然選擇,new 只能實現具體類的例項化,不適合於介面程式設計。
裡面就是通過這個類的預設建構函式構建了一個物件,如果沒有預設建構函式就丟擲InstantiationException, 如果沒有訪問預設建構函式的許可權就丟擲IllegalAccessException


public interface duang {
	public String getClazzName();
}

public class classA implements duang{
	@Override
	public String getClazzName() {
		return "A類"+this.getClass().getName();
	}

}

public class classD {
    
    public static void main(String[] args)
    {
//        System.out.println(classA.getClazzName());
        try {
            Class clazz = Class.forName("classA");
            duang duang = (duang) clazz.newInstance();
            System.out.println(duang.getClazzName());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

//通過反射獲取該類的例項化物件,並由介面來呼叫該類的方法
這樣實現的好處就是如果也有一個classB類實現了這個介面的方法。
public class classB implements duang{
	@Override
	public String getClazzName() {
		return "B類"+this.getClass().getName();
	}
}

直接把
Class clazz = Class.forName("classA");
換成
Class clazz = Class.forName("classB");



反射的各種應用:參考這個連結