java反射机制

                                    java反射机制


1.什么是反射?

       可以在运行时,获取任意类信息的机制

-------------------------------------------------------------------------------

2.反射的作用:

  a.动态构造对象;
  b.动态调用类和对象的任意方法、构造器;
  c.动态调用和处理属性;
  d.动态获取泛型信息;
  e.处理注解;
---------------------------------------------------------------------------------------

3.常用反射方法:

  1.Class.forName();
  2.getClass();
  3.类名.class

 String path="java.util.student";
  eg. Class  c2=Class.forName(path);
      Class  c1=String.class;
      c1与c2是相同的
*********************************************************************
附加类:(在包java.util.student)
  publc class student{
      private int id;
      private String name;
      private HashMap<int> students=new HashMap<>();
 
      public student(){}
    
      public student(int id,String name){
          this.id=id;
          this.name=name;
          students.put(name,int);
           
      }
      public void print(){
          System.out.printin("haha");
      }
      public void set(int id,String name){
          this.id=id;
          this.name=name;
          students.put(name,int);
      }
      public int getId(String name){
          return students.get(name);
      }


  }
   
*********************************************************************
---------------------------------------------------------------------------------------
5.相关方法:
  Class  c2=Class.forName(path);

 a.属性获取:
  Field[] pFields=c2.getFileds();
  Field[] Fields=c2.getDeclaredFields();
  pFields与Fields的区别在:
  Fields 获取该类下的所有属性;
  而pFields只能获取public 修饰的属性;

 b.方法获取:
   我们来获取其方法
   Method[] m=c2.getDeclaredMethods();
   或者直接获取:
   Method m1=c2.getDeclaredMethod("print",null);后面这个参数为方法参数类型区别重载的
   Method m2=c2.getDeclaredMethod("getId",String.calss);

 c.构造器获取:
   Constructor[] constructors=c2.getDeclaredConstructors();
   for(Constructor tmp:Constructor){````}
   Constructor constructor=c2.getDeclaredConstructor(int.calss,String.class);
-------------------------------------------------------------------------------------
6.动态调用:
   a.动态掉用构造器创建对象:
     haha s=c2.newInstance();(但是这个方法只能调用无参构造器)
     有参构造:
     Constructor<haha> constructor=c2.getDeclaredConstructor(int.class,String.class);
     haha s1=m2.newInstance(100,"xixi");
   
   b.动态调用方法:
     String s=c2.newInstance();
     Method m=c2.getDeclaredMethod("set",int.calss,String.class);
     m.invoke(s,"250","enen");
----------------------------------------------------------------------------------
7.反射性能优化:(这个逼近我也没用过,自己百度)
  setAccessible();  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值