本章目标
掌握Object类中getClass()方法的作用
认识Java反射机制
通过对象反向取得类信息
在正常情况下,需要先有一个类的完整路径引入之后才可以按照固定的格式产生实例化对象,但是在Java中也允许通过一个实例化对象找到一个类的完整信息,那么这就是Class类的的功能。
package J031501.GetClassDemo01;
class X{//声明 X 类
}
public class GetClassDemo01 {
public static void main(String[] args) {
X x = new X();//实例化 X 类的对象
System.out.println(x.getClass().getName());//得到对象所在类
}
/* 结果:
* J031501.GetClassDemo01.X
* */
}
Object类的支持
在Object类中定义了以下的方法,此方法将被所有子类继承:
——public final Class getClass()
——以上的方法返回值的类型是一个“Class”类,实际上此类是Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。
Class类
Class本身表示一个类的本身,通过Class可以完整的得到一个类中的完整结构,包括此类中的方法定义,属性定义等。
Class类的常用方法
实例化Class类对象
实例化Class类对象的方法有三种:
——第一种:通过forName()方法
——第二种:类.class
——第三种:对象.getClass()
实例化Class类对象
package J031501.GetClassDemo02;
class X{//声明 X 类
}
public class GetClassDemo02 {
public static void main(String[] args) {
Class<?> c1 =null;//指定泛型
Class<?> c2 =null;//指定泛型
Class<?> c3 =null;//指定泛型
try {
//最常用的形式
c1 = Class.forName("J031501.GetClassDemo02.X");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
c2 = new X().getClass();//通过 Object 类中的方法实例
c3 = X.class;//通过类.class 实例化
System.out.println("类名称:"+c1.getName());//得到类的名称
System.out.println("类名称:"+c2.getName());//得到类的名称
System.out.println("类名称:"+c3.getName());//得到类的名称
}
/* 结果:
* 类名称:J031501.GetClassDemo02.X
* 类名称:J031501.GetClassDemo02.X
* 类名称:J031501.GetClassDemo02.X
* */
}