博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java反射机制学习笔记(1)
阅读量:3960 次
发布时间:2019-05-24

本文共 4378 字,大约阅读时间需要 14 分钟。

Java反射机制学习笔记

1.什么是Java反射

反射是指可以分析一个类的功能的程序。

2.反射的原理

    java运行时系统在程序运行时,需要识别程序中的对象,于是会为每个对象提供一个表示信息,

来区别对象所属的类型,这个标识信息保存了类的相关信息。于是Java提供了一个类用来存储这些信息,他就是Class类。

获取对象的Class类有三种方法。

①getClass()方法		例子:		String s="abc";		Class c=s.getClass();//这里的c就包含了String类型的相关信息。		通过c.getName()方法可以获取String类型的名字。		②Class.forName()方法		如:Class c=Class.forName("java.time.LocalDate");		③class属性		Class c=String.class;

3.前面说了反射的概念,下面来看实用。

**一.**记住几个重要的方法
首先先记住4个类,Class,Constructor(构造器类),Field(域类),Method(方法类),Modifier(修饰符类);
①**Class的方法,你需要记住下面8个,很重要。**
方法 描述
Field[] getFields() 获取所有公有域(包括继承得到的公有域),并返回Field数组,如果是基础数据类型或数组类型或没有域,返回大小为0的数组。
Filed[] getDeclaredFie1ds() 获取类的所有域(包括继承得到的),并返回Field数组如果是基础数据类型或数组类型或没有域,返回大小为0的数组。
Method[] getMethods() 获取所有公有方法(包括继承得到的),并返回Method数组
Method[] getDeclareMethods() 获取类或接口的所有公有方法(不包括继承得到的),并返回Method数组
Constructor[] getConstructors() 类的所有公有构造器
Constructor[] getDeclaredConstructors() 类的所有构造器
int getModifiers( ) 返回的整型数值。
String getName( ) 返冋类名字符串。

Constructor,Field,Method的方法

方法 描述
Class[] getExceptionTypes ( ) 在 Constructor 和 Method 类 中返回一个用于描述方法抛出的异常类型的 Class 对象数组。
int getModifiers( ) 返回一个用于描述构造器、 方法或域的修饰符的整型数值。
String getName( ) 返冋一个用于描述构造器、 方法或域名的字符串。
Class[] getParameterTypes ( ) 在 Constructor 和 Method类中返回一个用于描述参数类型的 Class 对象数组。
Class getReturnType( ) 在 Method 类 中返回一个用于描述返回类型的 Class 对象。

③Modifier的方法,很多,我下面讲代码是用到的方法有这个

方法 描述
static String toString(int modifiers ) 返回对应 modifiers 中位设置的修饰符的字符串表示。

就是上面的Class与其他三个类的getModifiers方法返回的值放到这可以返回它们对应的名字。

**二.**代码实战
package ReflectTest;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.Scanner;public class ReflectTest {
static Class cL;//本类 static Class supercl;//父类 public static void main(String[] args) {
String ClassName = "";//接收类名 try {
if(args.length>0) {
ClassName=args[0]; cL = Class.forName(ClassName); supercl = cL.getSuperclass(); } else {
Scanner scan = new Scanner(System.in); ClassName = scan.next(); cL=Class.forName(ClassName); supercl = cL.getSuperclass(); } } catch (ClassNotFoundException e) {
e.printStackTrace(); } String modifier = Modifier.toString(cL.getModifiers()); if(modifier.length()>0) System.out.print(modifier+" "); System.out.print("class"+" "+ClassName+" "); if(supercl.getName().length()>0&&supercl!=Object.class) System.out.print("extends"+" "+ supercl.getName()); System.out.println("{"+"\n"); printConstructors(cL); System.out.println(); printMethods(cL); System.out.println(); printFields(cL); System.out.println("}"); } static void printConstructors(Class c){
Constructor[] cons = c.getDeclaredConstructors(); for (Constructor con : cons ) {
String modifierWords = Modifier.toString(con.getModifiers()); if(modifierWords.length()>0) {
System.out.print(modifierWords+" "); } System.out.print(con.getName()+"("); Class[] css = con.getParameterTypes(); for(int i=0;i
0) System.out.print(","+css[i].getName()); else System.out.print(css[i].getName()); } System.out.println(")"+";"); } } static void printMethods(Class c) {
Method[] methods = c.getDeclaredMethods(); for(Method method : methods) {
Class[] types = method.getParameterTypes(); System.out.print(Modifier.toString(method.getModifiers())+" "+method.getReturnType().getName()+" "+method.getName()+"("); for(int i=0;i
0) System.out.print(","+types[i].getName()); else System.out.print(types[i].getName()); } System.out.println(")"+";"); } } static void printFields(Class c) {
Field[] fields = c.getFields(); for(Field field : fields) {
System.out.print(field.getType().getName()+" "+field.getName()+";"); System.out.println(); } }}

下面是结果在这里插入图片描述

在这里插入图片描述

转载地址:http://milzi.baihongyu.com/

你可能感兴趣的文章
微服务概念
查看>>
数据库分库分表
查看>>
hibernate inverse 和cascade讲解
查看>>
建模工具Rose的学习
查看>>
javascript ajax提出异步请求
查看>>
Hibernate 中的 QBC
查看>>
解快局域网共享问题
查看>>
xp常用命令
查看>>
java 加密解密
查看>>
xp 忘记密码
查看>>
xp 忘记密码
查看>>
java 过滤器
查看>>
java 过滤器
查看>>
as发送邮件
查看>>
AJAX应用之注册用户即时检测
查看>>
File 类小结
查看>>
java除去字符串空格
查看>>
jsp 2.0标记文件
查看>>
Hibernate中Criteria的完整用法
查看>>
sql jsp
查看>>