泛型、異常

泛型的例子,不用進行強制類型轉換

1、代碼更加簡單

2、所以的類型轉換都是隱式和自動的,提高代碼重用率


類型安全

向後兼容

層次清晰

性能更高(反射機制可以得等到更多類型信息)

ArrayList<Dog> al = new ArrayList<Dog>();
Dog dog1 = new Dog();
al.add(dog1);
Dog temp = al.get(0);

ArrayList al = new ArrayList();
Dog dog1 = new Dog();
al.add(dog1);
Dog temp = (Dog)al.get(0);



class Gen<T>{
	private T o;
	public Gen(T a){
		this.o = a;
	}
	public void showTypeName(){
		System.out.println(o.getClass().getName());
	}
}
在主函數中調用:

 Gen<String> gen1 = new Gen<String>("aaa");
 gen1.showTypeName();
是可以的

而下面的定義是不可以的

Gen<Float> gen1 = new Gen<Float>("aaa");


反射機制

JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;
對於任意一個對象,都能夠調用它的任意一個方法;
這種動態獲取的以及動態調用對象的方法的功能稱爲java語言的反射機制。
Java反射機制主要提供了以下功能:在運行時判定任意一個對象所屬的類;
在運行時構造任意一個類的對象;在運行時判定任意一個類所具有的成員變量和方法;
在運行時調用任意一個對象的方法。

異常處理

try {
FileReader fr = new FileReader("aaa.txt");
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}


最大捕獲,所有的異常由e捕獲



try {
FileReader fr = new FileReader("aaa.txt");
} catch (FileNotFoundException e) {
// TODO: handle exception
e.printStackTrace();
} catch (IOException e2){
e2.printStackTrace();


最小捕獲,只能捕獲一種異常

一旦捕獲,中止執行代碼,直接進入catch,多個catch則進入匹配的條件

FileReader fr = null;
try {
fr = new FileReader("aaa.txt");
} catch (FileNotFoundException e) {
// TODO: handle exception
e.printStackTrace();
} catch (IOException e2){
e2.printStackTrace();
}
finally{
if(fr != null)
try {
fr.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}


finally用於異常之後的處理,比如文件的處理。

finally之前如果出現system.exit(),cpu掉電,等情況都不會被執行


異常可以拋出,throws Exception











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章