java 反射機制

認識 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

相關文章
相關標籤/搜索