反射常用的方法总结

该博客主要总结了反射常用的方法,包括获取class对象的三种方法、获取类的名字、获取对象的方法、获取对象的属性以及获取属性的值等内容,聚焦于反射技术在信息技术领域的应用。

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

反射常用的方法总结

​ (1):获取class对象的三种方法

 //方式一 :通过对象的getClass()方法
           Class<?> clazz1 = object.getClass();
//获取对象的实例
         Object instance = clazz1 .newInstance();

/*
 * 方式二 :通过类名获取class对象,加入类名为FieldName
 *    Class<?> clazz2 = FieldName.class
 * 方式三:通过Class类的静态方法forName(String className)
 *    Class <?> clazz3 = Class.forName("FieldName")
 *
 */

(2)获取类的名字

 
String name = clazz1.getName();//获取类的全限定名
 String simpleName = clazz1.getSimpleName();// 获取不含包名的类名
int modifiers = clazz1.getModifiers();//获取类的修饰符
//然后通过使用 java.lang.reflect.Modifier 类中的方法来检查修饰符的类型:
Modifier.isAbstract(int modifiers);
Modifier.isFinal(int modifiers);
Modifier.isInterface(int modifiers);
Modifier.isNative(int modifiers);
Modifier.isPrivate(int modifiers);
Modifier.isProtected(int modifiers);
Modifier.isPublic(int modifiers);
Modifier.isStatic(int modifiers);
Modifier.isStrict(int modifiers);
Modifier.isSynchronized(int modifiers);
Modifier.isTransient(int modifiers);
Modifier.isVolatile(int modifiers);
Package package = clazz1.getPackage();//Class 对象通过该方式获取包信息
Class superclass = clazz1.getSuperclass();//获取父类信息
Class[] interfaces = clazz1.getInterfaces()//获取实现的接口
Constructor[] constructors = clazz1.getConstructors();//获取构造器

(3)获取对象的方法

//参数:methodName: 表示被调用方法的名字    parameterTypes:表示被调用方法的参数的Class类型如String.class
//表示获取 指定 本类中的一个的公共public方法,不包括继承父类的方法
Method declaredMethod = clazz1.getDeclaredMethod(String methodName,Class<?>...parameterTypes);
//获取类自身所有方法(不包括继承父类的方法)
Method[] declaredMethods = clazz1.getDeclaredMethods();

//只能获取 指定 本类中一个的公共public方法,包括父类public的方法,但不包括父类的默认权限和private方法
Method[] methods = clazz1.getMethod(String methodName,Class<?>...parameterTypes);
//获取自身类和父类的所有public方法,包括继承的,但不包括父类的默认权限和private权限方法
Method[] methods = clazz1.getMethods();

(4)获取对象的属性(权限同方法)

Field field1 = clazz1 .getField(String name);
Field[] fields = clazz1 .getFields();
Field declaredField = clazz1 .getDeclaredField(String name);
Field[] declaredFields1 = clazz1 .getDeclaredFields();

(5 )获取属性的值

public static void getItemReflectValue(Object obj,String fieldName) {
     // 得到类对象
        Class clazz = (Class) obj.getClass();
    Object instance = clazz.newInstance();
	if (obj == null) return;
		Field[] fields = clazz.getDeclaredField(fieldName);
		for (Field field:fields) {
			field.setAccessible(true);//设置可访问
              //给字段设置值,和属性的数据类型一致,若为Integer,赋值的时候就必须赋int类型的数值
              field1.set(instance, "曹操");
			 try {
                    System.out.print(fields[j].get(obj));
                } catch (Exception e) {
                    e.printStackTrace();
                } 
        }       
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值