代码:

java反射机制_读取properties
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 反射特点:
 * 可以在运行期间,动态加载一个类进来,动态new一个对象
 * 动态了解对象内部的结构,动态调用这个对象的某一些方法
 * 反射好处:
 * 在配置文件里只写类的名字,可以动态把类加载进来
 * @author Administrator
 *
 */
public class TestReflection {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{

        
        //String  str = "T";
        String str = ReadProperties.getClassName();
    
        //把类load到内存,返回Class类型。
        Class cls = Class.forName(str);
        Object o = cls.newInstance(); //new 一个对象
        
        //得到cls类所有的public方法
        Method[] methods = cls.getMethods();
        /*//读取所有方法名
        for(Method m :methods){
            System.out.println(m.getName());
        }*/
        
        //调用方法 m2
        for(Method m :methods){
            if(m.getName().equals("m2")){
                //可变参数的方法,o是new的对象
                m.invoke(o);
            
            }

            if(m.getName().equals("m1")){
                //可变参数的方法
                m.invoke(o,1,9);
                //得到m1方法的参数类型
                for(Class paramType : m.getParameterTypes()){
                    System.out.println(paramType.getName());
                }
            }
            if(m.getName().equals("getS")){
                //得到getS方法的返回值类型
                Class returnType = m.getReturnType();
                System.out.println("getS returnType is :"+returnType);
                
            }
        }
        
        
        
        
    }
}

class T {
    static{
        //测试是否类是否load到内存
        System.out.println("T  loaded...");
    }
    
    public T(){
        //测试T是否被调用
        System.out.println("T  constructed...");
    }
    int i;
    String s;

    
    public void m1(int i,int j) {
        this.i = i+j;
        System.out.println("i ="+this.i);
    }
    public void m2(){
        System.out.println("m2 invoked...");
    }
    
    public String getS() {
        return s;
    }
}
View Code

相关文章:

  • 2021-10-14
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-02-16
  • 2022-02-20
  • 2021-06-09
  • 2021-04-18
相关资源
相似解决方案