第三十二章 反射的更多细节

本文介绍Java反射机制的基本使用方法,包括如何通过类创建实例、调用类的方法及获取类的属性等核心操作。同时展示了如何利用反射来实现动态调用方法的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过一个类,创造这个类的实例

通过一个类,查找这个类的方法

通过一个类,查找这个类的属性


package cn.itcast.jdbc;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;




public class ReflectTest {
	public static void main(String[] args)throws Exception{
		Class clazz = User.class;
		Object obj = create(clazz);
		System.out.println(obj);
		
		invoke1(obj,"getId");  //作用?
		field(clazz);   //输出 id name birthday money 这些类的属性
	}
	
	/*通过一个类,创造出一个实例*/
	static Object create(Class clazz)throws Exception{
		Constructor con = clazz.getConstructor(String.class);
		Object obj = con.newInstance("test name");
		return obj;
	}
	
	/*通过类的方法名,调用这个类的方法*/
	static void invoke1(Object obj, String methodName) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException {
		//Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息
		Method[] ms = obj.getClass().getDeclaredMethods(); //包括私有方法,不包括公共方法
		ms = obj.getClass().getMethods(); //不包括私有方法,包括公共方法
		for(Method m : ms){
			System.out.println(m.getName());
			if(methodName.equals(m.getName())){
				m.invoke(obj, null);
			}
		}
		Method m = obj.getClass().getMethod(methodName,null);
		m.invoke(obj, null);
	}
	
	//查找某个类的属性
	static void field(Class clazz) throws Exception{
		Field[] fs = clazz.getDeclaredFields();
		//fs = clazz.getFields();
		for(Field f : fs){
			System.out.println(f.getName());
		}
	}
	
	//?
	static void annon(Class clazz) throws Exception{
		Annotation[] as = clazz.getAnnotations(); 
	}
	
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值