黑马程序员_反射

------- 物联云培训java培训、期待与您交流! ----------

1.Class

   概述:实际上就是管理java类的,比如说管理人的用Person类,那么管理类的就是用的是Class类。

2.创建对象和使用

    因为Class类中没有构造方法,不能创建对象,但是每一个java类都会产生一个字节码对象,它会将字节码对象赋给Class变量。例如:String,Math,Date等等这些类都会产生一个个的字节码,他们就对应着一个个的Class类对象,只要拿到的这些类的字节码就可以对这个类进行操作了。

     拿到字节码有三种方式:

      第一种:Class clazz=Class.forName(“java.lang.String”);

      第二种:Class clazz=new String().getClass();

      第三种:Class clazz=String.class.

3.预定义的Class

  包括八种基本类型: (byte、short、int、long、float、double、char、boolean)
     的字节码对象和一种返回值为void类型的void.class。

4.基本数据类型的字节码都可以用与之对应的包装类中的TYPE常量表示

Integer.TYPE是Integer类的一个常量,它代表此包装类型包装的基本类型的字节码,所以和int.class是相等的。

    假如有一个类为Person类。

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
importjava.lang.reflect.Method;
import java.util.Arrays;
public class ReflectTest {
   /**
    * @param args
    */
   public static void main(String[] args)throws Exception {
      // TODOAuto-generated method stub
      Person person=new Person("lichaoaidaiwenjuan",100);
//    Fieldfield=Class.forName("javaday01.Person").getField("name");         //反射一个成员变量
//    System.out.println(field.get(person));
     
      /*//反射有参的构造函数
       *Constructor contructor=Class.forName("javaday01.Person").getConstructor(String.class,int.class);
      Person s=(Person)contructor.newInstance("lisi",4);
     
      //反射无参的构造函数
      Constructorconstructor=Class.forName("javaday01.Person").getConstructor(null);
      Personper=(Person)constructor.newInstance(null);*/
     
      /*//反射一个有参的成员函数
       *Methodmethod=Class.forName("javaday01.Person").getMethod("setName",String.class);
      method.invoke(person, "daiwenjuanailichao");*/
     
      /*//反射一个无参的成员函数
       *Method method=Class.forName("javaday01.Person").getMethod("getName",null);
      System.out.println((String)method.invoke(person,null));
*/   
      /*//反射全部成员函数
      Method[]method=Class.forName("javaday01.Person").getMethods();
      for(Method me:method){
         if((String)me.getName()=="getName"){
            System.out.println(me.invoke(person,null));
         }
      }*/
     
      //Arraysarrays=Class.forName("javaday01.Person").get("number");
   /*//反射全部成员变量
    *Field[] field1=Class.forName("javaday01.Person").getFields();
      for(Field f:field1){
         System.out.print(f.getName()+":");
         System.out.println(f.get(person));
      }
      */
      String str=args[0];
      Method method=Class.forName("javaday01.inner").getMethod("main", String[].class);
      method.invoke(null,(Object)new String[]{"daiwenjuan","ai","lichao"});
}
}
class inner{
   public static void main(String[] args){
      for(String str:args){
       System.out.println(str);
      }
   }
}
总结:反射就是将类中各个部分变化成相应的类对象。

   

------- 物联云培训java培训、期待与您交流! ----------  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值