標籤:
Java 5.0新特性:
enum Grade{ --> 相當於類 A("80~100"),B("70~80"),C("60~70"),D("59~0"); -->相當於調用枚舉的建構函式 private String value; private Grade(String value){ this.value = value;}
枚舉還可以定義抽象方法,並直接在枚舉中以匿名內部類方式執行個體化,如:
A("80~100"){ public void gradeclass(){ system.out.println("優"); }}
- Junit測試外掛程式:可以通過Junit對某個類中的方法進行單獨測試,只要在方法名前面加入@Test即可。也可以加入@TestBefore和@Testafter測試整體。
- Map的迭代遍曆:
Map map = new LinkedHashMap();map.put(....);....;....;for(Object obj : map.entrySet()){ map.Entry = (Entry)obj; String key = (String)obj.getKey(); String value = (String)obj.getValue();}也可以是:for(Iterator it = map.entrySet().iterator();it.hasNext();){ map.Entry = (Entry)it.next(); String key = (String)obj.getKey(); String value = (String)obj.getValue();}
Class clazz = Class.forName("cn.bestsonic.demo.Person"); //解剖類的建構函式,並建立對象Constructor c = clazz.getDeclearConstructor(參數列表);Person p = (Person)c.newInstance(參數列表);
若建構函式是私人的,則需要使用c.setAccessible(true)來暴力訪問。
參數列表為類型,要寫String.class,int.class等。
Class clazz = class.forName("cn.bestsonic.demo.Person"); //反射類的方法並運行該方法
Method m = clazz.getDeclearMethod("方法名",參數列表位元組碼檔案);Person p = new Person(); //調用方法一定需要對象m.invoke(p,參數列表執行個體);
也要注意暴力訪問。
Class clazz = Class.forName("cn.bestsonic.demo.Person"); //反射main方法
Method m = clazz.getMethod("main",String[] class);m.invoke(null,new Object[]{new String{"aa","bb"}});
jdk1.5相容1.4,會優先將main(new String[]{"aa","bb"})拆分成main(string,string);造成參數錯誤,所以採用兩重封裝方式,使其自動拆分出String[]。也可以使用(Object)String[]{....}
Field f = clazz.getDeclearField("age");f.get(new Person()); //擷取欄位的值f.getType(); //擷取欄位的類型
- 內省技術:Introspector --> 專用於javabean封裝資料
什麼是javabean? --> 封裝使用者資料的類。什麼是javabean的屬性? --> 由get set組合數決定,包括從父類Object中繼承出來的(Object類中有getClass()方法,也算是一個屬性)。
BeanInfo = Intrspector.getBeanInfo(Person.class); //這裡可再傳入Object.class來去除父類得到的屬性PropertyDescriptor[] pds = info.getPropertyDescriptors();可以通過屬性描述器,擷取屬性名稱,屬性的類型以及Get,Set方法,具體方法分別為:pds.getName(),getPropertyType(),getReadMethod(),getWriteMethod()
-
- Beanutils架構:
- 匯入jar包的過程:
- 建立folder -> lib檔案夾。
- 將beanutils開發包匯入lib檔案夾中。
- 將記錄日誌的支援jar包commons-logging包匯入。
- 右鍵匯入的jar包,選擇Build Path匯入,Add to Build Path(加入到開發環境中)。
- 使用:
Person p = new Person();Beanutils.setProperty(p,"name","zhangsan");Beanutils.setProperty(p,"age","34"); //String自動轉換為int
注意:Beanutils只支援String和八種基本類型之間的轉換,如果想要讓Beanutils支援自訂類型,可以使用轉換器:ConvertUtils.register(Converter轉換器,自訂類型位元組碼,如Data.class);然後用匿名內部類的方式實現Converter介面的convert方法,實現相應的轉換方法。
注意:詳細可以參考Beanutils的手冊,可以找到已經寫好的DataLocalConverter轉換器。
-
-
- 可以使用Beanutils.populate方法將使用者提交的Map填充至封裝類(Person)中。
Java WEB —— Java提升