認識 java.lang.reflect包,此包下有:html
Constructor 反射類的構造方法java
Field, 反射類的屬性app
Member,函數
Method 反射類的方法ui
Modiferspa
Proxy:code
Reflect:htm
ReflectAccess對象
Type:blog
等類.
1.定義類
com.daniel.reflect.Person
2. 獲取類的方法,返回一個Class object,此類對象能夠用於構建對應的Object實例.
Class personClazz;
personClazz =Class.forName("com.daniel.reflect.Person") //拋出ReflectiveOperationException異常
personClazz =Person.class;//
personClazz = personObj.getclass(); //
3. 獲取實例
Person person; a. person = (Person)personClazz.newInstance(); //須要無參的構造函數 使用 b. Constructor<?> personCons[] = personClazz.getConstructors(); 或者 c. Constructor personCon = personClazz.getConstructor(String.class,int.class);
//此外還可使用getMethods,getFields..等來獲取類方法和類屬性
4 .反射機制用於工廠模式
package Reflect; import java.io.*; import java.util.*; interface fruit{ public abstract void eat(); } class Apple implements fruit{ public void eat(){ System.out.println("Apple"); } } class Orange implements fruit{ public void eat(){ System.out.println("Orange"); } } //操做屬性文件類 class init{ public static Properties getPro() throws FileNotFoundException, IOException{ Properties pro=new Properties(); File f=new File("fruit.properties"); if(f.exists()){ pro.load(new FileInputStream(f)); }else{ pro.setProperty("apple", "Reflect.Apple"); pro.setProperty("orange", "Reflect.Orange"); pro.store(new FileOutputStream(f), "FRUIT CLASS"); } return pro; } } class Factory{ public static fruit getInstance(String ClassName){ fruit f=null; try{ f=(fruit)Class.forName(ClassName).newInstance(); }catch (Exception e) { e.printStackTrace(); } return f; } } class hello{ public static void main(String[] a) throws FileNotFoundException, IOException{ Properties pro=init.getPro(); fruit f=Factory.getInstance(pro.getProperty("apple")); if(f!=null){ f.eat(); } } }
參考:
http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html