我们先看看类的加载过程,在我们运行java代码时,首先会通过编译器将.java的文件编程成.class文件,之后在通过类加载器将.class文件转为字节码加载到jvm运行时数据区里面,整个加载过程如下

上图只是类的加载过程,还没有创建对象; 那如果创建对象的话,比如执行 new Object(); 这段代码,里面主要有2个步骤,分别是实例化和初始化

如果创建对象的是有引用变量,那就是这样的

实例化(半初始化)

对象实例化的过程,其实也叫半初始化,就是时候你创建对象的过程中创建到一半的情况下,拿下面的代码来举例:

package com.test;
public class Test {public static void main(String[] args) throws InterruptedException {Obj object_1 = new Obj();}
}class Obj {int i = 13;
}

首先会为该对象分配一块堆内存用来存放对象和父类的属性实例,new这个关键字就是用来分配内存的,并且给对象和父类的属性进行复制,这里的赋值都是给默认值,也就是零值;

初始化和引用赋值

初始化就需要给属性赋值真正的数据了,这个数据是用户给定的,如果是引用的话,就会将引用变量指向给定的地址,并且调用初始化方法

init() 方法:就是我们说的构造器,构造器就包括 构造方法、{}包住的代码等。

clinit()方法: <clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}语句)中的语句合并产生的,编译器收集的顺序是有语句在源文件中出现的顺序所决定的,静态语句块中只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块中可以赋值,但不能访问。

引用赋值

引用赋值是先分配一块栈内存来存放 object_1 并将栈内存的object_1指向堆内存的对象实例,这也是对象创建的最后一步操作;引用赋值完成后,整个对像就创建完成了!

init() 与 clinit() 加载顺序

当一个类初始化的时候,先调用<cinit>方法 ,然后在继续执行<init>

我们用用代码测试下

package com.test;/*** 类初始化*/
public class Init {public static void main(String[] args) {ChildClass childClass = new ChildClass();}
}class  ChildClass extends ParentClass{static {System.out.println("我是子类的静态方法");}public ChildClass(){System.out.println("我是子类的构造函数");}
}class ParentClass{static {System.out.println("我是父类的静态方法");}public ParentClass(){System.out.println("我是父类的构造函数");}}

打印结果

我是父类的静态方法
我是子类的静态方法
我是父类的构造函数
我是子类的构造函数

java创建对象过程 实例化和初始化相关推荐

  1. Java创建对象过程:类的初始化和实例化

    文章目录 前言 一.类的初始化 二.类的实例化 前言 Java对象的创建过程往往包括类初始化和类实例化两个阶段.类的初始化在前.类的实例化在后. 注意:这与spring的bean正好相反,spring ...

  2. java中类和实例化_Java中类的初始化与实例化

    一个Java对象的创建过程往往包括类初始化 和 类实例化 两个阶段. 一.Java对象创建时机 我们知道,一个对象在可以被使用之前必须要被正确地实例化.在Java代码中,有很多行为可以引起对象的创建, ...

  3. java创建对象的过程详解

    首先,介绍一下java中对象的创建基本知识然后,介绍一下对象初始化的顺序接下来,介绍一下创建对象的几种方式最后,进行一个总结.(从内存角度去分析:重点)重点 一.基本知识 我们知道,一个对象的创建过程 ...

  4. 解析 Java 类和对象的初始化过程 由一个单态模式引出的问题谈起

    在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 问题引入 近日我在调试一个枚举类型的解析器程序,该解析器是将数据库内一万多条枚举代码装载到缓存中,为了实现快速定位枚举代码 ...

  5. java创建对象的过程_Java创建对象的过程

    Java创建对象的过程 Java是一门面向对象的编程语言,在Java程序运行过程中每时每刻都有对象被创建出来.在语言层面上,创建对象通常仅仅是一个new关键字而已,而在虚拟机中,对象的创建又是怎样一个 ...

  6. Java 父类子类的对象初始化过程

    转载自 Java 父类子类的对象初始化过程 摘要: Java基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况. 1. 基本初始化过程: 对于一个简单类的初始化过程是: ...

  7. 解析 Java 类和对象的初始化过程

    跳转到主要内容 中国 [ 选择 ] dW 全部内容--------------  AIX and UNIX  Info Mgmt  Lotus  Rational  WebSphere-------- ...

  8. Java创建对象的过程

    java创建对象的过程主要分为一下五个步骤: (1)类加载检查 Java虚拟机(jvm)在读取一条new指令时候,首先检查能否在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否被加载. ...

  9. 那些你还不熟悉的---类的初始化和实例化的初始化过程

    面试题: 如下两个类的代码 /*父类对象*/ public class Father{private int i = test();private static int j = method();st ...

最新文章

  1. 多行文本溢出显示省略号(…)
  2. [NTU-Machine-learning-note]1 Introduction(2)
  3. 命令行下的curl使用详解
  4. C#开发模式——单例模式
  5. js 可以做什么东西_Deno需要做什么才能取代Node.js?
  6. IDEA和mysql的连接
  7. 小程序入门学习04--数据绑定、条件渲染、列表渲染
  8. 使用stress,压力测试K8S的POD cpu
  9. Android开发----简单几步教你制作一个简易的音乐播放器
  10. 小程序向数组中添加数据
  11. 3D立体显示大屏幕拼接视频墙系统解决方案【转】
  12. C++STL库之algorithm库
  13. 一种基于多维时序数据预测综合判定的方法(内存告警)
  14. edg击败we视频_LPL夏季赛:EDG零封V5获三连胜 OMG2-1击败WE
  15. 【RMQ】POJ 3264 Balanced Lineup
  16. GitHub 上值得收藏的 100 个精选前端项目!
  17. IOS 沙盒(sandbox)机制和文件操作
  18. 碟中谍5中的科技:详解“步态分析”
  19. pandas_datareader下载雅虎财经股价数据
  20. 两院院士评选“2021年中国/世界十大科技进展新闻”揭晓

热门文章

  1. 鸿蒙适配倒计时,倒计时10天!鸿蒙系统传来好消息,华为大招正式亮相
  2. Unity新手适合的简单AI
  3. leetcode:1838. 最高频元素的频数【排序 + 前缀和 + 二分 + 思维】
  4. 第七周 项目5 排队看病模拟
  5. 下列不属于C语言程序开发步骤,程序设计技术(C语言)-中国大学mooc-题库零氪...
  6. 春招实习上岸,整理CVTE,华为,百度,头条,腾讯。分享心得及面经
  7. php 微信红包开发代码,PHP 生成微信红包代码简单
  8. 转载:深度工作:充分使用每一份脑力
  9. if语句的写法之普通,文艺,2B青年写法
  10. 全国最先进的期货仓单系统|外盘期货仓单软件|内盘期货仓单软件