java getinstance 反射_【反射】Java反射机制

Class

1、Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method,描述字段的Filed,描述构造器的Constructor等属性

2、对象照镜子后(反射)可以得到的信息:某个类的数据成员名、方法和构造器、某个类到底实现了哪些接口。

3、对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象。

一个 Class 对象包含了特定某个类的有关信息。

4、Class 对象只能由系统建立对象

5、一个类在 JVM 中只会有一个Class实例

反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化对象,但是“反”指的是通过对象找到类。

packagereflection_demo1;classPerson {}public classDemo{public static voidmain(String[] args) {

Person per= new Person() ; //正着操作

System.out.println(per.getClass().getName()); //反着来 输出: reflection_demo1.Person

}

}

以上的代码使用了一个getClass()方法,而后就可以得到对象所在的“包.类”名称,这就属于“反”了,但是在这个“反”的操作之中有一个getClass()就作为发起一切反射操作的开端。

Person的父类是Object类,而上面所使用getClass()方法就是Object类之中所定义的方法。

·取得Class对象:public final Class> getClass(),反射之中的所有泛型都定义为?,返回值都是Object。

而这个getClass()方法返回的对象是Class类的对象,所以这个Class类就是所有反射操作的源头。但是在讲解其真正使用之前还有一个需要先解释的问题,既然Class是所有反射操作的源头,那么这个类肯定是最为重要的,而如果要想取得这个类的实例化对象,Java中定义了三种方式:

一 获取Class类的实例化对象

方式一:通过Object类的getClass()方法取得,基本不用:

packagereflection_demo1;classPerson {}public classDemo{public static voidmain(String[] args) {

Person per= new Person() ; //正着操作

Class> cls = per.getClass() ; //反着来 取得Class对象

System.out.println(cls.getName());

}

}

方式二:使用“类.class”取得

packagereflection_demo1;classPerson {}public classDemo{public static voidmain(String[] args) {

Class> cls = Person.class; //反着来 取得Class对象

System.out.println(cls.getName());

}

}

方式三:使用Class类内部定义的一个static方法,主要使用

·取得Class类对象:public static Class>  forName(String className)  throws ClassNotFoundException;

packagereflection_demo1;classPerson {}public classDemo{public static void main(String[] args) throwsException {

Class> cls = Class.forName("reflection_demo1.Person") ; //反着来 取得Class对象

System.out.println(cls.getName());

}

}

二 通过反射实例化对象

那么现在一个新的问题又来了,取得了Class类的对象有什么用处呢?对于对象的实例化操作之前一直依靠构造方法和关键字new完成,可是有了Class类对象之后,现在又提供了另外一种对象的实例化方法:

通过反射实例化对象:public T newInstance() throws InstantiationException, IllegalAccessException;

范例:通过反射实例化对象

packagereflection_demo1;classPerson {

@OverridepublicString toString() {return"Person Class Instance.";

}

}public classDemo{public static void main(String[] args) throwsException {

Class> cls = Class.forName("reflection_demo1.Person") ; //取得Class对象

Object obj = cls.newInstanc

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值