栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java反射介绍及代码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java反射介绍及代码

反射 获取反射
//第一种获取方式,主要是获取信息
Class clazz =Class.forName("包名.类名");
//第二种获取方式,用来传递参数
Class clabb=类名.class;
//第三种获取方式,不推荐使用
Cat cat =new Cat();
Class clacc=cat.getClass();
获取的反射类型

Field 获取的是变量Method[]获取的方法Constructor[]获取的是构造器 public 类型 的变量、方法、构造器获取 变量

1.关于获取全局变量
类对象名称.getFields(); // Field[]数组进行接收 只能获取由public修饰的变量
类对象名称.getDeclaredFields(); // Field[]数组进行接收 能获取所有的变量
类对象名称.getField(“指定的变量”) // Field 进行接收 只能获取由public修饰的变量
类对象名称.getDeclaredField(“指定的变量”); // Field数组进行接收 能获取所有的变量
2.Field成员变量的基本操作
1.设置值 set(Object obj,Object value)
①:new出我们的对象 :我们需要给赋的值内存空间进行表达
②:判断我们所获取的变量是不是private类型的,如果是必须使用暴力反射 : setAccessible(true);
②:调用set()方法,传递两个参数,第一个我们new出来的对象,第二个使我们想要付的值
2.获取值 get(Object obj)
①:new出我们的对象:我们需要给赋的值内存空间进行表达
②:判断我们所获取的变量是不是private类型的,如果是必须使用暴力反射 : setAccessible(true);
③:调用get()方法并且将创建出来的对象当成参数进行传递,用Object来进行返回值的接收

	Class c1=Class.forName("包名.Dog");
	//获取public值
	Field f1=c1.getField("age");
	Dog dog=new Dog();//创建对象
	Object o=f1.get(dog);
	System.out.println(o);	
	//获取private值
	Field f2=c1.getDeclaredField("name");
	f2.setAccessible(true);
	Object o2=f2.get(dog);
	System.out.println(o2);
	//获取所有public变量
	Field[] f4=c1.getFields();
	for(Field field:f4) {
		System.out.println(field);
	}
    //获取所有的变量 包括private
	Field[] f4=c1.getDeclaredFields();
	for(Field field:f4) {
		System.out.println(field);
	}
	//设置private值
	Field f3=c1.getDeclaredField("sex");
	f3.setAccessible(true);//设置private的值需要这一步骤获得允许
	f3.set(dog, '女');
	Object o3=f3.get(dog);
	System.out.println(o3);
    //设置public值
	Field f4=c1.getDeclaredField("age");
	f4.set(dog, 12);
	Object o3=f4.get(dog);
	System.out.println(o3);
方法

1.关于获取方法
类对象名称.getMethods(); //Method[]数组进行接收 只能获取由public修饰的方法
类对象名称.getDeclaredMethods(); //Method[]数组进行接收 获取由所有的的方法
类对象名称.getMethod(“制定的方法名称”,参数类型.class…); //Method进行接收 只能获取由public修饰的方法
类对象名称.getDeclaredMethod(“制定的方法名称”,参数类型.class …); //Method数组进行接收 获取由所有的的方法
2.关于对方法的操作 invoke() //对方法的执行
①:new出我们的对象 :我们需要给方法内存空间进行表达
②:判断我们所获取的方法是不是private类型的,如果是必须使用暴力反射 : setAccessible(true);
②:调用invkoe()方法,传递两个参数,第一个我们new出来的对象,第二个使我们想要付的值

	//获取public方法,用invoke()方法调用
	Method m1=c1.getMethod("run");
	System.out.println(m1);
	m1.invoke(dog);
	//获取private类型方法,用invoke()调用,带参方法的获取调用如下
	Method m2=c1.getDeclaredMethod("eat",String.class);
	m2.setAccessible(true);
	m2.invoke(dog, "小明");
	//获取所有的方法,包括private
	Method[] m3=c1.getDeclaredMethods();
	for(Method m:m3) {
		System.out.println(m);
	}
	//获取所有public方法
    Method[] m3=c1.getMethods();
	for(Method m:m3) {
		System.out.println(m);
	}
构造器

三、关于构造器
类对象名称.getConstructors(); // Constructor[]数组进行接收 只能获取由public修饰的构造器
类对象名称.getDeclaredConstructors(); // Constructor[]数组进行接收 能获取所有的构造器
类对象名称.getConstructor(参数类型.class) //
类对象名称.getDeclaredConstructor(参数类型.class);

    使用newInstance()进行初始化赋值
	//获取所有public构造器
	Constructor[] s1=c1.getConstructors();	
	for(Constructor s:s1) {
		System.out.println(s);
	}
	//获取所有构造器,包括private
	Constructor[] s2=c1.getDeclaredConstructors();
	for(Constructor s:s2) {
		System.out.println(s);
	}
	//获取带参数public构造器并赋值
	Constructor s3=c1.getConstructor(Integer.class);
	Object o4=s3.newInstance(12);
	System.out.println(o4);
	
	//获取带参数private构造器并赋值
	Constructor s4=c1.getDeclaredConstructor(Integer.class,String.class);
	s4.setAccessible(true);
	Object o5=s4.newInstance(11,"小绿");
	System.out.println(o5);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709516.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号