Java对象创建全解析:从内存分配到多种创建方式详解

创始人
2024-12-15 03:17:37
0 次浏览
0 评论

一个Java对象创建的全过程详解

在Java编程中,创建对象通常只需要“new”关键字,但也有一些例外,例如对象复制和反序列化过程。
首先,当虚拟机遇到新指令时,它会检查类符号引用是否已被加载、解析和初始化。
如果没有完成,则会启动相应的类加载过程。
一旦类被加载,就确定了对象所需的内存大小,然后进行内存分配。
根据虚拟机使用的垃圾收集机制,可以直接分配或通过空间压缩和排序来分配。
内存分配过程必须保证并发安全。
一旦分配了内存,所有区域(除了对象头)都将被初始化为零。
然后对象头会被初始化,包括类信息、元数据引用、哈希码等。
new语句之后,将执行对象的构造函数来完成初始化过程。
初始化一个类涉及几个步骤,其中内存分配是这里关注的中心。
在JDK1.8中,StringTable(存储字符串池)存储在堆内存中,可以通过调整-XX:StringTableSize参数来改变桶的数量。
为了避免重复创建相同的字符串,例如用户的省份,可以使用String类的intern()方法。

JAVA创建对象有哪几种方式???

JAVA中创建对象的四种方法:

显式创建对象有四种方法:

1.使用new语句创建对象,这是创建对象最常用的方法。

2.使用反射调用类Java.lang.Class或java.lang.reflect.Constructor的newInstance()实例方法。

3.调用对象的clone()方法。

4.使用反序列化的方式调用java.io.ObjectInputStream对象的readObject()方法。

下面介绍使用前面三种方法创建对象的过程。

上述程序的打印结果如下:

callSecondconstructor

calldefaultconstructor

c1:name=unknown,age=0

调用第二个构造函数

c2:name=Tom,age=20

c2==c3:false

c2.equals(c3):true

c3:name=Tom,age=20

从上面的打印结果可以看出、使用new当使用类对象的语句或者newInstance()方法创建Client对象时,Client类的构造函数会被执行,但是,当使用该对象的clone()方法创建Client对象时,Client类的构造函数将不会被执行。
(区别)

除了上述四种显式创建对象的方法外,还可以在程序中隐式创建对象,包括以下几种情况:

1行在Java命令中,一个设备会VirtualJava创建一个对应的字符串对象,将其组织成一个字符串数组,然后将该数组作为参数传递给程序的主输入法(Stringargs[])。

2.程序代码中String类型的直接数字对应的是String对象,例如:

After上述程序执行时,有实际上Memory中只有两个String对象,一个是直接数字,由Java虚拟机隐式创建,另一个是new语句显式创建。

3.“+”字符串运算符的结果是一个新的字符串对象。
例如:

4.当Java虚拟机加载一个类时,它会隐式创建一个描述该类的类实例。

JAVA中怎样使用new关键字创建一个类的对象?

new关键字创建对象的方式如下:\x0d\x0a类名对象名=new类构造函数;\x0d\x0a例如:\x0d\x0aClass:\x0d\x0aclassA{\x0d\x0aintid;\x0d\x0aintname\x0d;\x0a/*构造函数*/\x0d\x0apublicA(){\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0a创建对象:\x0d\x0aAa=newA();\x0d\x0a\x0d\x0a希望这对您有好处。
热门文章
1
SQL多表连接查询全解析:JOIN语句应... sql多表关联查询在执行SQL多表连接查询时,可以使用JOIN语句将多个表连接在...

2
Java中字符串类型详解:String与... 变量有字符类型,为什么没有字符串类型??基本类型:charshort、int、l...

3
JavaSE与JavaEE:从基础到企业... javase 和javaee的区别?JavaSE和JavaEE...

4
Java程序员面试必知:核心技术问答与技... java编程程序员技术面试常见面试?随着互联网的不断发展,Java开发已经成为很...

5
Java.exe与Javaw.exe:区... 程序中java和javaw有什么区别java和javaw的区别:两者都是Java...

6
深入解析:Java中的javax包及其与... JAVA导入时,什么是javax?awt是java1.0,swing是java2...

7
大专生转行自学Java,迷茫时如何找到方... 我是大专生因没有好好学所以现在后悔了我想从事软件编程我正在自学java不知道怎么...

8
Java中Scanner类导入位置及使用... 在java中这句语言“importjava.util.Scanner;”是什么意...

9
Java数组倒序输出:排序后逆序存储方法... Java数组倒序输出?1.反转数组的方法有很多种,比如先排序,然后倒序存储pub...

10
C语言改错难题解析:第二处错误详解及修改... 请问这个C语言改错题怎么做呀?我做了很久都没写出来,第二处错误不知道怎么改。那位...