java.lang.Class 解析

Class类简介

Class 类是一个特殊的类,它的一个对象表示某个类被虚拟机加载到专用内存区域(类信息区)

Class类只有一个 private 的构造函数,但实际上只有 Java 虚拟机才能构造一个 Class 对象,这个类只是用来避免自动生成默认的构造函数的

使用Class类得到一个和某类相关的 Class 对象

在创建一个对象时,我们最常用也最简单的一个方法就是使用 new 运算符和类的构造方法,但实际上,我们也可以使用 Class 类来得到某个类的实例,通常使用 forName 函数来得到某个类的对象

    @CallerSensitive
    public static Class<?> forName(String className)
                throws ClassNotFoundException {
        Class<?> caller = Reflection.getCallerClass();
        return forName0(className, true, ClassLoader.getClassLoader(caller), caller);
    }

其中,参数 className必须是类的全名(包含类名)
例如

package demo;

public interface Coder {
	
	void code();
}
package demo;

public class CppCoder implements Coder{

	@Override
	public void code() {
		System.out.println("cpp coder");
	}
}
package demo;

public class JavaCoder implements Coder{

	@Override
	public void code() {
		System.out.println("java coder");
	}
	
}
package demo;

public class ClassTest {
	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		Coder new_coder = new JavaCoder();
		new_coder.code();	
		
		String name = "demo.JavaCoder";
		Class c = Class.forName(name);
		Coder coder = (Coder)c.newInstance();
		coder.code();
	}
}

getClass()

在 java.lang.object 中定义了一个方法 getClass(),因此我们可以使用该方法获得 Class 对象

    @HotSpotIntrinsicCandidate
    public final native Class<?> getClass();

可以看到在 示例代码中,使用 Class.forName 方法得到的 Class 对象和 使用 getClass方法得到的 Class 对象是相同的

JAVA反射与类加载机制

Java反射机制

在运行状态下,对任意一个类都能知道这个类的所有的属性和方法;并且对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取信息以及动态调用对象方法的功能称为Java的反射机制

类加载机制

虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值