黑马程序员------反射技术Constructor,Field,Method

------- <a href="http://www.itheima.com"target="blank">android培训</a>、<a href="http://www.itheima.com"target="blank">java培训</a>、期待与您交流! ----------


反射技术可以动态的获取类以及类中的成员,并可以调用该类的成员。

以前是有什么类就可以new什么对象,(利用反射技术可以)没有类,给什么类就new什么对象。

所以在反射技术中,最重要的就是先获取到那个类,那么如何获取类?

无论new什么对象,都要先获取字节码文件(xx.class

Java已对字节码文件进行了描述用的是:Class

 

字节码文件里都有:

名字

构造函数

属性(字段)

方法

获取以上内容的方式:getName();getFiled();getMethod();getConstrutor()

描述字节码文件的类Class

class Class

{string name;

constructor

filed

method

getName();getFiled();getMethod();getConstrutor()

}

每一个class文件都可以生成一个Class对象---------比如:小明是个实体,Demo.class也是个实体,那么想要操作Demo.class文件中的内容,只要拿到Demo.class文件的Class对象

接下来,如何获取一个字节码文件的对象?方式有3

1.    Object  getClass()方法:

Person p = new Person();//调用getClass先有对象

Class cla = p.getClass();



注:在反射技术里,该方法不合适,因为反射技术不明确具体类

2.所有的数据类型都有自己对应的Class对象,表示方式很简单,每一个数据类型都有一个默认的静态属性。 .class  用该属性就可以获取到字节码文件对象。

Person.class代表Person类型Class对象

 

这种方式虽然不用对象调用,但还是要用具体的类调用静态属性

3重点,反射技术里最常用的方法

查阅API文档Class,找到forName方法,通过名称就可以获取对应的字节码文件对象。

 

String className = "cn.itcast.domain.Person";//名称要写全


(上面那个错误一定要避免

这样写全,就会在classpath下找对应的类文件,找到成功,没找到就报异常)


Class cla = Class.forName(className);这一步加载完,Person类在内存中产生,并

封装成Class对象



反射用法

反射技术-动态的创建实例对象


下面,如何根据给定名称获取到指定的Class对象后(上面已完成) 建立该类的对象?

一.Object obj = clazz.newInstance();//创建一个Person对象,默认调用该类的空参构造函数

二.当给定类中没有空参构造函数时,可以先获取指定的构造函数,并再通过该构造函数进行实例化

步骤如下:

1.    通过ClassgetConstructor(与之对应的参数类型对象)方法获取指定构造函数,比如带两个参数的

如:Constructor cons = clazz.getConstructor(String.class,int.class)

2.通过指定的构造器对象进行对象的实例化

Object obj = cons.newInstance(“xiaoming”,20);


反射技术-动态获取字段(Field)以及暴力反射

获取类的成员:

比如:getDeclaredField(String name)



08-反射技术-动态获取方法(Method

获取定义的无参函数例子:



获取定义的静态的无参函数例子:



获取定义的带参数的,非静态的例子:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值