java—反射之Class对象的三种获取⽅式,通过反射创建类的实例化对象(⼀)对反射的认识
反射:对对象的反向处理,通过对象获取对象的来源信息(即可以知道这个对象是通过什么类型实例化出来的)。
通过对象获取创建对象的类型信息。
对类型(类)的⼀个抽象,就是JDK中的Class类;
Class也是⼀个类,⽤来描述其他类的信息。
(⼆)Class对象的三种获取⽅式
Class类的对象⽆法实例化,其构造⽅法是私有的。
序号⽅式
1通过对象的getClass()⽅法获取Class对象。
2通过类名.class 获取Class对象。
3通过Class.forname(“全限定类名”)。
Class的三种实例化对象的具体使⽤:
package www.fanfan;
import java.util.Date;
public class TestReflect {
public static void main(String[] args){
//1. 通过对象.getClass()⽅法获取Class对象
//通过date对象获取到创建date对象的类的对象
//Class 类下的对象
//java.util.Date->Class 对象,描述Date这个类
Date date =new Date();
Class classd = Class();
System.out.println(classd);
//2. 通过类名.class获取Class对象
Class classd1 = Date.class;
System.out.println(classd1);
//3. 通过Class.forname(“全限定类名”)
//类的名称:全限定名称
//需要捕获异常
try{
Class classd2 = Class.forName("java.util.Date");
System.out.println(classd2);
}catch(ClassNotFoundException e){
e.printStackTrace();
}
}
}
注意:
Class创建的针对某⼀种类型的描述的对象 都相等。因为对于同⼀个类型,虽然其Class对象的获取⽅法可能不同,但是它们描述的信息都是⼀样的,因此指向同⼀块空间。
System.out.println(classd == classd1);//true
(三)通过反射创建类的实例化对象
通过Class对象的⽅法newInstance获取实例化对象(通过反射来创建对象)前提:类型中必须有默认的构造⽅法。
//通过Class对象创建实例化对象
try{
Object object = wInstance();
//向下转型,有风险,使⽤instanceof
if(object instanceof Date){
Date date1 =(Date)object;
System.out.println(date1);
}
}catch(InstantiationException e){
e.printStackTrace();
实例化类和实例化对象
}catch(IllegalAccessException e){
e.printStackTrace();
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。