hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 后端开发 - 正文 君子好学,自强不息!

【后端开辟】java什么反射?

2019-11-19后端开发搜奇网45°c
A+ A-

java什么反射?

反射是Java的特性之一,是一种间接操纵目的对象的机制。

JAVA反射机制是在运行状况中,关于恣意一个实体类,都能够晓得这个类的一切属性和要领;关于恣意一个对象,都能够挪用它的恣意要领和属性;这类动态猎取信息以及动态挪用对象要领的功用称为java言语的反射机制。

Java中为何须要反射?反射要处理什么问题?

一句话归纳综合就是运用反射能够给予jvm动态编译的才,不然类的元数据信息只能用静态编译的体式格局完成,比方热加载,Tomcat的classloader等等都没法支撑

Java中编译范例有两种:

 ● 静态编译:在编译时肯定范例,绑定对象即经由过程。

 ● 动态编译:运行时肯定范例,绑定对象。动态编译最大限制地发挥了Java的灵活性,表现了多态的运用,能够减低类之间的耦合性。

Java反射是Java被视为动态(或准动态)言语的一个症结性子。这个机制许可顺序在运行时透过Reflection APIs获得任何一个已知称号的class的内部信息,包含其modifiers(诸如public、static等)、superclass(比方Object)、完成之interfaces(比方Cloneable),也包含fields和methods的一切信息,并可于运行时转变fields内容或唤起methods。

Reflection能够在运行时加载、探知、运用编译时期完全未知的classes。即Java顺序能够加载一个运行时才得知称号的class,猎取其完全组织,并生成其对象实体、或对其fields设值、或唤起其methods。

反射(reflection)许可静态言语在运行时(runtime)搜检、修正顺序的构造与行动。
在静态言语中,运用一个变量时,必需晓得它的范例。在Java中,变量的范例信息在编译时都保留到了class文件中,如许在运行时才保证准确无误;换句话说,顺序在运行时的行动都是牢固的。假如想在运行时转变,就须要反射这东西了。

完成Java反射机制的类都位于java.lang.reflect包中:

1、Class类:代表一个类

2、Field类:代表类的成员变量(类的属性)

3、Method类:代表类的要领

4、Constructor类:代表类的组织要领

5、Array类:供应了动态建立数组,以及接见数组的元素的静态要领

运用


1、猎取Class对象的三种体式格局

1.1 Object ——> getClass();
1.2 任何数据范例(包含基础数据范例)都有一个“静态”的class属性
1.3 经由过程Class类的静态要领:forName(String className)(经常使用)

/**
 * 猎取Class对象的三种体式格局
 * 1 Object ——> getClass();
 * 2 任何数据范例(包含基础数据范例)都有一个“静态”的class属性
 * 3 经由过程Class类的静态要领:forName(String  className)(经常使用)
 *
 */
public class Fanshe {
	public static void main(String[] args) {
		//第一种体式格局猎取Class对象  
		Student stu1 = new Student();//这一new 发生一个Student对象,一个Class对象。
		Class stuClass = stu1.getClass();//猎取Class对象
		System.out.println(stuClass.getName());
		
		//第二种体式格局猎取Class对象
		Class stuClass2 = Student.class;
		System.out.println(stuClass == stuClass2);
//推断第一种体式格局猎取的Class对象和第二种体式格局猎取的是不是是同一个
		
		//第三种体式格局猎取Class对象
		try {
			Class stuClass3 = Class.forName("fanshe.Student");
//注重此字符串必需是实在途径,就是带包名的类途径,包名.类名
			System.out.println(stuClass3 == stuClass2);
//推断三种体式格局是不是猎取的是同一个Class对象
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
 
		System.out.println("*****************猎取公有、无参的组织要领*************");
		Constructor con = clazz.getConstructor(null);
		//1>、由于是无参的组织要领所以范例是一个null,不写也能够:这里须要的是一个参数的范例,牢记是范例
		//2>、返回的是形貌这个无参组织函数的类对象。
 
 
		System.out.println("*************猎取公有字段**并挪用*****************");
		Field f = stuClass.getField("name");
        System.out.println(f);
		
 
		System.out.println("***************猎取私有的show4()要领******************");
		m = stuClass.getDeclaredMethod("show4", int.class);
		System.out.println(m);
		m.setAccessible(true);//消除私有限制
		Object result = m.invoke(obj, 20);//须要两个参数,一个是要挪用的对象(猎取有反射),一个是实参
		System.out.println("返回值:" + result);
 
	}
}

以上就是java什么反射?的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
【后端开辟】java什么反射?

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

本文来源:搜奇网

本文地址:https://www.sou7.cn/282434.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>