摘要:

在Java中,一个对象在可以被使用之前必须要被正确地初始化,这一点是Java规范规定的。在实例化一个对象时,JVM首先会检查相关类型是否已经加载并初始化,如果没有,则JVM立即进行加载并调用类构造器完成类的初始化。在类初始化过程中或初始化完毕后,根据具体情况才会去对类进行实例化。本文试图对JVM执行类初始化和实例化的过程做一个详细深入地介绍,以便从Java虚拟机的角度清晰解剖一个Java对象的创建过程。

版权声明:

友情提示:

一个Java对象的创建过程往往包括类初始化 和 类实例化 两个阶段。本文的姊妹篇《 JVM类加载机制概述:加载时机与加载过程》主要介绍了类的初始化时机和初始化过程,本文在此基础上,进一步阐述了一个Java对象创建的真实过程。

一、Java对象创建时机

我们知道,一个对象在可以被使用之前必须要被正确地实例化。在Java代码中,有很多行为可以引起对象的创建,最为直观的一种就是使用new关键字来调用一个类的构造函数显式地创建对象,这种方式在Java规范中被称为 : 由执行类实例创建表达式而引起的对象创建。除此之外,我们还可以使用反射机制(Class类的newInstance方法、使用Constructor类的newInstance方法)、使用Clone方法、使用反序列化等方式创建对象。下面笔者分别对此进行一一介绍:

1). 使用new关键字创建对象

这是我们最常见的也是最简单的创建对象的方式,通过这种方式我们可以调用任意的构造函数(无参的和有参的)去创建对象。比如:

Student student = new Student();

2). 使用Class类的newInstance方法(反射机制)</

java实例化类之后如何赋值_深入理解Java对象的创建过程:类的初始化与实例化...相关推荐

  1. java compareto方法怎么排序的_深入理解Java中Comparable和Comparator排序

    本文有牛旦教育原创,头条首发,转载注明来源. 如何为需要的排序算法选择正确的接口?通过本文的分析讲解,我们会找到答案参考答案. 程序员经常需要将数据库中的元素排序为集合.数组或映射.在Java中,我们 ...

  2. java中线程调度遵循的原则_深入理解Java多线程核心知识:跳槽面试必备

    多线程相对于其他 Java 知识点来讲,有一定的学习门槛,并且了解起来比较费劲.在平时工作中如若使用不当会出现数据错乱.执行效率低(还不如单线程去运行)或者死锁程序挂掉等等问题,所以掌握了解多线程至关 ...

  3. java的跨平台特性是指_如何理解JAVA的跨平台特性

    1.java的跨平台,是指java在运行时是凌驾于os之上,是在jvm中运行的,跟os没有直接联系. 2.java跨平台主要是由java的编译方式决定的,因为java是通过jvm先编译再执行,它编译的 ...

  4. 类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换

    在游戏开发中,配置表是不可少的.通常我们将一个类,做成一个配置表,将配置表每列的索引都和类的字段名严格对应起来. 先实例化一个类的对象,然后通过反射来遍历类中的字段,通过field.SetValue( ...

  5. java内存分配和垃圾回收_深入理解java虚拟机(二)垃圾收集器与内存分配策略...

    垃圾收集器与内存分配策略 垃圾收集,三个步骤 什么时候收集,收集那些,怎么收集 1.收集那些 我们会将一些不使用的对象进行收集,进行回收内存空间,我们怎么知道呢 1.引用计数法 如果这个实例被其他地方 ...

  6. 简述java中的注释以及用法_怎样理解 Java 注解和运用注解编程?

    正好最近在公众号(BetterAndroid)发了一篇关于注解的文章,贴在这里吧,希望对题主有帮助. 一.什么是注解 我们都知道在Java代码中使用注释是为了提升代码的可读性,也就是说,注释是给人看的 ...

  7. Java基本数据类型的自动转换_彻底理解Java中的基本数据类型转换(自动、强制、提升)...

    说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示. 重新温故了下原始数据类型,现在来解释下它们之间的转换关系. 自动类型转换 自 ...

  8. java虚拟机和内存的关系_深入理解java虚拟机(linux与jvm内存关系)

    本文转载自美团技术团队发表的同名文章 https://tech.meituan.com/linux-jvm-memory.html 一, linux与进程内存模型 要理解jvm最重要的一点是要知道jv ...

  9. java装箱与拆箱原理_深入理解Java中的装箱和拆箱

    前言 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 若有不 ...

最新文章

  1. 为什么QQ传文件比MSN快 揭密背后原因
  2. 为什么发了个博客分分钟被各种网站花式转载=。=而不通知我
  3. iOS开发Swift篇—(六)流程控制
  4. POST请求转换为其他请求失效 input type=“hidden“ name=“_method“ value=“put“无效
  5. 《论文笔记》Cooperative Multi-Robot Monocular-SLAM using Salient Landmarks
  6. apache正向代理配置
  7. Ribbon风格下,依然叫菜单或者菜单卡、菜单页
  8. 【转】IDEA类和方法注释模板设置(非常详细)
  9. 【触动精灵将图片转成base64字符串后通过post方式上传给服务器】
  10. 解决爱快+openwrt双软路由,爱快设备列表中mac地址全部为openwrt的mac的问题
  11. easyexcel一个单元格导出多张图片等
  12. 3d模型 vv5_你也想做锦鲤信小呆?WEY VV5升级款这就来满足你!
  13. SparkSteaming运行流程分析以及CheckPoint操作
  14. 2022年初级会计职称考试会计实务练习题及答案
  15. linux命令就应该这样记(带索引超详细)
  16. 游戏制作策划人员指南
  17. word文件和扩展名不匹配的解决办法,亲测有效
  18. Invalid default value for ‘updated_at‘
  19. Java基础到Java进阶——Java小白的历练之路------从0到1,开卷!
  20. 重庆公需科目快速看视频方法自动学习 python

热门文章

  1. pyinstxtractor 源码分析及填坑
  2. 近视眼学计算机好吗6,近视又不戴眼镜,还经常对着电脑会怎么样
  3. PHP 换行符的一些说明
  4. 拉姆达表达式 追加 条件判断 ExpressionFuncT, bool
  5. C++/C++11中头文件sstream介绍
  6. 【2094. 找出 3 位偶数】
  7. python解常微分方程龙格库_数值常微分方程-欧拉法与龙格-库塔法
  8. 微信小程序基础库的问题
  9. 2.Ext JS MVVM特性
  10. 全网最全的网络安全技术栈内容梳理(持续更新中)