java反射机制实例

一、简单讲解

通过类名获取类。(还有其他的方法获取类:Class.forName("...") .getClass() .class .Type .getSuperclass())

Class clazz = Class.forName("com.fc.demo.Utils");//括号里的参数为类名


获取方法
Method method = serviceManager.getMethod("getPreference", String.class);//括号里第一个参数为方法名,第二个参数为方法的形参类型


调用方法

method.invoke(Utils.newInstance(), "uid");//括号里第一个参数为类的实例(如果是静态方法此处写null),第二个参数为传入方法的形参值



二、一个实例:

import java.lang.reflect.Method; 
import java.lang.reflect.InvocationTargetException; 


class Person { 
    private String name; 


    public Person(String name) { 
        this.name = name; 
    } 


    public void setName(String msg) { 
        this.name = name; 
    } 


    public String getName() { 
        return name; 
    } 


    public void testStart() { 
        System.out.println("测试反射"); 
    } 
}


public class  ReflectionDemo{ 


    public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { 
        Person person = new Person("xiaohong"); 
        Class clazz = person.getClass(); 
        Method m1 = clazz.getDeclaredMethod("testStart"); 
        Method m2 = clazz.getDeclaredMethod("setName", String.class); 
        Method m3 = clazz.getDeclaredMethod("getName"); 
        m1.invoke(person); 
        m2.invoke(person, "姓名改为:dawei"); 
        String name = (String) m3.invoke(person); 
        System.out.println(name); 
    } 


输出结果:
测试反射
姓名改为:dawei


三、附录(参考其他文章)

侯捷Java反射机制

http://blog.csdn.net/njchenyi/article/details/1620939

http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html


Class object 诞生管道

示例

运用getClass()

注:每个class 都有此函数

String str = "abc";

Class c1 = str.getClass();

运用

Class.getSuperclass()

Button b = new Button();

Class c1 = b.getClass();

Class c2 = c1.getSuperclass();

运用static method

Class.forName()

(最常被使用)

Class c1 = Class.forName ("java.lang.String");

Class c2 = Class.forName ("java.awt.Button");

Class c3 = Class.forName ("java.util.LinkedList$Entry");

Class c4 = Class.forName ("I");

Class c5 = Class.forName ("[I");

运用

.class 语法

Class c1 = String.class;

Class c2 = java.awt.Button.class;

Class c3 = Main.InnerClass.class;

Class c4 = int.class;

Class c5 = int[].class;

运用

primitive wrapper classes

的TYPE 语法

Class c1 = Boolean.TYPE;

Class c2 = Byte.TYPE;

Class c3 = Character.TYPE;

Class c4 = Short.TYPE;

Class c5 = Integer.TYPE;

Class c6 = Long.TYPE;

Class c7 = Float.TYPE;

Class c8 = Double.TYPE;

Class c9 = Void.TYPE;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值