Java 反射机制获取 类类型 到 类方法

使用反射和接口编程还能达到解耦合的作用,

反射制作获取对象是在运行时加载的,而new 对象是在编译阶段加载的

获取类类型有三种方式: 

1.类名.class  #相当于每个类都有一个隐藏的静态属性 class

2. 对象名.getClass()   #相当于每个类都有一个getClass()方法

3. Class.forName("类")     #我们写的类也是对象,类是Class类的对象,类类型就是把类表示成Class的对象

class Excel implements OfficeBetter {
    public void run() {
        System.out.println("Excel..run..");
    }

    public void say(String s) {
        System.out.println("parameters: " + s);
    }
}

class Word implements OfficeBetter {
    public void run() {
        System.out.println("Word run");
    }
    public void say(String s) {
        System.out.println("parameters: " + s);
    }
}
interface OfficeBetter {
    public void run();
    public void say(String s);
}

import java.lang.reflect.Method;
import java.lang.reflect.TypeVariable;

class Office {
    public static void main(String[] args) throws Exception {
       /** 
        if("Word".equals(args[0])) {
            // 原始的类
            //Word w = new Word();
            //Class c = Class.forName("Word");
            //Word w = (Word)c.newInstance();

            // 使用接口
            //OfficeBetter w = (OfficeBetter)Class.forName("Word").newInstance();
            // w.run();
 
           
            ((OfficeBetter)Class.forName("Word").newInstance()).run();
        }
        **/
        Class c = Class.forName(args[0]);
        Method[] dm = c.getDeclaredMethods();
        for(Method m : dm) {
            // get Method returnType and name
            System.out.print(m.getReturnType() + " " + m.getName() + "(");
            Class[] parameterTypes = m.getParameterTypes();
            for(Class para : parameterTypes) {
                System.out.print(para.getSimpleName() + ",");
            }
            System.out.println(")\n-------------");
        }

        // get the type of parameters of method
       
        ((OfficeBetter)c.newInstance()).run();
    }
}
E:\code>java Office Excel
void run()
-------------
void say(String,)
-------------
Excel..run..



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值