java反射之创建实例

为了做到使得程序具有更高的灵活性,可配置性,在开发中我们经常利用反射来创建一个类的实例,也就是获得一个类的一个对象!通常的做法是通过class.newInstance获得;但这种方法有一个不好的地方,那就是他只能创建无参构造器的对象,如果构造器有参数那它是无能为力的;解决的方法就是 先通过该类的Class获得带有参数的构造器,然后通过得到的构造器和传如的初始化参数来创建实例!以下是上述做法的一个demo:

实体类:

  1. packagereflect;
  2. publicclassDuck{
  3. privateIntegerweight;
  4. privateStringname;
  5. publicDuck(){
  6. System.out.println("无参调用了");
  7. }
  8. publicDuck(Stringname){
  9. name=name;
  10. System.out.println("one参调用了");
  11. }
  12. publicDuck(Stringname,Integerweight){
  13. name=name;
  14. weight=weight;
  15. System.out.println("Two参调用了");
  16. }
  17. }

  1. packagereflect;
  2. importjava.lang.reflect.Constructor;
  3. importjava.lang.reflect.InvocationTargetException;
  4. publicclassExeTest{
  5. publicstaticvoidmain(String[]args){
  6. <SPANstyle="COLOR:#000000">Classcls=Duck.class;</SPAN>
  7. Classconargs[]={String.class,Integer.class};
  8. try{
  9. <SPANstyle="COLOR:#000000">Constructorconstructor=cls.getConstructor(conargs);</SPAN>
  10. Stringname="abc";
  11. Integerweight=newInteger(1056);
  12. Objectinitargs[]={name,weight};
  13. <SPANstyle="COLOR:#000000">constructor.newInstance(initargs);</SPAN>
  14. }catch(SecurityExceptione){
  15. e.printStackTrace();
  16. }catch(NoSuchMethodExceptione){
  17. e.printStackTrace();
  18. }catch(IllegalArgumentExceptione){
  19. //TODOAuto-generatedcatchblock
  20. e.printStackTrace();
  21. }catch(InstantiationExceptione){
  22. //TODOAuto-generatedcatchblock
  23. e.printStackTrace();
  24. }catch(IllegalAccessExceptione){
  25. //TODOAuto-generatedcatchblock
  26. e.printStackTrace();
  27. }catch(InvocationTargetExceptione){
  28. //TODOAuto-generatedcatchblock
  29. e.printStackTrace();
  30. }
  31. }
  32. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值