1. 反射回顾:反射是IoC的基础

类对象应该指类的Class对象,也就是字节码对象可以通过Class.forName()/getclass()/.class来获取,当jvm加载一个类时就会为这个类创建一个Class对象;

类的对象,通常就是指我们通过new这个类或者反射得到Class对象再调用newInstance()创建的对象,存在内存的堆中,也叫类的实例;

public class TestMain {
    public static void main(String[] args) {
        System.out.println(XYZ.name);
    }
}

class XYZ {
    public static String name = "静态变量";

    static {
        System.out.println("静态块");
    }

    public XYZ() {
        System.out.println("构造方法");
    }
}

结果: 

静态块
静态变量

解析:

类加载器首先会检查这个类的Class对象是否已被加载过,如果尚未加载,默认的类加载器就会根据类名查找对应的.class文件。

想在运行时使用类型信息,必须获取对象(比如类Base对象)的Class对象的引用,使用功能Class.forName(“Base”)可以实现该目的,或者使用base.class。==注意,有一点很有趣,使用功能”.class”来创建Class对象的引用时,不会自动初始化该Class对象,使用forName()会自动初始化该Class对象==。为了使用类而做的准备工作一般有以下3个步骤:

1. 加载:由类加载器完成,找到对应的字节码,创建一个Class对象
2. 链接:验证类中的字节码,为静态域分配空间
3. 初始化:如果该类有超类,则对其初始化,执行静态初始化器和静态初始化块

你可能感兴趣的:(1. 反射回顾:反射是IoC的基础)