java反射class文件_Java反射(一)Class

Java的反射应该算Java最灵活的一部分,反射机制是站在更高层次的抽象上,把Java中的类、方法、构造器、成员变量、接口等又抽象成了一个个类。先说说反射的基石Class类吧。

Class类的实例表示一个Java类在内存中的一段字节码。Java程序运行时要用到某类时一定要先将其类对应的class文件的字节码加载到内存中才能使用,而一个Class类的实例正是代表这些内容。

Class类没有公有构造方法,所以不可能用new来得到Class的实例,一般Class是首次调用该类时由JVM构造的,我们在程序中想要得到某类的class实例有下面三种方法:

Class claz1=Client.class;

Client client=new Client();

Class claz2=client.getClass();

try {

Class claz3=Class.forName("com.lttclaw.client.Client");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}前两种方法比较明白,但这两种方法要求该类必须已经编写了并在工程下面,第三种方法就要灵活的多,它允许我们用类的全名来获得class实例。

class的实例有很多有用的方法,我简单罗列一些:

getClasses()返回的是这个类的所有的public修饰的内部类和接口构成的Class数组

getConstructor(Class>... paramType) 这个比较有意思,是返回以参数列表类型一致的那一个public修饰的构造器,后面会单独说说这个Constructor

getConstructors()返回一个public修饰的Constructor数组,包含类的全部构造器

getField(String name)返回一个public修饰的成员变量,方法名为name

getFields()返回一个Field数组,包含public修饰的所有成员变量

getMethod(String name,Class> paramType)返回一个public 修饰的方法,此方法名为name,参数列表类型为paramType

getMethods()返回一个Method数组,包含此类所有的public方法

以上方法还有一套getDeclaredXXX表示那些不是public的也会被包含进来

getName()返回类的完整名,包含包名

getSimpleName()返回类的名称,不包含包名

newInstance()这个就是用这个类的不带参数的构造方法构造出一个类的实例

Class类里面值得一提的是有九种基本类型,其实就是八种基本数据类型boolean,byte,char,short,int,long,float, anddouble外加一个void,要判断是否是基本类型可以用isPrimitive(),基本类型都有其对应的包装类型,在这些包装类型里都有个常量对应其基本类型的class,即Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE。基本类型用getName()得到名字时是一个单字母——

boolean

Z

byte

B

char

C

class or interface

Lclassname;

double

D

float

F

int

I

long

J

short

S

还有一个有意思的类型是数组类型,判断类是不是数组类型可以用isArray(),数组类型的类用getName()时返回名字是[类名,举几个API上的例子:

(new Object[3]).getClass().getName()

returns "[Ljava.lang.Object;"

(new int[3][4][5][6][7][8][9]).getClass().getName()

returns "[[[[[[[I"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值