欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java反射机制介绍和理解

程序员文章站 2022-04-15 17:53:56
 Java反射机制是Java程序在运行状态下,动态获取类中的内容以及动态调用对象的方法。此篇是对Java反射机制的一些基础代码操作的简单总结。1.Java反射机制概述 Java反射机制就是在Java程序运行时,得到一个java类中的属性和方法;并可以调用已经给定对象的类中的构造方法、属性和方法。放射机制就是就像这样动态的获取类中构造方法、属性和方法以及动态调用对象的方法。2.Java反射机制基础内容 正常情况下如果已经有一个类,则可以通过类创建对象;那么如果想通过一个对象找到一个类的名称,就...

Java反射机制是Java程序在运行状态下,动态获取类中的内容以及动态调用对象的方法。此篇是对Java反射机制的一些基础代码操作的简单总结。

1.Java反射机制概述

Java反射机制就是在Java程序运行时,得到一个java类中的属性和方法;并可以调用已经给定对象的类中的构造方法、属性和方法。放射机制就是就像这样动态的获取类中构造方法、属性和方法以及动态调用对象的方法。

2.Java反射机制基础内容

正常情况下如果已经有一个类,则可以通过类创建对象;那么如果想通过一个对象找到一个类的名称,就需要反射机制。

2.1 简单理解放射机制

正常情况:引入需要的包—> new实例化—> 取得实例化对象
反射方式:实例化对象—> 使用getclass()方法—>获取完整的“包.类”名称

2.2 静态实例化class方法

首先声明class对象

Class<?> c = null; 

第一种:通过forName()方法

c = Class.forName(“包名.类名”) ; 

此种方法最为灵活,因为只需要用字符串的方式当参数即可。

第二种:通过“类.class”方法

c = 类名.class; 

第三种:通过“对象.getClass()”方法

c = new 类名().getClass(); 

2.3 实例化对象

注:以下所写的方法都是在上面第一种实例化之后的操作。

Class X{ public String a; public int b; public double c; public int y; public String X(int arg){} public String X(){} public String W(String a,int b,double c){ this.a = a; this.b = b; this.c = c; return a+“:”+b+“:”+c; } } 注:以下的操作都是对X类操作 (1)通过无参构造实例化对象
	操作范例:
	X x = (X) c.newInstance(); 对象x就和正常方法实例化的对象使用一样。
	重点注意: 1.使用此方法时,被实例化对象的类中必须含有无参构造方法; 2.强制转化是因为:反射机制的一切的操作都将使用object完成。 (2)通过有参构造实例化对象
	操作步骤为: 1.通过Class类中的getConstructors()获取类中全部构造方法; 2.向构造方法中传递一个对象数组,其中包含构造方法所需的全部参数; 3.然后通过Constructor实例化一个对象。
	操作范例为:
	Constructor<?> cons[] = c.getConStructors(); //通过反射,获取全部构造方法将其赋值给构造方法数组。 实例化过程:
	X x = (X) cons[0].newInstance(1); 

2.4获取类的结构

将会使用到java.lang.reflect包,其中包含的功能有:
Field:表示获取的类中属性。
Method:表示获取的类中方法。
(1)获取属性
①获取父类或接口的属性

public Field[] getFields() throws SecurityException; 

②获取此类的属性

public Field[] getDeclaredFields() throws SecurityExceptions; 

代码示例:

Filed f[] = c.getDeclaredFields();//获取本类中的属性 Class<?> r = f[0].getType();//获取属性类型 int m = f[0].getModifiers();//获取权限的编号 String pri = Modifier.toString(m); //将权限转化为修饰符 

(2)获取类中的方法并对其进行调用
①获取方法的Class方法为

public Method[] getMethods() throws SecurityException; 

②通过反射机制调用类中方法:

public object invoke(Object obj,Object ...args); 

代码如下:

Class<?> c=Class.forName(“X”); Method m = c.getMethod(“W”,String.class,int.class,double.class);//参数的个数与类型根据实际方法 Stringrs=(String)m.invoke(c.newInstance(),"小哈"20,3.2)//调用方法 

3.小结

在计算机领域中,反射是指程序可以访问、检测和修改它本身状态和行为的能力。反射机制是java提供的一项强大功能,是一种实现面向抽象编程的方式,其使代码语句更加灵活,极大的提高代码的运行时装配能力。此上是通过对class类中的一些方法从而对反射机制进行的初步了解。

本文地址:https://blog.csdn.net/qq_35494772/article/details/107900325