Java的反射机制

一.何为反射

反射就是动态加载对象,并对对象进行剖析。在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象方法的功能成为Java反射机制。

二.获得一个类的类对象有哪些方式?

1Class.forName(classname):用于做类加载

//根据给定的类名来获得,用于类加载

String classname = "com.luo.reflect.Person";      //来自配置文件

Class clazz1 = Class.forName(classname);         //此对象代表Person.class

 2)对象.getClass():用于获得对象的类型

//如果拿到了对象,不知道是什么类型,用于获得对象的类型

Object obj = new Person();

Class clazz2 = obj.getClass();                     //获得对象具体的类型

  3)类名.class:用于获得指定的类型,传参用

//如果是明确地获得某个类的Class对象,主要用于传参

Class clazz3 = Person.class;

三.如何通过反射创建对象?

1)调用空参数的构造函数:使用了Class类中的newInstance()方法。

//第一步:获取字节码文件
//①通过 Class.forName(“类名”)来获取字节码文件
Class clazz = Class.forName("com.luo.reflect.Person");
//②通过 类.class  通过加载器来获取字节码文件
clazz = Person.class;
//③通过 对象.getClass() 来获取字节码文件
Object obj = new Person("zhangsan", 19);
clazz = obj.getClass();
//第二步:通过节码文件,创建对象
Object obj = clazz.newInstance();
//该实例化对象的方法调用就是指定类中的空参数构造函数,给创建对象进行初始化。

2)调用带参数的构造函数:先要获取指定参数列表的构造器,然后通过该构造函数的对象的newInstance(实际参数)进行对象的初始化。

public static void method_2() throws Exception {
    //既然类中没有空参数的构造函数,那么只有获取指定参数的构造函数,用该函数来进行实例化。
    Class clazz = Class.forName("com.luo.reflect.Person");
    //获取一个带参数的构造器。
    Constructor constructor = clazz.getConstructor(String.class,int.class);
    //想要对对象进行初始化,使用构造器的方法newInstance();
    Object obj = constructor.newInstance("zhagnsan",30);
    //获取所有构造器。
    Constructor[ ] constructors = clazz.getConstructors();    //只包含公共的
    //constructors = clazz.getDeclaredConstructors();       //本类公有,包含私有的
    for(Constructor con : constructors) {
        System.out.println(con);
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值