JAVA反射基础

一、反射的概述

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

 

关于java.lang.Class类的理解:

1、类的加载过程:

程序经过javac.exe命令以后,会生成一个或多个字节码文件(.Class结尾)

接着使用java.exe命令对某个字节码文件进行解释运行,相当于将某个字节码文件加载到内存中,此过程就成为类的加载,加载到内存中的类,我们称之为运行时类,此运行时类就作为一个Class的一个实例

换句话说,Class的实例就对应一个运行时类

加载到内存中的运行时类,会缓存一定的时间,在此时间之内,我们可以通过不同的方式来获取此运行时类

获取Class实例的方式:

方式一:调用运行时类的属性:.Class

Class stuClass2 = Student.class;

System.out.println(stuClass);

 

方式二:通过运行时类的对象,调用getClass

Student stu1 = new Student(); //产生一个Student对象,一个Class对象。

Class stuClass = stu1.getClass();//获取Class对象

System.out.println(stuClass);

 

方式三:调用Class的静态方法

Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是带包名的类路径,包名.类名

System.out.println(stuClass3 == stuClass2);

 

 

.newInstance():创建运行时类的对象,内部调用了运行时类的空参的构造器

 

要想此方法正常的创建运行时类的对象,要求:

  1. 运行时类必须提供空参的构造器
  2. 空参的构造器的访问权限得够,通常设置为public

 

获取属性结构:

getFields():获取当前运行时类及其父类中声明为public访问权限的属性

getDeclaredFields():获取当前运行时类中声明的所有属性

getMethods():获取当前运行时类及其所有父类中声明为public访问权限的方法

getDeclaredMethods():获取当前运行时类中声明的所有方法,

 

如何操作运行时类中的指定属性:

Class clazz = Person.class;

创建运行时类的对象

Person p = clazz.newInstance();

Field name = clazz.getDeclaredField(“name”);

保证当前属性是可以被访问的

Name.setAccessible(true);

获取,设置指定对象的此属性值

Name.set(p,”Tom”)

 

如何操作运行时类中的指定方法:(非静态)

Class clazz = Person.class;

创建运行时类的对象

Person p = clazz.newInstance();

获取指定的某个方法

Method show = clazz.getDeclaredMethod(“show”,String.class)

Show.setAccessible(true);

//invoke:参数1:方法的调用者,参数2:给方法形参赋的实参

Show.invoke(p,”CHN”);

 

如何操作运行时类中的指定方法:(静态)

Method show = clazz.getDeclaredMethod(“show”)

Show.invoke(null)

将invoke方法的第一个参数设为null即可!

 

 

获取指定的构造器:

Constructor constructor = clazz.getDeclaredConstructor(String.class)

constructor.setAccessible(true);

Person p = constructor.newInstance();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值