java常用反射方法用法总结

硅谷探秘者 2981 0 0

java常用反射方法以及用法总结

package reflect;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface D{
}
interface C{
	public int c();
}
@D
class B{
	private int b;
	public void b() {
		System.out.println("b");
	}
	public void b2(int a) {
		System.out.println("b2"+a);
	}
}
public class A extends B implements C{
	public A() {
		
	}
	public A(int a) {
		
	}
	@Override
	public int c() {
		// TODO Auto-generated method stub
		return 0;
	}
	private int a;
	public int a2;
	public static void main(String[] args) throws NoSuchMethodException, 
	SecurityException, InstantiationException, IllegalAccessException, 
	IllegalArgumentException, InvocationTargetException, NoSuchFieldException {
		//获取class对象 1.Class.forName(),2.类名.class,3.对象.getClass()
		Class<?> a=A.class;
		String name=a.getName();//获取类名
		
		A obj=(A) a.newInstance();//反射创建对象
		
		{
			Method m=a.getMethod("b",null);//获取方法
			Method m2=a.getMethod("b2",int.class);//获取方法
			String mname=m.getName();//获取方法名
			System.out.println(mname);
			mname=m2.getName();//获取方法名
			System.out.println(mname);
			
			m.invoke(obj,null);//反射执行方法
			m2.invoke(obj,1);
			
			m.getAnnotation(D.class);//获取上面方法的注解
			m.getAnnotations();//获取方法上的所有注解(数组)
			
			m.getReturnType();//获取方法的返回值类型
			
			Class<?>[] mcs=m2.getParameterTypes();//获取该方法所有参数类型(数组)
			
			Method[] ms=a.getDeclaredMethods();//获取类的所有方法数组
		}
		
		{
			Field af=a.getField("a2");//获取共有属性
			Field pf=a.getDeclaredField("a");//获取私有属性
			Field afs[]=a.getDeclaredFields();//获取所有属性(数组)
			
			af.set(obj,1);//给对象属性赋值
			pf.setAccessible(true);//设置可以访问私有属性
			pf.set(obj,2);//给对象的私有属性赋值
			
			int val=(int) pf.get(obj);//获取对象中属性的值
			af.getType();//获取属性类型
			af.getAnnotation(D.class);//获取属性上的注解
			af.getAnnotations();//获取属性上的所有注解
		}
		
		Class<?> sc=a.getSuperclass();//获取父类class对象
		
		a.getAnnotation(D.class);//获取类上的注解
		a.getClasses();
		//返回一个包含某些 Class 对象的数组,这些对象表示属于此 Class 
		//对象所表示的类的成员的所有公共类和接口。
		a.getClassLoader();//获取该类的类加载器
		a.getConstructor(int.class);
		//返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法
		a.getConstructors();
		//返回一个包含某些 Constructor 对象的数组,
		//这些对象反映此 Class 对象所表示的类的所有公共构造方法。
		a.getDeclaredConstructor(int.class);
		// 返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。
		a.isInstance(obj);//判定指定的 Object 是否与此 Class 所表示的对象赋值兼容
		a.isPrimitive();//判定指定的 Class 对象是否表示一个基本类型
	}
}



评论区
请写下您的评论...
暂无评论...
猜你喜欢
java基础 5719 构造1.Thread(Runnabletarget)。参数为实现了Runnable接口的类。2.Thread(Stringname)。参数为线程的名字。3.Thread
算法基础 2632 Java机制可以让我们获取某个类的所有信息,本文要聊的是如何获取某个类,某个类的属性,某个类的的修饰符。或判断某类、属性、上是否有某个修饰符。在Class、Field、Method这三
java基础 3532 javaioFile类一个File类的对象,表示了磁盘上的文件或目录(注意其并不是文件本身)。1.构造2.文件的创建删除//如果文件存在返回false,否则返回true并且创建文件
java基础 3686 1.hashCode的作:对于包含容器类型的程序设计语言来说,基本上都会涉及到hashCode,hashCode的主要作是为了配合基于散列的集合一起正运行,这样的散列集合包括
数据结构与算法 1607 java使欧几里得算计算比例的 publicstaticvoidmain(String[]args){ System.out.println(bili(2,6
算法基础 1221 关系图基本命令`uname-r`:查看内核`systemctlstartdocker`:启动docker镜像`dockerversion`:查看docker版本`dockerinfo`:查看docker详细信息`docker--help`:查看docker命令操作docker镜像命令查看镜像列表:​dockerimages拉取镜像到本地:​dockerpull镜像名称或ID上传镜像到仓库:​doc
java基础 3505 使wait和notify的条件wait()与notify/notifyAll必须在同步代码块中使,如果不是在同步或同步代码块中使则会报异Exceptioninthread"main
框架 3520 mybatis使接口的时候注意不能重载1.单个参数publicUsersselectUser(intid);selectid="selectUser"resultType
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。