首页 > 编程知识 正文

第一信号反射和第二信号反射,反射获取class对象的三种方法

时间:2023-05-04 02:08:38 阅读:162685 作者:2814

第十二章反射与反思课程纲要

1、什么是反射

2、类类

3、按类获取类信息

4、从Class类中调用属性或方法

5、动态代理

六、JavaBean概念

7、反思的基本概念

8、Introspector相关API

9、单模优化

1、什么是反射反射: Reflection

2、类Class是所有反射的根源。

Class类表示什么?

很多人——可以定义波斯顿类(有年龄、性别、名字等) )。

许多车——可以定义Car类(有发动机、颜色、车轮等) )。

许多类——Class类(类名、生成方法、属性、方法) )。

可以通过以下三种方法获得Class类的对象:

第一种格式是Object类的getClass ()方法

第二种形式:类. class

第三种形式:基于Class类的forName方法

使用Class类进行对象的实例化操作

调用无参数结构实例化

publictnewinstance (throwsinstantiationexception,IllegalAccessException )

调用带参数的结构进行实例化

公共构造器? [] getConstructors () throws SecurityException

package com.vince; import org.junit.Test; import Java.lang.reflect.constructor; import java.lang.reflect.Field; import Java.lang.reflect.invocationtargetexception; import Java.lang.reflect.modifier; public Class ReflectionDemo { /*是class对象的三种格式*/@Test public void test1 ()//对象的getClass )方法dogdog=newdog //类. class Class dogClass=Dog.class; Class.forName方法try { class a classs=class.forname (' com.Vince.dog ' ); }catch(classnotfoundexceptione ) { e.printStackTrace ); }/*通过反射实例化对象*/public void test2({ classdogclass=dog.class; 用try//class对象实例化对象,并使用缺省的无参数构造方法Dog dog=(Dog ) dogClass.newInstance (; }扫描(instantiationexceptione ) { e.printStackTrace ); }catch(illegalaccessexceptione ) { e.printStackTrace ); } } @Test public void test3() { Class dogClass=Dog.class; constructor [ ] constructors=dog class.get constructors (; for(intI=0; i constructors.length; I ) system.out.println (constructors [ I ].getname (); system.out.println (constructors [ I ].getparameter count () ); } try { //指定的生成方法constructor constructor=dog class.get constructor (string.class,int.class ); //调用带参数的构造函数来调用对象Dog dog=(Dog ) constructor.newInstance ('娇惯歌曲',7 ); }扫描(instantiationexceptione ) { e.printStackTrace ); }catch(illegalaccessexceptione ) { e.printStackTrace ); } catch (不相关任务跟踪) { e.printStackTrace ); }catch(nosuchmethodexceptione ) { e.printStackTrace ); } } @Test public void test4() { Class dogClass=Dog.class; //属性field field [ ] fields=dog class.get fields (; //专用属性不可打印//system.out.println (fields.length ); //因为取得了所以有属性。 私有属性field [ ] declared fields=dog class.getdeclaredfields (; //system.out.println (declared fields.length ); for(intI=0; i declaredFields.length; I ) int modifiers=declared fields [ I ].get modifiers (; system.out.println (modifier.tostring (modifiers (' declared fields [ I ].getname ) ); } }}class Dog{ private String name; 私有输入; 公共字符串属性; 公共字符串获取名称() { return name; }publicvoidsetname(stringname ) { this.name=name; } public int getAge () { return age; }publicvoidsetage(intage ) { this.age=age; }publicdog(stringname,int age ) { this.name=name; this.age=age; } @Override public String toString () return'dog ) ' ' name=''name'",age=' age '} ' ); }} test3:

com.vince.Dog

2

test4:

private name

权限页面

公共主题

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。