- 浏览: 176183 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (321)
- eclipse (4)
- idea (2)
- Html (8)
- Css (14)
- Javascript (8)
- Jquery (6)
- Ajax Json (4)
- Bootstrap (0)
- EasyUI (0)
- Layui (0)
- 数据结构 (0)
- Java (46)
- DesPattern (24)
- Algorithm (2)
- Jdbc (8)
- Jsp servlet (13)
- Struts2 (17)
- Hibernate (11)
- Spring (5)
- S2SH (1)
- SpringMVC (4)
- SpringBoot (11)
- WebService CXF (4)
- Poi (2)
- JFreeChart (0)
- Shiro (6)
- Lucene (5)
- ElasticSearch (0)
- JMS ActiveMQ (3)
- HttpClient (5)
- Activiti (0)
- SpringCloud (11)
- Dubbo (6)
- Docker (0)
- MySQL (27)
- Oracle (18)
- Redis (5)
- Mybatis (11)
- SSM (1)
- CentOS (10)
- Ant (2)
- Maven (4)
- Log4j (7)
- XML (5)
最新评论
1. Java中new关键字
2. 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对象,如果成功则返回这个对象的引用,开发者不可直接操作对象实例,需要通过这个引用“牵引”。
发表评论
-
Java中获取IP地址、子网掩码、网关地址
2019-06-26 10:53 01. Java中获取IP地址、子网掩码、网关地址、ping连通 ... -
Java中ThreadLocal
2019-04-19 10:44 01. Java中ThreadLocal Java中的Th ... -
Java中原子性锁synchronized、Lock
2019-04-18 15:19 01. synchronized依赖JVM 1) 修饰代码 ... -
Java中原子性Atomic
2019-04-18 14:45 01. Atomic包简介 java.util.concu ... -
开发常用链接
2019-03-26 11:21 0在线工具:http://tool.oschina.net/ ... -
java1234学习目录
2019-03-21 11:08 01-01-01 N01 J2SEv2(41课时) ... -
Java中TCP和UDP
2018-10-25 10:55 3171. 网页内容获取 Url1.java impor ... -
Java中Thread线程
2018-10-25 09:38 3551. 实现线程的两种方式 1. 继承Thread类并重写 ... -
Java中serializable序列化
2018-10-24 14:46 4421. 序列化 transient不会被序列化。 imp ... -
Java中CharSet集
2018-10-24 11:31 5001. CharSet集 import java.nio. ... -
Java中RandomAccessFile类
2018-10-24 11:30 4641. RandomAccessFile类 1. 使用Ra ... -
Java中I/O的字符流InputStreamReader和OutputStreamWriter
2018-10-22 09:43 4051. InputStreamReader和OutputStre ... -
Java中其它输入输出流
2018-10-22 09:08 4361. ByteArrayInputStream流 以ar ... -
Java中I/O的OutputStream流
2018-10-22 08:54 4541. Java中I/O的OutputStream流 1. ... -
Java中I/O的InputStream流
2018-10-22 08:42 4331. Java中I/O的InputStream流 1. ... -
Java中I/O的File类
2018-10-19 13:45 4031. Java中I/O的File类 1. 在window ... -
Java中innerClass内部类
2018-10-18 09:37 3991. Java中innerClass内部类 用AA.BB ... -
Java中adapter适配器
2018-10-18 08:36 5441. Java中adapter适配器 适配器adapte ... -
Java中awt包
2018-10-17 11:26 15331. Java中awt包 AWT事件模型Event 1 ... -
Java中frame对象
2018-10-17 10:56 6191. Java中frame对象 1. Frame对象 ...
相关推荐
Java中new关键字和newInstance() 的区分。
new - 11 - null - 11 - package - 11 - private - 11 - protected - 12 - public - 12 - return - 13 - short - 13 - static - 13 - super - 14 - switch - 14 - synchronized - 15 - this - 16 - throw - 16 - ...
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法一个是关键字外,最主要的区别是创建对象的方式不同
java中的new关键字是实例化对象,接下来本文通过一个案例给大家讲解Java中的 new 关键字,感兴趣的朋友可以参考下
和其他高级语言一样javascript中也有new关键字,我们以前认知的new是用来创建一个类的实例对象,但在js中万物皆是对象,为何还要new关键字呢,其实js中new关键字不是用来创建一个类的实例对象,而是用于继承。...
主要介绍了java 中newInstance()方法和new关键字的区别的相关资料,希望通过本文大家能掌握他们之家的区别与用法,需要的朋友可以参考下
在Java中, 可以使用final关键字修饰类、方法以及成员变量。 (1).final标记的类不能被继承; (2).final标记的方法不能被子类复写; (3).final标记的变量即成为常量,只能被赋值一次. 注意: 如果使用final来...
Static关键字可以修饰什么? 从以下测试可以看出, static 可以修饰: 1. 语句块 2. 成员变量(但是不能修饰局部变量) 3. 方法 4. 接口(内部接口) 5. 类(只能修饰在类中的类, 即静态内部类) 6. ...
用CSS实现java C#等程序关键字加亮的效果。 <script type="text/javascript" src="prettify.js"></script> <title>Web.java ()"> package org.lc.util; import java.io.IOException; ...
Java static 静态关键字 某个类中的成员或者方法加上static之后,该成员或者方法是属于类(Class)的,而不属于对象(Object)的,也就是说,你用某个Class类new出来的东西的空间当中,不包含这个static成员或对象。...
Java中的数组是对象,可以使用new关键字创建。 Java中的字符串是不可变的,可以通过加号进行连接操作。 Java中的条件语句使用关键字if-else实现,也可以使用switch语句。 Java中的循环语句有for、while和do-while。 ...
new:新建,用于创建一个新的对象。 null:空,用于表示一个空对象引用。 package:包,用于定义一个包。 private:私有,用于定义一个私有成员或方法。 protected:受保护的,用于定义一个受保护的成员或方法。 ...
面试官Q1:请说说static关键字,你在项目中是怎么使用的? static 关键字可以用来修饰:属性、方法、内部类、代码块; static 修饰的资源属于类级别,是全体对象实例共享的资源; 使用 static 修饰的属性,静态属性...
static关键字,主要描述全局的概念,利用该属性可以定义属性和方法,但是90%情况下很少直接编写static。 现在假设定义一个只描述中国人的类,类中包含:姓名、年龄、国家,按之前的概念设计如下: protected void ...
Java static关键字解析静态内部类(默认指外部类的内部类)静态方法静态变量静态语句块 范围:只围绕外部类进行讨论,例如内部类的内部类这种多层套娃式的暂不进行讨论 jdk版本: jdk8 静态内部类(默认指外部类的...
这可以通过使用new关键字和类构造函数来完成。 java Person person1 = new Person("John Doe", 30); 访问对象属性(Attributes):一旦对象被创建,你就可以通过使用.操作符来访问和修改对象的属性。 java System.ou
java关键字源码到Java10 翻译Java源代码以使用jdk的10 var关键字。 使用尊贵的生成解析器和侦听器。 建造 编译jar或从发行版中下载(如果可用): mvn package ls -la target/ ... toJava10.jar 用法 将其指向,默认...
前言 Java是面向对象的语言,所谓“万事万物皆对象”就是Java是基于对象来设计程序的,...new关键字 反射 clone 反序列化 Unsafe.allocateInstance 为了便于说明和理解,下文仅针对new出来的对象进行讨论。
26.java的awt和swing组件的GUI设计的关键 ...36.除了使用new关键字创建对象意外,试列举另外三种以上创建实例的方式? 37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别?
new关键字,new创建对象实例(对象实例在堆内存中),对象引用指向对象实 例(对象引用存放在栈 内存中)。一个对象引用可以指向0个或1个对象(一根 绳子可以不系气球,也可以系一个气球);一个 对象可以有n个引用...