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

    你可能感兴趣的文章
    Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理三
    查看>>
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty源码—8.编解码原理二
    查看>>
    Netty源码解读
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Netty相关
    查看>>