博客
关于我
学习中遇到带解决的问题
阅读量:388 次
发布时间:2019-03-05

本文共 968 字,大约阅读时间需要 3 分钟。

对象实例化及JVM装载机制的理解

在Java编程中,对象的实例化过程与JVM的装载机制密切相关。了解这些概念有助于更好地理解程序运行的底层逻辑。

首先,对象实例化是指在内存中创建对象的过程。Java程序在运行时,通过类加载器(Class Loader)将字节码加载到JVM中,并执行类初始化操作。这一过程包括类验证、准备、解析和初始化等阶段。

其次,JVM的装载机制负责将类文件加载到JVM的类路径中。装载器(ClassLoader)在这一过程中,根据类路径查找规则,确定类文件的位置,并读取其字节码。这一机制还支持动态加载,允许程序在运行时动态加载新类。

关于示例中的代码段:

public class InstanceInitTest {{ a = 6; } // 可以省略int修饰符int a = 9;public static void main(String[] args) {System.out.println(new InstanceInitTest().a);}}

其中,类实例化时隐式地初始化字段。即使没有显式声明,JVM会自动为fields进行初始化。默认初始化值的赋值规则是:整数类型默认初始化为0,布尔为false,对象引用为null。

关于FinalErrorTest类的测试:

public class FinalErrorTest {final int age;{System.out.println(age); // 会报错,因为age未被初始化printAge();age = 6;System.out.println(age);}public void printAge() {System.out.println(age);}public static void main(String[] args) {new FinalErrorTest();}}

该测试程序的输出结果为:

06

解释:

  • 在类加载时,age字段被声明为final整数类型,必须在初始化块中初始化。
  • 如果没有对age进行初始化,尝试访问age会导致 NullPointerException。
  • 由于final字段的特殊性,无法在初始化块外重新赋值。
  • 这种设计强制开发者在类初始化时就为final字段初始化,避免了运行时错误。

    转载地址:http://tibwz.baihongyu.com/

    你可能感兴趣的文章
    POJ 3683 Priest John's Busiest Day (算竞进阶习题)
    查看>>
    POJ 3988 Selecting courses
    查看>>
    POJ 4020 NEERC John's inversion 贪心+归并求逆序对
    查看>>
    poj 4044 Score Sequence(暴力)
    查看>>
    POJ 基础数据结构
    查看>>
    POJ 题目3020 Antenna Placement(二分图)
    查看>>
    Poj(1797) Dijkstra对松弛条件的变形
    查看>>
    SpringBoot为什么不需要xml配置文件?
    查看>>
    POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量
    查看>>
    Qt笔记——SQLite初探QSqlDatabase QSqlQuery
    查看>>
    POJ-1163-The Triangle
    查看>>
    POJ-Fence Repair 哈夫曼树
    查看>>
    poj1061 - 同余方程,二元一次不定方程
    查看>>
    Qt笔记——SQLite再探
    查看>>
    poj1068Parencodings
    查看>>
    poj1182(带权并查集)
    查看>>
    POJ1182(带权并查集)
    查看>>
    Qt笔记——Qt初探、PyQt5和Qt5
    查看>>
    poj1190生日蛋糕
    查看>>
    POJ1218 HDU1337 ZOJ1350 UVALive2557 THE DRUNK JAILER
    查看>>