一、Class类
在目前为止我博客中写到的Java类中,见到的对象无非就是我们常见的那些有属性,与方法的实例化对象,但在Java中有一个类,它的实例化对象也是类,它就是Java中的Class类。
二、Class类的特点
1.该类在java.lang包中;
2.该类被final所修饰,即该类不可以被子类继承;
3.该类实现了Serializable接口;
4.该类的构造方法被private所修饰,即不能通过new关键字创建该类的对象;
该类通过类加载器创建类对象。
三、通过Class类为已有类创建对象
由上文可知,Class类不能通过new关键字来创建对象,因此需要用其他方式。有以下6种方式:
(1)forName()创建
package Test;
public class Test {
public static void main(String[] args) {
//反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz;
try {
clazz = Class.forName("Test.Student");//forname()创建
System.out.println(clazz.getName());//输出类名
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
运行结果:
(2)类名.class创建
package Test;
public class Test {
public static void main(String[] args) {
// 反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz;
clazz = Student.class;// 类名.class创建
System.out.println(clazz.getName());
}
}
运行结果:
(3)类对象.getclass()创建
package Test;
public class Test {
public static void main(String[] args) {
// 反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz;
clazz = new Student().getClass();// 类对象.getclass()创建
System.out.println(clazz.getName());
}
}
运行结果:
(4)基本数据类型对应的Class类对象 包装类名.TYPE
package Test;
public class Test {
public static void main(String[] args) {
// 反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz;
clazz = Integer.TYPE;// 基本数据类型对应的Class类对象 包装类名.TYPE
System.out.println(clazz.getName());
}
}
运行结果:
(5)数组对应Class类对象 元素类.class
package Test;
public class Test {
public static void main(String[] args) {
// 反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz;
clazz = String[].class;// 数组对应Class类对象 元素类.class
System.out.println(clazz.getName());
}
}
(6)获取某类父类对应Class类对象 某类.class.getSuperclass
package Test;
public class Test {
public static void main(String[] args) {
// 反射是一种新的操作类中属性,构造方法和普通方法的机制
Class clazz;
clazz = Student.class.getSuperclass();// 获取某类父类对应Class类对象
// 某类.class.getSuperclass
System.out.println(clazz.getName());
}
}