当前位置:首页 > Java技术 > Java反射原理

Java反射原理

2022年08月04日 17:25:49Java技术4

了解:大部分框架实现的原理就是利用的反射。

Java反射原理

1.将Java文件保存到本地硬盘

2.编译Java文件,生成.class文件

3.使用Java虚拟机(JVM)将字节码文件加载到内存

4.字节码文件在内存中使用Class类表示

5.使用反射的时候,首先获取到Class类,就可以得到class文件里的所有内容,包含属性、构造方法、普通方法

6.属性通过Filed类表示

7.构造方法通过Constructor表示

8.普通方法通过Method表示

得到Class类的三种方法

以Person.java为例

package reflect;

public class Person {

	private String name;
	private String age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public Person(String name, String age) {
		super();
		this.name = name;
		this.age = age;
	}

	public Person() {
		super();
	}

}
//第一种方法
Class class1 = Person.class

//第二种方法
Class class2 = new Person().getClass();

//第三种方法
Class class3 = Class.forName("Person.java的路径");

具体操作属性、构造器、方法

注意:当方法或属性用静态修饰,某些方法用到对象时,用null表示。如:m.invoke(null, "wangmazi");

使用反射操作属性

private static void field()
			throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchFieldException {
		// 使用反射操作属性(变量)
		Class class1 = Class.forName("reflect.Person");

		// 得到所有的属性
		// class1.getDeclaredFields();

		// 得到对象
		Person p = (Person) class1.newInstance();

		// 得到指定的属性
		Field f = class1.getDeclaredField("name");

		// 设置方法允许操作私有属性
		f.setAccessible(true);

		// 赋值
		f.set(p, "zhangsan");

		// 获取值(Person中设置属性为私有,需要设置一个方法setAccessible(true))
		System.out.println(f.get(p));
	}

使用反射操作构造器

private static void constructor() throws ClassNotFoundException, NoSuchMethodException, InstantiationException,
			IllegalAccessException, InvocationTargetException {
		Class class2 = Class.forName("reflect.Person");

		// 得到所有的构造方法
		// class2.getConstructor();

		// 得到指定的构造方法
		Constructor c = class2.getConstructor(String.class, String.class);

		// 得到对象
		Person p = (Person) c.newInstance("lisi", "100");

		System.out.println(p.getName() + p.getAge());
	}

使用反射操作方法

private static void method() throws ClassNotFoundException, InstantiationException, IllegalAccessException,
			NoSuchMethodException, InvocationTargetException {
		Class class3 = Class.forName("reflect.Person");

		// 得到对象
		Person p = (Person) class3.newInstance();

		// 获取所有普通方法
		class3.getDeclaredMethods();

		// 获取指定参数普通方法
		Method m = class3.getDeclaredMethod("setName", String.class);

		m.invoke(p, "wangmazi");

		System.out.println(p.getName());
	}

 

作者:田田田田__
来源链接:https://blog.csdn.net/weixin_42061805/article/details/81664786

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17160.html

分享给朋友:

“Java反射原理” 的相关文章

java反射的应用(Hibernate)

java反射的应用(Hibernate)          Hibernate是一个屏蔽了JDBC,实现了ORM的java框架,利用该框架我们可...

java反射详解之反射作用

java反射详解之反射作用

本文转载两篇文章,前一部分很好的解释了Java 反射在开发中的作用机制,后一部分详细给出了反射的运用案例。 第一部分: 反射作用 Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框架技术有很大的帮助。...

利用JAVA反射,读取数据库表名,自动生成对应实体类

本代码是利用java反射,读取数据库表自动根据表名生成实体类,数据库采用老牌SQLSERVER 2000,驱动为JTDS,其他数据库可根据情况自定修改。 代码中包含了大部分数据库类型与JAVA类型的转换,少数未包含进去的会在生成代码时打印出来,方面后期查找修改。 本文...

java反射机制及Method.invoke方法(转载)

java反射机制及Method.invoke方法(转载)

1.java反射机制主要提供了以下功能 在运行时判断任意一个对象所属的类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在运行时调用任意一个对象的方法 Reflection 是Java被视为动态(或准动态)语言的一个关...

JAVA利用反射映射JSON对象为JavaBean

关于将JSONObject转换为JavaBean,其实在JSONObject中有对于的toBean()方法来处理,还可以根据给定的JsonConfig来处理一些相应的要求,比如过滤指定的属性 [java] vi...

Java反射机制及用途

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法和属性; class.forName(类名)//获得类      这种动态获取的信息以及...

Java基础--反射机制的知识点梳理

什么是反射?   正常编译执行java文件时,会生成一个.class文件,反射就是一个反编译的过程,它可以通过.class文件得到一个java对象.一个类会有很多组成部分,比如成员变量,成员方法,构造方法等,反射可以通过加载类,解剖出类的各个组成部分. 为什么要用反射?...

java反射例子

package reflect; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java...

java反射机制详解

java反射机制详解

一、什么是反射 JAVA反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法;对于任何一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 想要使用反射机制,就必须要先获取到该类的字节码文件对象(...

Java反射获取字段、设置字段以及获取字段的值

Java反射获取字段、设置字段以及获取字段的值 获取字段 1.先找到字段所在类的字节码 2.找到需要被获取的字段 Class类中获取字段: public Field[] getFields();//获取包括自身和继承(实现)过来的所有的public字...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。