黑马程序员--java高新技术--反射(一)

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流>-----

反射(一)

1.      反射概念

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

简而言之:反射就是把Java类中的各种成分映射成相应的java类。

2.     Class类

(1)Class类:Java程序中的各个Java类属于同一类事物,描述这类事物的Java类就是Class类。

对比理解:  人   Peoson      -----------  Java类    Class

一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的。一个类在虚拟机中只有一份字节码。

Class类的实例对象是各个类在内存中的字节码。比如Peoson类的字节码,Integer类的字节码,String类的字节码等等均是它的实例对象。

(2)获取Class实例对象的三种方式:

方式一:通过对象的getClass()方法进行获取。

       如:Classclazz=new Person().getClass();//Person是一个类名

       麻烦之处:每次都需要具体的类和该类的对象,以及调用getClass方法。

方式二:任何数据类型都具备着一个静态的属性class,这个属性直接获取到该类型的对应Class对象。

       如:Classclazz=Person.class;//Person是一个类名

       比第一种较为简单,不用创建对象,不用调用getClass方法,但是还是要使用具体的类,和该类中的一个静态属性class完成。

方式三:这种方式较为简单,只要知道类的名称即可。不需要使用该类,也不需要去调用具体的属性和行为。就可以获取到Class对象了。

       如:Classclazz=Class.forName("包名.Person");//Person是一个类名

       这种方式仅知道类名就可以获取到该类字节码对象的方式,更有利于扩展。

该方法最为常用。

(3)九个预定义的Class:

   <1>包括八种基本类型(byte、short、int、long、float、double、char、boolean)的字节码对象和一种返回值为void类型的void.class。

   <2>Integer.TYPE是Integer类的一个常量,它代表此包装类型包装的基本类型的字节码,所以和int.class是相等的。基本数据类型的字节码都可以用与之对应的包装类中的TYPE常量表示。

3.Class类中的构造方法Constructor类、字段Field类、方法Method类

(1)     Constructor 类

Constructor类用于描述类中的构造方法:

Constructor getConstructor(Class... parameterTypes) 

返回该Class对象表示类的指定的public构造方法; 

Constructor[] getConstructors()

返回该Class对象表示类的所有public构造方法; 

Constructor getDeclaredConstructor(Class... parameterTypes)

返回该Class对象表示类的指定的构造方法,和访问权限无关;

Constructor[] getDeclaredConstructors() 

返回该Class对象表示类的所有构造方法,和访问权限无关;

 

(2)     Field类

FieldgetField(String name)

 返回一个Field对象,它表示此Class对象所代表的类或接口的指定公共成员字段。

Field[]getFields()

  返回包含某些Field对象的数组,表示所代表类中的成员字段。

 

(3)     Method类

Method类用于描述类中的方法:

Method getMethod(String name, Class ... parameterTypes) 

返回该Class对象表示类和其父类的指定的public方法; 

Method[] getMethods():  

返回该Class对象表示类和其父类的所有public方法; 

Method getDeclaredMethod(String name, Class... parameterTypes) 

返回该Class对象表示类的指定的方法。和访问权限无关,但不包括继承的方法;

Method[] getDeclaredMethods(): 获得类所有的方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法;

 

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值