Java反射获取class对象方式解析
1、获取Class对象
在JavaAPI中,提供了获取Class类对象的三种方法:
第一种,使用Class.forName静态方法。
前提:已明确类的全路径名。
第二种,使用.class方法。
说明:仅适合在编译前就已经明确要操作的Class
第三种,使用类对象的getClass()方法。
适合有对象示例的情况下
User类
packagecom.reflection; /** *CreatedbyLiuxdon2018-08-15. */ publicclassUser{ privateStringname; privateIntegerage; publicUser(){ } publicUser(Stringname,Integerage){ this.name=name; this.age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicIntegergetAge(){ returnage; } publicvoidsetAge(Integerage){ this.age=age; } @Override publicStringtoString(){ return"User{"+ "name='"+name+'\''+ ",age="+age+ '}'; } }
packagecom.reflection; /** *CreatedbyLiuxdon2018-08-15. */ publicclassTestReflection{ publicstaticvoidmain(String[]args){ //第一、通过Class.forName方式 Classclazz1=null; try{ clazz1=Class.forName("com.reflection.User"); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } //第二、通过对象实例方法获取对象 Classclazz2=User.class; //第三、通过Object类的getClass方法 Useruser=newUser(); Classclazz3=user.getClass(); System.out.println(clazz1); System.out.println(clazz2); System.out.println(clazz3); } }
2、获取对象实例
共两种方法:
一、直接用字节码文件获取对应实例
//调用无参构造器,若是没有,则会报异常 Objecto=clazz.newInstance();
二、有带参数的构造函数的类,先获取到其构造对象,再通过该构造方法类获取实例:
//获取构造函数类的对象 Constroctorconstroctor=clazz.getConstructor(String.class,Integer.class); //使用构造器对象的newInstance方法初始化对象 Objectobj=constroctor.newInstance("龙哥",29);
packagecom.reflection; importjava.lang.reflect.Constructor; /** *CreatedbyLiuxdon2018-08-15. */ publicclassTestReflection{ publicstaticvoidmain(String[]args){ //第一、通过Class.forName方式 Classclazz1=null; try{ clazz1=Class.forName("com.reflection.User"); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } //第二、通过对象实例方法获取对象 Classclazz2=User.class; //第三、通过Object类的getClass方法 Useruser=newUser(); Classclazz3=user.getClass(); System.out.println(clazz1); System.out.println(clazz2); System.out.println(clazz3); Useruser1=null; try{ user1=(User)clazz1.newInstance(); }catch(InstantiationExceptione){ e.printStackTrace(); }catch(IllegalAccessExceptione){ e.printStackTrace(); } user1.setName("终结者"); user1.setAge(1500); System.out.println("user1:"+user1.toString()); Useruser2=null; try{ //获取构造函数 Constructorconstroctor=clazz2.getConstructor(String.class,Integer.class); //通过构造器对象的newInstance方法进行对象的初始化 user2=(User)constroctor.newInstance("龙哥",29); }catch(Exceptione){ e.printStackTrace(); } System.out.println("user2:"+user2.toString()); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。