【java学习—十四】Class类(2)

文章目录

  • 1. Class类
  • 2. Class类的常用方法
  • 3. 实例化Class类对象(四种方法)


1. Class类

在 Object 类中定义了以下的方法,此方法将被所有子类继承:
public final Class getClass()
以上的方法返回值的类型是一个 Class 类,此类是 Java 反射的源头, 实际上所谓反射从程序的运行结果来看也很好理解,即:
可以通过对象反射求出类的名称

【java学习—十四】Class类(2)_第1张图片

反射可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言, JRE 都为其保留一个不变的 Class 类型的对象。

  • 一个 Class 对象包含了特定某个类的有关信息。
  • Class 本身也是一个类
  • Class 对象只能由系统建立对象
  • 一个类在 JVM 中只会有一个 Class 实例
  • 一个 Class 对象对应的是一个加载到 JVM 中的一个 .class 文件
  • 每个类的实例都会记得自己是由哪个 Class 实例所生成
  • 通过 Class 可以完整地得到一个类中的完整结构

2. Class类的常用方法

【java学习—十四】Class类(2)_第2张图片

3. 实例化Class类对象(四种方法)

  1. 前提:若已知具体的类,通过类的 class 属性获取。该方法最为安全可靠,程序性能最高
    实例: Class clazz = String.class;

  2. 前提:已知某个类的实例,调用该实例的 getClass() 方法获取 Class 对象
    实例: Class clazz = “www.xyd.com”.getClass();

  3. 前提:已知一个类的全类名,且该类在类路径下,可通过Class 类的静态方法 forName() 获取,可能抛出 ClassNotFoundException
    实例: Class clazz = Class.forName(“java.lang.String”);

  4. 其他方式 ( 不做要求 )
    ClassLoader cl = this.getClass().getClassLoader();
    Class clazz4 = cl.loadClass(“ 类的全类名” );

举例:

package day14;

public class Test {
	public static void main(String[] args) {
		Person p = new Person();
	
		//方法1
		Class c0 = Person.class;//通过类名.class创建指定类的Class实例
		//方法2
		Class c1 = p.getClass();//通过一个类的实例对象的getClass()方法,获取对应实例对象的类的Class实例
		//方法3
		try {
			//通过Class的静态方法forName(String className)来获取一个类的Class实例
			//forName(String className)方法中的参数是你要获取的Class实例的类的全路径(包名.类名)
			Class c2 = Class.forName("day14.Person");//获取Class实例的常用方法
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
}

你可能感兴趣的:(java学习,java,学习,开发语言)