当前位置: 首页 > 科技观察

Java反射机制或成涨薪关键!

时间:2023-03-15 21:11:12 科技观察

Java核心反射机制基础反射反射是一种动态类处理机制,通过Class类实现反射机制;Class类的基本信息:Modulejava.basePackagejava.langClassClassjava.lang.Objectjava.lang.Class下面三种方式获取类的反射,三个都很重要,牢牢掌握。1.使用Object类中提供的getClass()方法获取实例化对象Membermember=newMember();//实例化Member类对象Classclazz=member.getClass();//获取Class类实例化对象System.out.println(clazz);}}二、使用“class.class”形式的classMember{}publicclassJavaReflectDemo{publicstaticvoidmain(String[]args)throwsException{//【操作特点】可以直接通过一个类的全名,需要写import或者写全类名Classclazz=Member.class;//获取Class类的实例化对象System.out.println(clazz);}}3.使用Class类内部提供的forName()方法根据类全名获取实例化对象通过名称字符串(package.class),您可以在不使用im的情况下导入port//获取Class类实例化对象Classclazz=Class.forName("cn.xbhog.demo.Member");System.out.println(clazz);}}反射获取实例化对象包com.xbhog.反射机制;classMember{publicMember(){//构造方法System.out。println("【构造方法】实例化Member类对象。");}@OverridepublicStringtoString(){return"[toString()override]博客地址:http://www.cnblogs.com/xbhog";}}publicclassreflectiongetobject{publicstaticvoidmain(String[]args)throwsException{//getClass实例化对象Classclazz=Class.forName("com.xbhog.Reflectionmechanism.Member");//反射机制可以获得任意类的实例化对象(相当于关键字“new”),所以返回类型为ObjectObjectobj=clazz.getDeclaredConstructor().newInstance();//实例化对象System.out.println(obj);}}反射机制可以更方便开发者实现解耦和设计;在反射机制下可以实现反射和类操作自动获取和调用任何类中的组成结构(成员属性、方法),使代码编写更加灵活反射获取类结构包com.xbhog。反射机制;interfaceIMessage{publicvoidsend();}interfaceIChannelService{publicBooleanconnect();}abstractclassAbstractBase{}publicclassMailextendsAbstractBaseimplementsIMessage,IChannelService{@Overridepublicvoidsend(){if(this.connect()){System.out.println("发送消息成功");}}@OverridepublicBooleanconnect(){returntrue;}}packagecom.xbhog.反射机制;publicclassMailTest{publicstaticvoidmain(String[]args){ClassaClass=Mail.class;System.out.println(aClass.getPackage());//获取类的包名Classsuperclass=aClass.getSuperclass();//获取父类对象信息System.out.println(superclass.getName());//获取父类的名称System.out.println(superclass.getSuperclass().getName());//获取父类的父类名称/*获取接口信息*/Class[]接口=类。getInterfaces();for(ClassanInterface:interfaces){System.out.println(anInterface.getName());}}}反射调用构造方法反射也可以调用构造方法,构造方法很重要类部分中的组件,以及实例化对象时必须调用的方法。示例:importjava.lang.reflect.Constructor;classMail{privateStringmsg;publicMail(){}//无参数构造publicMail(Stringmsg){//单参数构造System.out.println([构造方法]调用Mail类单参数构造方法,实例化对象");this.msg=msg;}@OverridepublicStringtoString(){//对象信息返回"[toString()override]messagecontent:"+this.msg;}}publicclassJavaReflectDemo{publicstaticvoidmain(String[]args)throwsException{Classcls=Mail.class;//获取指定类的Class对象Constructor[]constructors=cls.getDeclaredConstructors();//获取所有结构体for(Constructorcons:constructors){System.out.println(cons);}//获取参数类型为StringConstructorcons=cls.getDeclaredConstructor(String.class);Objectobj=cons.newInstance("www.cnblog.cn/xbhog");//调用单参数构造实例化对象System.out.println(obj);}}反射调用方法一n除了获取类中的方法定义外,反射机制中最重要的作用是利用Method类中的invoke()方法,结合实例化对象(Object类型即可)实现辐射调用.反射调用类中的setter和getter方法[key]packagecom.xbhog.reflectionmechanism.method;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;classMember{privateStringname;publicvoidsetName(Stringname){this.name=name;}publicStringgetName(){returnthis.name;}}publicclassgetter_Setter{publicstaticvoidmain(String[]args)throwsNoSuchMethodException,InvocationTargetException,InstantiationException,IllegalAccessException{Classcls=Member.class;Stringvalue="xbhog";//实例化成员objectObjectobj=cls.getDeclaredConstructor().newInstance();//反射调用方法需要明确知道方法名和方法中的参数类型StringsetMethodName="setName";Methodsetmethod=cls.getDeclaredMethod(setMethodName,String.class);//获取指定方法setmethod.invoke(obj,value);//Object.setName(value)StringgetMethodName="getName";MethodgetMethod=cls.getDeclaredMethod(getMethodName);//get没有参数System.out.println(getMethod.invoke(obj));//Object.getName();}}辐射实现的方法调用最大的特点是可以直接使用Object类型的实例化对象来调用,但是需要明确获取对象时已知方法名和方法的参数类型。Field类的作用在实际开发中,Field中的getType()方法用的比较多,通过它可以判断属性的类型。示例:importjava.lang.reflect.Field;classMember{privateStringname;publicvoidsetName(Stringname){this.name=name;}publicStringgetName(){returnthis.name;}}publicclassFIeldDemo{publicstaticvoidmain(String[]args)throwsException{//获取成员类Classcls=Member.class;//实例化Objectobj=cls.getDeclaredConstructor(.newInstance();//成员属性名称的类型Fieldname=cls.getDeclaredField("name");//获取详细信息System.out.println(name.getType().getName());//获取简要信息System.out.println(name.getType().getSimpleName());}}结果:java.lang.StringString

最新推荐
猜你喜欢