博客
关于我
学习中遇到带解决的问题
阅读量: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/

    你可能感兴趣的文章
    PHP编程效率的20个要点
    查看>>
    PHP网页缓存技术优点及代码
    查看>>
    php自定义函数: 文件大小转换成智能形式
    查看>>
    php英语单词,php常用英语单词,快速学习php编程英语(6)
    查看>>
    R3.4.0安装包时报错“需要TRUE/FALSE值的地方不可以用缺少值”,需升级到R3.5.0
    查看>>
    PHP获取curl传输进度
    查看>>
    PHP获取IP所在地区(转)
    查看>>
    PHP获取IP的方法对比
    查看>>
    php获取json里面内容
    查看>>
    R2的版本由来
    查看>>
    PHP获取图片宽度高度、大小尺寸、图片类型、用于布局的img属性
    查看>>
    PHP获取当前时间、时间戳的各种格式写法汇总
    查看>>
    PHP获取当前页面的完整URL
    查看>>
    php获取文件夹中文件的两种方法
    查看>>
    PHP获取日期的一些方法总结
    查看>>
    R2学习记录
    查看>>
    php解析ipa包,获取logo
    查看>>
    php设计模式 萨莱 pdf,PHP设计模式 建造者模式
    查看>>
    php设计模式之装饰器模式
    查看>>
    R&Python Data Science系列:数据处理(5)--字符串函数基于R(一)
    查看>>