Class类:
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。
Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。
- 在面向对象的世界里,万事万物皆对象:
java语言中,静态的成员、普通数据类型不是对象;而类本身也是一个对象,类是java.lang.Class类的实例对象(Student、Dept类是Class类的实例对象)。 - 这个对象如何表示?
package shiyan;
public class ClassDemo1 {
public static void main(String[] args) {
/**
* Dept类本身也是一个对象,是Class类的实例对象
* 任何一个类都是Class类的实例对象(那Class类又是谁的对象呢?)
*/
//一般情况下我们这样表示Dept类的对象
Dept dept1 = new Dept();
Dept dept2 = new Dept();
/**
* 那Class类的实例对象如何表示呢?
* 显然不能通过new的方式,Class类的构造方法是private的
*/
//Class的实例对象有3种表示方式
//第一种 --- 实际上说明了任何一个类都有一个隐藏的静态成员变量class
Class c1 = Dept.class;
//第二种 --- 根据该类的对象调用getClass()方法
Class c2 = dept1.getClass();
Class c4 = dept2.getClass();
//第三种 --- 根据类名得到Class类的实例对象
Class c3 = null;
try {
c3 = Class.forName("shiyan.Dept");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//一个类只能是Class类的一个实例对象
System.out.println(c1 == c2);//true
System.out.println(c2 == c3);//true
System.out.println(c2 == c4);//true
//我们可以通过Class的实例(类(Dept)的类类型)创建类(Dept)的实例
try {
Dept dept3 = (Dept)c1.newInstance();//前提需要有一个无参构造方法
dept3.print();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
class Dept{
void print(){
System.out.println("123456");
}
}