黑馬程式設計師--java高新技術 25--列舉,反射

f781492604發表於2013-06-05

---------------------- ASP.Net+Android+IO開發S.Net培訓、期待與您交流! ----------------------

 

/*1.5 新特性總結:
靜態匯入
可變引數
增強for(foreach)
基本資料的自動拆裝箱
列舉
泛型
*/

/*25-2
API: Application Programming Interface
java EE
IDE: Integrated development environment
jms
jmx
jndi
*/

/*25-3
preference--java--compiler  //javac 編譯器版本
				|--Installed JREs   //java 執行的版本
		  |--general--keys  //快捷鍵

file--switch workspace  //切換工作間



*/

/*25-4
debug 透檢視下:
	r變數--watch

*/

/*25-5
r--run as--run configuration--jre //執行環境
低版本的java不能執行高版本的javac編譯的程式,會出現 UnsupportedClassVersionError

r(一個工程)--properties--run/debug setting--edit--(edit configuration)  //該路徑也可開啟執行環境
*/

/*25-6
模板程式碼:
properties--java--editer-templates
*/

/*25-7
jar Libaray 更改jre庫,Libaray 就是很多的jar
r工程--build path--configure build path--java build path 
*/

/*25-8
1.5 新特性 
靜態匯入
*/

/*25-9
1.5 新特性 
可變引數

overload vs override
*/

/*25-10
1.5 新特性 
增強for
*/

/*25-11
1.5 新特性 
基本資料的自動拆裝箱

享元設計模式flyweight:
有很多個小的物件,它們有很多屬性相同,把它們變成一個物件,
那些不同的屬性變成方法的引數,稱之為外部狀態,那些相同的屬性稱之為內部狀態。
*/

/*25-12
1.5 新特性 
列舉
*/

/*25-14
列舉的基本應用:
name();
ordinal();//類似陣列的角標
valueOf("SUN").toString();
values(); 把列舉變成陣列
*/

/*25-17
Class cls = 位元組碼;

獲得位元組碼的三種方式:
	System.class;
	new Date().getClass();
	Class.forName("java.util.Date");//全名

預定義的實力物件://參照isPrimitive();
void.class;
int.class = Integer.Type;//還有其他的7種基本資料型別。
isArray();//是否是陣列。
*/

/*25-19
反射會導致程式的效能下降
*/

/*25-20
getField(pt1);
getDeclaredField(pt1);
setAccessible(true);//暴力反射
*/

/*25-22
誰有資料誰就是幹這個事的專家,方法就分配給誰。
*/

/*25-23
用反射呼叫 main 方法的原因是可以在沒有載入 類的前提下用 class.forName(name); 方法來載入類, 之後就可以執行main 方法了。

r--run as--run configuration--arguments   //用於給程式傳遞引數。
*/

/*25-24
getSuperclass();

可變引數:若滿足1.4 的條件就按照1.4的處理,不滿足就按照1.5的處理。
*/

/*25-26
存入HashSet 集合的元素(物件) 的 資料發生改變時,其hashcode 的值也會發生改變,因此在使用時應該注意其HashCode 值 是否有發生改變。否則會發生記憶體洩露。
*/

/*25-27
反射的作用:
實現框架
*/

/*25-28

getClass().getResourceAsStream(); //無法通過類載入器寫入資料
*/

/*25-29
內省:introspector
javaBean: 以set 或 get 開頭 的方法 的類
*/

//個人疑問:?1, ?2, ?3, ?4

import java.lang.reflect.Constructor;

public class Demo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//WeekDay
		Class clazz = WeekDay.MON.getClass();//@0  	用getClass()獲得的建構函式是一個  
		//?1: 為何是一個? 為何會少掉建構函式?少掉了哪些建構函式?
		Constructor[] cons = clazz.getDeclaredConstructors();
		System.out.println("共有 "+cons.length+" 個建構函式");
		for (Constructor con : cons) {
			System.out.println(con.toGenericString());
		}
		
		Class clazz1 = WeekDay.class;//@1  	與@0 相比 用 .class 的方法卻獲得3個。  
		//?2: 為何是3個 ,多出來的那個建構函式是什麼意思?   ?3: 為何與@0 不同?
		Constructor[] cons1 = clazz1.getDeclaredConstructors();
		System.out.println("共有 "+cons1.length+" 個建構函式");
		for (Constructor con : cons1) {
			System.out.println(con.toGenericString());
		}
		
		System.out.println();
		//Weekday1 
		Class clazz2 = Weekday1.MON.getClass();//@2  與@0 相比 該方法enum 沒有 abstract 方法, 獲得的建構函式卻是2個
		Constructor[] cons2 = clazz2.getDeclaredConstructors();
		System.out.println("共有 "+cons2.length+" 個建構函式");
		for (Constructor con : cons2) {
			System.out.println(con.toGenericString());
		}
		
		Class clazz3 = Weekday1.class;//@3  比較WeekDay 和 Weekday1,WeekDay僅多了一個abstract方法。
		//說明WeekDay 之所以會多出或少掉建構函式是因為 abstract 方法
		//?4:為何WeekDay 和 Weekday1 會有這樣的差異?或者為何abstract方法會造成這樣的差異
		Constructor[] cons3 = clazz3.getDeclaredConstructors();
		System.out.println("共有 "+cons3.length+" 個建構函式");
		for (Constructor con : cons3) {
			System.out.println(con.toGenericString());
		}
			
	}
}


enum WeekDay{
    SUN(){
            public WeekDay nextDay(){
                    return MON;
            }
    },MON(){
            public WeekDay nextDay(){
                    return SUN;
            }
    };
    
    WeekDay(){
            System.out.println("first");
    }
    WeekDay(int x){
            System.out.println("second");
    }
    
    public abstract WeekDay nextDay();
}

enum Weekday1{
    SUN,MON;
    
    Weekday1(){
            System.out.println("first");
    }
    Weekday1(int x){
            System.out.println("second");
    }
    
}


---------------------- ASP.Net+Android+IO開發S.Net培訓、期待與您交流! ---------------------- 

 

相關文章