码迷,mamicode.com
首页 > 编程语言 > 详细

java 反射机制

时间:2014-07-01 00:14:32      阅读:351      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   java   color   使用   

认识 java.lang.reflect包,此包下有:

Constructor  反射类的构造方法

Field, 反射类的属性

Member,

Method 反射类的方法

Modifer

Proxy:

Reflect:

ReflectAccess

Type:

等类.

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

java 反射机制,布布扣,bubuko.com

java 反射机制

标签:style   blog   http   java   color   使用   

原文地址:http://www.cnblogs.com/waniu/p/3815900.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!