java技术o6c_JAVA-反射技术

一、技术总结:

1、获得类:

(1)Class c=Class.forName("classname");

(2)Class c=classname.Class;

(3)classname cn=new classname();

Class c=cn.getClass();

2、获得构造函数:

(1)获得所有构造函数:

Constructor[] con=c.getConstructors();//只包含公共的

Constructor[] con=c.getDeclaredConstructors();//包含所有,包括私有

(2)获得具体构造函数:

Constructor con=c.getDeclaredConstructor(String.class,int.class);//包含私有

Constructor con=c.getConstructor(String.class,int.class);//只包含公共

(3)实例化构造函数

Object o=con.newInstance("java",5);//实例化有参构造

Object o=c.newInstance();//实例化无参构造

3、获得属性:

(1)获得所有属性

Field[] fs=c.getFields();//只包含公共(本类及其父类的)

Field[] fs=v.getDeclaredFields();包含所有

(2)获得指定属性

Field f=c.getField("fieldname");//获得公共的属性名为fieldname的属性,包括其父类

Field f=c.getDeclaredField("fieldname");//获得当前类属性名为fieldname的属性

f.setAccessible(true);//打破封装,获得private的属性

(3)设置属性

Object o=c.newInstance();

f.set(o,12);//设置c类中属性f的值为12;

4、获得方法

(1)获得所有方法列表

Method[] ms=c.getMethods();//获得当前类及其父类所有public方法

Method[] m=c.getDeclaredMethods();//获得当前类所有方法

(2)获得指定方法

Method m=c.getMethod("method",String.class);//获得public类名为method,参数为String的方法

Method m=c.getDeclaredMethod("method",String.class);//获得类名为method,参数为string的方法,修饰符不限

(3)调用方法

Object o=c.newInstance();

m.invoke(o,"java");//调用类c中的方法m,传参String为java。

5、获取父类和父接口

Class c=Class.forName("classname");

Class superclass=c.getSuperClass();//获取父类

Class[] superInterface=c.getInterfaces();//获取父接口

6、获取修饰符Mofifier.toString(c.getModifier());

二、涉及英文单词

constructor 构造函数

method 方法

invoke 调用

parameter 参数

declared 公然的 公开宣布的

field 领域(属性)

accessible 易接近的,可进入的

modifier 修饰语

三、个人见解

首先,在我看来,反射技术在java中代替了直接引用类的功能,可以通过反射技术做到引用类,获取属性、构造方法、函数的所有功能,同时可以更灵活的扩展,包括动态的获取类,而不是后期直接修改class文件,而是修改配置文件,使得面向对象更加强大、可用。但是同时要面临的问题是反射技术的使用使得代码变得模糊,不容易被理解,并且使用反射技术获取类要比直接引用类要慢十多倍,因此不到万不得已不能直接使用类。

在实际编码中,反射技术在ssh中使用较多,因此在平时训练的时候可以多使用反射技术,在熟悉反射技术代码、原理的同时为未来框架做准备。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值