`

Java中new关键字

    博客分类:
  • Java
阅读更多
1. Java中new关键字

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对象,如果成功则返回这个对象的引用,开发者不可直接操作对象实例,需要通过这个引用“牵引”。
分享到:
评论

相关推荐

    new关键字和newInstance() 的区分

    Java 中 new 关键字和 newInstance() 的区分 Java 中的 new 关键字和 newInstance() 方法都是用于创建对象的,但是它们之间有着本质的区别。理解这两者的区别对于 Java 编程尤其重要。 首先,new 关键字是 Java 的...

    java中的关键字大全

    ### Java中的关键字大全 在Java编程语言中,关键字是一组预定义的词汇,它们具有特殊的含义和用途。理解和掌握这些关键字对于编写有效的Java程序至关重要。本文将详细介绍Java中的一些核心关键字,并提供相应的解释...

    Java中new的用法.pdf

    在Java语言中,new关键字是面向对象编程的核心之一,它主要用于创建对象实例。本文将详细解释在Java中new关键字的各种用法,并结合示例代码进行阐述。 1. 基本对象的创建: 使用new关键字可以创建任何类的新实例。...

    java实现根据关键字查找所在文件夹的文件

    在Java编程语言中,实现根据关键字查找文件夹内包含该关键字的文件是一项常见的任务,尤其在数据处理、日志分析或者文件管理系统中。这个功能可以帮助用户快速定位到含有特定信息的文件,提高工作效率。以下是一个...

    java PDF关键字定位

    本篇文章将深入探讨如何使用iText库在Java中实现PDF关键字定位。iText是一个强大的PDF处理库,它提供了丰富的API来创建、编辑和读取PDF文档。 首先,我们需要在项目中引入iText库。你提到的`itextpdf-5.5.6.jar`是...

    JAVA中的关键字和保留字

    Java是一种广泛使用的面向对象的编程语言,其语法严谨,其中包括一系列的关键字和保留字,这些关键字在编程中具有特殊含义,不能用作变量名或其他标识符。以下是对Java中一些重要关键字的详细解释: 1. **abstract*...

    Java中new的用法[参考].pdf

    Java 中 new 关键字的用法详解 在 Java 中,new 关键字是用于创建类的新实例的。它的主要作用是为一个对象(Object)分配内存。下面将详细介绍 new 关键字的用法和原理。 一、new 关键字的基本用法 new 关键字...

    Java基础之关键字_Java基础之关键字_源码

    在编程语言的学习中,了解和掌握关键字是至关重要的一步,特别是在Java这种强类型的语言中。本文将深入探讨Java中的关键字,这些关键字是Java语法结构的基础,它们被Java编译器特殊处理,有着特定的含义和功能。 ...

    Java中new关键字和newInstance方法的区别分享

    在Java编程语言中,`new`关键字和`newInstance()`方法都是用来创建对象的,但它们在使用场景和工作原理上存在显著差异。了解这些差异对于编写高效、灵活的代码至关重要。 首先,`new`关键字是Java语法的一部分,...

    Java中new的用法.doc

    ### Java中new关键字的用法详解 #### 一、new关键字的基本概念 在Java编程语言中,`new`关键字主要用于创建对象。它负责为对象分配内存,并调用类的构造函数来初始化对象的状态。 #### 二、new关键字的使用场景 - ...

    java 中newInstance()方法和new关键字的区别

    Java 中 newInstance() 方法和 new 关键字的区别 Java 中的对象创建方式有多种,newInstance() 方法和 new 关键字是其中两种常用的方式。但是,它们之间有着本质的区别。本文将详细介绍 newInstance() 方法和 new ...

    JAVA文件关键字分析程序

    例如,`public`, `class`, `void`, `int`, `if`, `else`, `for`, `while`, `new`, `return`等都是Java的关键字。这个分析程序会遍历给定的Java源代码文件,对这些关键字进行计数,从而找出在代码中使用最频繁的元素...

    java里的关键字

    根据提供的文件信息,我们可以梳理出Java中的关键词以及相关的用法。这份资料主要涵盖了Java语言的基础关键字、编程元素、以及部分API方法的使用示例。接下来,我们将对这些内容进行详细的解释与扩展。 ### Java ...

    2-Java标识符号、关键字、类型

    在Java编程语言中,标识符号、关键字和类型是构建程序的基础元素。理解并熟练掌握这些概念对于编写高质量的Java代码至关重要。以下是对这些主题的详细解释: **标识符号(Identifiers)** 在Java中,标识符是程序员...

    Java标识符、关键字和保留字

    Java中的关键字、保留字和标识符是程序设计的基本组成元素,它们具有特定的含义和用途。 **关键字**: 在Java中,关键字具有特殊的意义,它们是编程语言的保留字,用来指示编译器执行特定的操作。Java关键字是小写...

    java关键字、标识符、注释

    在Java语言中,关键字是具有特殊意义的保留字,它们不能用作变量名、方法名或类名等标识符。Java的关键字用于定义程序结构的重要组成部分,如控制语句、数据类型等。 - **常见关键字**: - `if`, `else`, `while`,...

    如何使用java语言中socket关键字通信

    本文将深入探讨如何在Java中使用Socket关键字进行通信,以及它与相关工具的结合使用。 一、Socket基础知识 Socket,也被称为套接字,是网络编程中的一个抽象概念,它代表了两台计算机之间的连接点。在TCP/IP协议族...

    浅析Java中的 new 关键字

    Java中的`new`关键字是创建和初始化对象的关键操作,它在编程中扮演着至关重要的角色。当我们使用`new`关键字时,实际上是执行了以下几个步骤: 1. 分配内存:Java虚拟机(JVM)在堆内存中为新对象分配所需的空间。...

    java关键字总结文档

    在Java中,关键字具有特殊的语法含义,不能用作标识符(例如变量名或方法名)。以下是对给定文件中提到的Java关键字进行的详细解释与总结: #### 1. `abstract` - **用途**:`abstract`关键字用于声明抽象类或抽象...

    Java关键字详细解

    这篇文档《Java关键字详细解》将深入探讨Java中的关键字及其用途。 首先,我们来看看Java中的主要关键字。`public`、`private`、`protected`是访问修饰符,用于控制类、方法和变量的访问权限。`public`可以被任何...

Global site tag (gtag.js) - Google Analytics