Java反射

一、获取CLASS

1.类名.class

Class<User> aClass = User.class;
String name = aClass .getName();
System.out.println(name);

2.Class.forName

//注意路径必须是全路径,包含包名
Class<?> aClass = Class.forName("org.example.bean.User");
String name = aClass.getName();
System.out.println(name1);

3.对象.getClass

User user = new User();
Class<? extends User> aClass = user.getClass();
String name = aClass.getName();
System.out.println(name);

二、常用方法

1.获取包名+类名

String name2 = aClass1.getName();

2.获取类名

String simpleName = aClass.getSimpleName();

3.获取类的全部属性

//包括public、private和proteced的,不包括父类的
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field : declaredFields){
    String fieldName = field.getName();
    System.out.println(fieldName);
}

4.获取类的全部方法

Method[] declaredMethods = aClass.getDeclaredMethods();
for (Method method : declaredMethods){
    String methodName = method.getName();
    System.out.println(methodName);
}

5.获取公开的属性,包括父类的

Field[] fields = aClass.getFields();
for (Field field : fields){
    String name = field.getName();
    System.out.println(name);
}

6.获取字段和方法等的修饰符类型

//什么都不加是0,public 是1,private是2,protected是4,static 是8,final是16,等等
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field : declaredFields){
    String name = field.getName();
    int modifiers = field.getModifiers();
    System.out.println("属性名称:" + name + "---------" + "修饰符类型:" + modifiers);
}

Method[] declaredMethods = aClass.getDeclaredMethods();
for (Method method : declaredMethods){
    String name = method.getName();
    int modifiers = method.getModifiers();
    System.out.println("方法名称:" + name + "---------" + "修饰符类型:" + modifiers);
}

7.类创建一个实例

User user = (User)aClass.newInstance();
String name = user.getName();
System.out.println("属性name的值:" + name);

三、反射实例

1.一个interface有多个实现,实现是继承关系,我们需要获取其中一个类的实现方法,类中没有实现就找子类;

//获取注册在spring中的bean,也就是获取一个new对象
Object bean = applicationContext.getBean("类名称");
//bean 对象 methodName 需要查找的方法名称 params 参数
public static Object invokeMethod(Object bean,String methodName,Object... params){
	try {
	    if(params.length>0){
	        List<Object> list = new ArrayList<>();
	        for (Object param: params){
	            Class<?> paramClazz = param.getClass();
	            list.add(paramClazz);
	        }
	        Class<?>[] clazzs = list.toArray(new Class<?>[params.length]);
	        Method method = bean.getClass().getMethod(methodName,clazzs);
	        Object invoke = method.invoke(bean, params);
	        return invoke;
	    }else {
	        Method method = bean.getClass().getMethod(methodName);
	        Object invoke = method.invoke(bean);
	        return invoke;
	    }
	}catch (Exception e){
	    e.printStackTrace();
	    return null;
	}
}

不足之处望海涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值