类:与类型等价、是内存中的一个结构 实例对象:数据结构被初始化 类具有双重属性:既是类型结构,也是对象(Class对象)

从底层机制去理解
  • ** RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一直是C++中的概念,至于Java中出现RTTI的说法则是源于《Thinking in java》一书,其作用是在运行时识别一个对象的类型和类的信息。这里分为两种:** 1 传统的“RTTI”,它假定我们在编译期已经知道了所有类型(在没有反射机制创建和使用类对象时,一般都是编译期已确定其类型,如new对象时该类必须已定义好) 2 反射机制,它允许我们在运行时发现和使用类型的信息
  • 在类初始化阶段,JVM负责对类形式初始化,主要是对类变量初始化。在JAVA类中对类变量初始化值有两种方式: 1 声明类变量时指定初始值(实际代码Java类中未赋值的在实际初始化中会指定默认值) 2 使用静态初始化块为类变量指定初始值
  • JVM初始化一个类步骤如下: 1 如果这个类还没有被加载和连接,则程序先加载并连接该类 2 如果这个类直接父类还没有被初始化,则先初始化其父类 3 假如这个类中有初始化语句,则依次执行这些初始化语句 4 当执行到第2个步骤时,系统对直接父类的初始化也遵循1-3步骤 以此类推,所以JVM最先执行的类总是java.lang.Object类
  • java程序首次通过下面6种方式来使用某个类或接口,系统就会初始化该类或接口、 1 创建类的实例 2 调用某个类方法(静态方法) 3 访问某个类或接口,或为该类变量赋值 4 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象 5 初始化某个类的子类,该子类的父类都会被初始化 6 直接使用java.exe 运行某个主类。当运行主类时候,程序会先初始化该主类
  • 类加载器负责将.class文件(可能是远程也可能是本地)加载到内存中,并为之生成一个对应的java.lang.Class对象 1 手动编写的类被编译后会产生一个Class对象,其表示的是创建的类的类型信息,而且对象保存在同名.class的文件中(字节码文件),比如创建一个Shapes类,编译shapes类后就会创建其包含Shapes类相关类型信息的Class对象,并保存在Shapes.class字节码文件中。 2 每个通过关键字class标识的类,在内存中有且只有一个与之对应的Class对象来描述其类型信息,无论创建多少个实例对象,其依据的都是用一个Class对象 3 Class类只存私有构造函数,因此对应Class对象只能有JVM创建和加载 4 Class类的对象作用是运行时提供或获得某个对象的类型信息,这点对于反射技术很重要