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

    你可能感兴趣的文章
    NodeJS、NPM安装配置步骤(windows版本)
    查看>>
    nodejs与javascript中的aes加密
    查看>>
    nodejs中Express 路由统一设置缓存的小技巧
    查看>>
    nodejs中express的使用
    查看>>
    Nodejs中的fs模块的使用
    查看>>
    NodeJS使用淘宝npm镜像站的各种姿势
    查看>>
    nodejs包管理工具对比:npm、Yarn、cnpm、npx
    查看>>
    NodeJs单元测试之 API性能测试
    查看>>
    nodejs图片转换字节保存
    查看>>
    nodejs在Liunx上的部署生产方式-PM2
    查看>>
    nodejs字符与字节之间的转换
    查看>>
    NodeJs学习笔记001--npm换源
    查看>>
    NodeJs学习笔记002--npm常用命令详解
    查看>>
    nodejs学习笔记一——nodejs安装
    查看>>
    NodeJS实现跨域的方法( 4种 )
    查看>>
    nodejs封装http请求
    查看>>
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>
    NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
    查看>>