Java中创建一个对象,例如 Person person = new Person("张三", 20); 包括几部分1. 声明(Declaration):将变量名称与对象类型关联的变量声明。
Person person 就是告诉编译器你将使用person引用一个Person类型的对象。其初始值将待定,直到有一个对象真正被创造和分配给它。这里只是简单地声明一个引用变量而并没有创建一个对象。2. 实例化(Instantiating):new关键字是一个java运算符,它用来创建对象。new运算符实例化一个类对象,通过给这个对象分配内存并返回一个指向该内存的引用。new运算符也调用了对象的构造函数。由new运算符返回的引用可以不需要被赋值给变量。它也可以直接使用在一个表达式中。例如: int age = new Person().age;3. 初始化(Initialization):new运算符,随后调用构造函数,初始化新创建的对象。每个构造函数都允许你为矩形的起始值、宽度和高度提供初始值,同时使用原始类型和引用类型。如果一个类有多个构造函数,它们必须有不同的签名。java编译器区分构造函数基于参数的数量和类型。总结:1. Java关键字new是一个运算符。与 +、-、*、/ 等运算符具有相同或类似的优先级。2. 创建一个Java对象需要三部:声明引用变量、实例化、初始化对象实例。3. 实例化:就是“创建一个Java对象”-----分配内存并返回指向该内存的引用。4. 初始化:就是调用构造方法,对类的实例数据赋初值。5. Java对象内存布局:包括对象头和实例数据。
对象头:它主要包括对象自身的运行行元数据,比如哈希码、GC分代年龄、锁状态标志等;同时还包含一个类型指针,指向类元数据,表明该对象所属的类型。实例数据:它是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身拥有的字段)。在hotSpot虚拟机中,对象在内存中的布局可以分成对象头、实例数据、对齐填充三部分。对齐填充:它不是必要存在的,仅仅起着占位符的作用。6. Object obj = new Object();那“Objectobj”这部分的语义将会反映到Java栈的本地变量表中,作为一个reference类型数据出现。而“new Object()”这部分的语义将会反映到Java堆中,形成一块存储了Object类型所有实例数据值(InstanceData,对象中各个实例字段的数据)的结构化内存,根据具体类型以及虚拟机实现的对象内存布局(Object Memory Layout)的不同,这块内存的长度是不固定的。另外,在Java堆中还必须包含能查找到此对象类型数据(如对象类型、父类、实现的接口、方法等)的地址信息,这些类型数据则存储在方法区中。

2. Java中new内存分配

    当Java语法层面使用new关键字创建一个Java对象时,JVM首先会检查这个new指令的参数能否在常量池中定位到一个类的符号引用,然后检查与这个符号引用相对应的类是否已经成功经历加载、解析和初始化等步骤,当类完成装载步骤之后,就已经完全确定出创建对象实例时所需的内存空间大小,接下来JVM将会对其进行内存分配,以存储所生成的对象实例。总结:1. 在Java语法层面上创建一个对象,使用一个简单的new关键字即可,但是在JVM中细节的实现相当复杂,而且过程繁多。2. 当Java语法层面使用new关键字创建一个Java对象时,JVM首先会检查相对应的类是否已经成功经历加载、解析和初始化等步骤;当类完成装载步骤之后,就已经完全确定出创建对象实例时所需的内存空间大小,才能对其进行内存分配,以存储所生成的对象实例。3. 实例化之后,进行初始化(初始化对象头和实例数据)。4. 内存分配方式有:指针碰撞(Bump the Pointer)、快速分配策略、空闲列表(Free List)。5. 在并发环境下从堆中划分内存空间是非线程安全的,new运算符具有-------数据操作的原子性;也就是说创建一个Java对象分配内存,要么所有步骤都成功,返回对象的引用,要么回归到创建之前的内存状态,返回为NULL。6. 通过new创建一个Java对象,如果成功则返回这个对象的引用,开发者不可直接操作对象实例,需要通过这个引用“牵引”。

Java中new的作用相关推荐

  1. Java中static的作用

    Java中static的作用 请先看下面这段程序: public class Hello{ public static void main(String[] args){ //(1) System.o ...

  2. Java中接口的作用,为什么要写接口?

    ** Java中接口的作用 转载于:https://www.zhihu.com/question/20111251 ** **困惑:**例如我定义了一个接口,但是我在继承这个接口的类中还要写接口的实现 ...

  3. Java中重载的作用?

    Java中重载的作用? 重载定义:一个类中如果有多个同名方法但带有不同的参数列表,称为方法重载(Overload). 重载方法的参数列表不同是指参数的数据类型或个数或次序不同. 重载方法之间必须以参数 ...

  4. java中*和**的作用 以及 /和/*和/**的区别

    一.java中*和**的作用 "*"就表示了所有的文件,但是"*"并不包括子目录下的文件: "**"匹配包含任意级子目录中所有的文件: 二. ...

  5. 记录一下Java中final的作用

    记录一下Java中final的作用   final关键字可以修饰类.成员变量.方法.以及方法中的局部变量. 1.final修饰类   可以使用final将类声明为final类.final类不能被继承, ...

  6. java中的静态变量的作用域_详解JAVA中static的作用

    1.深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用:如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的:如果是说 可以构成 静态代码块,那别人认为你还可以: 如果你说 ...

  7. java中包装类的作用

    Java中包装类的作用 一.包装类是什么 包装类就是解决java的八种基本数据类型不面向对象的缺陷,而设计出来的一个个与每一个与基本类型相对应的类,这八种基本数据类型对应的类统称包装类(Wrapper ...

  8. java中execution的作用_一文初步了解Java虚拟机

    大家都知道,Java中JVM的重要性,学习了JVM你对Java的运行机制.编译过程和如何对Java程序进行调优相信都会有一个很好的认知. 什么是JVM? JVM(Java Virtual Machin ...

  9. java 中gui的作用_java学习中最应该注意的Java GUI用户界面以何为基础

    java中的GUI编程(Graphic User Interface,图形用户接口),是在它的笼统窗(Abstract Window Toolkit,AWT)上完成的,java.awt是AWT的东西类 ...

  10. java中key的作用_key word ‘final’ 在java 中作用

    随着硬件的发展,一般的芯片不会用于裸跑,像android things 这样的系统会越来越多,在嵌入式中c++/java的应用将会越来越多.而且我感觉嵌入式工程师掌握android app的基本开发是 ...

最新文章

  1. php配置连接sql2005(使用微软官方驱动)
  2. ServiceNow 中关于UI Action 在portal端的使用
  3. uniapp背景图片android不显示,uni-app网络图片在app不显示,小程序显示
  4. jenkins 集成java搅拌_如何将Gauge与Jenkins集成
  5. go test 如何输出到控制台_深度剖析 Go 中的 Go 协程 (goroutines) -- Go 的并发
  6. LUNA16_Challange数据预处理1
  7. java 事件监听器 执行类_事件及事件监听器类 java
  8. 蜘蛛侠论坛 2.0 源代码发布
  9. javascript代码_认识 JavaScript 可执行代码
  10. 让Cygwin支持中文
  11. ubuntu安装Google输入法
  12. ExoPlayer播放器剖析(七)ExoPlayer对音频时间戳的处理
  13. C/C++ libcurl CURLOPT_NOSIGNAL选项
  14. 第十四期公关大讲堂:公关稿件写作理念、方法与技巧.
  15. 阿里云服务器遭到DDOS攻击怎么解决
  16. CSGO社区服搭建记录
  17. ElasticSearch 基础(七)之分析器
  18. 13 信息2班 《安卓程序设计基础》课程成绩
  19. 换行符后需要加逗号吗c语言,为什么大多数编程语言都在换行符之前而不是换行符之后使用逗号?...
  20. bili上李沐大神的d2l中的损失函数的理解

热门文章

  1. 为开发板Arduino Mega or Mega 2560编译时出错
  2. QC手法在软件中的运用
  3. sdp3命令 matlab,Yalmip学习笔记
  4. AI_Papers周刊:第三期
  5. 【大数据处理与可视化】八、文本数据分析
  6. Vue项目开发中优雅的切换服务端ip
  7. 您的账户已被停用,请向系统管理员咨询 解决方案(亲测有效)
  8. QT关于界面常用设置
  9. could only be written to 0 of the 1 minReplication nodes.
  10. linux mongodb集群搭建