1--认识Class类
正常情况下,必须知道类的完整路径名之后,才可以实例化对象;在Java中,也允许通过一个对象,找到其所在的类的信息,这就是Class类的功能
package com.reflection.demo;
class X{
};
public class GetClassDemo01{
public static void main(String args[]){
X x = new X() ; // 实例化X类的对象
System.out.println(x.getClass().getName()) ;// 得到对象所在的类
}
};
此时,所有的操作可以反着来
Object类的支持
在Object类中,定义了一个方法:public finally Class getClass()此方法被所有的子类继承,返回值的类型是一个Class类,此类事Java反射机制的源头,其实,反射就是可以通过对象反射求出类的名称。
正常情况下:
引入需要的包类名称---通过new实例化---取得实例化对象
反射情况下:
实例化对象---getClass()方法---得到完整的包类名称
Class类本身表示一个类的本身,通过getClass()可以完整得到一个类的完整结构,包括方法定义和属性定义。
此类在jdk文档中没有发现任何构造方法,所以此类的方法被私有化了。
实例化Class对象
(1)通过forName()
(2)类.class
(3)对象.getClass()
package com.reflection.demo;
class A{
};
public class GetClassDemo02{
public static void main(String args[]){
Class<?> c1 = null ; // 指定泛型
Class<?> c2 = null ; // 指定泛型
Class<?> c3 = null ; // 指定泛型
try{
// 以下的操作形式是在开发中最常用的一种形式
c1 = Class.forName("com.reflection.demo.A") ;
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
c2 = new A().getClass() ; // 通过Object类中的方法实例化
c3 = A.class ; // 通过类.class实例化
System.out.println("类名称:" + c1.getName()) ; // 得到类的名称
System.out.println("类名称:" + c2.getName()) ; // 得到类的名称
System.out.println("类名称:" + c3.getName()) ; // 得到类的名称
}
};
一旦可以实例化Class类后,就可以进行反射的进一步操作