JAVA基础加强:反射

本文深入探讨Java中的反射机制,包括Class类的获取方法、类型判断、构造方法的应用、成员变量和成员方法的反射操作。详细解释了如何通过反射API获取和操作类、对象及其成员。


1.Class的获取方法

万物皆对象,Class类表示一个类对应的字节码文件,一般有三种方法来获得,

例: String str= “abc”;

 Class clas1= str.getclass();

Class clas2 = String.class;

Class clas3 =Class.forName(“java.lang.String”);

System.out.println(clas1==clas2);

//结果为true;

System.out.println(clas1==clas3);

//结果为true,说明这三个类是一样的

Java中默认有9个Class类即8个数据类型加上void对应的字节码文件。

2.Class类的类型判断方法

(1)isPrimitive()判断是否是基本数据类型的字节码文件

Int.class.isPrimitive()//结果为true

String.class.isPtrimitive()//结果为false,因为String不是基本数据类型

Int.class== Integer.class//false ,各有各的对应字节码文件,但如果Integer包装一个基本数据又不一样了例如:int.class== Integer.TYPE结果为true

(2)isArray()                                                                                                                                                                  

判断是否是数组类型的Class实例对象

Int[].class.isArray() //结果为true

 

3.什么是反射

反射是把java类中的各种成分映射成相应的java类。一个类中的每个成员都可以用相应的反射API类的一个实例对象来表示,通过调用Class类的方法可以得到这些实例对象。

 

4.构造方法的反射应用

         Constructor类代表某个类中的一个构造方法:

得到String类的所有构造方法

         Constructor[]  constructors= Class.forName(“java.lang.String”).getConstructors();

得到String类的某一个构造方法:

Constructor constructor = Class.forName(“java.lang.String”).getConstructor(StringBuffer.class);

通过构造方法来获取类:通过字节码文件的newinstance(构造方法的参数)

Object obj= Constructor.newinstance(newStringBuffer(“abc”))

注意是object类型

 

5.成员变量的反射

Filed类代表某一个类的一个成员变量

Class Reflect {

private int x; public int y;

public Reflect(int x,int y ){this.x=x;this.y=y;}

}

Class Text{

public static void mian(String[] args){

Reflect rf= new Reflect(3,5);

Field fieldY= rf.getClass().getField(“y”);

//fieldY的值不为5,它仅仅代表y不代表类上变量的值

fieldY.get(rf)//结果是5

如果取私有的,则

Field fieldX = rf.getClass().getDeclaredField(“x”);

仅仅使其可见,但不能用,要通过暴力反射是由

FieldX.setAccessible(true);

FieldX.get(rf) 此时,私有的x的值可以被访问,结果为3

}

 

6.成员方法的反射

Method类代表某个类的一个成员方法

得到类中的一个方法

 Method method = Class.forName(“java.lang.String”).getMethod(“method”,参数列表)

使用方法 method.invoke(Object obj,参数列表);

如果obj处被null代替说明该方法是静态的,不需要通过对象直接调用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值