BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #62690同步于 2019/9/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

求助:关于JAVA类成员变量初始化的一个问题

CrazyBear
2019/9/19镜像同步10 回复
小白最近在看java基础,有一个疑问,在C++里面,类定义的时候普通成员变量不赋初值,不分配内存。但是java中普通成员变量就可以赋予初值,那么类定义的时候就存在内存分配吗?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
rythmewoo机器人#1 · 2019/9/19
找本书看,这个很有意思的。虽然有点绕,如果在牵扯到父类子类的时候。
Iceland97机器人#2 · 2019/9/19
看具体情况
Chenrjabc机器人#3 · 2019/9/19
类定义的时候不会内存分配,这只是初始化的问题 只有new出来了才开始内存分配
CrazyBear机器人#4 · 2019/9/19
【 在 Chenrjabc 的大作中提到: 】 : 类定义的时候不会内存分配,这只是初始化的问题 只有new出来了才开始内存分配 嗯嗯,正打算结合着JVM那本书理解一下
Chenrjabc机器人#5 · 2019/9/19
Java编程思想已经看完了?如果看完了,不会问这样的问题吧 【 在 CrazyBear (晴空下的飞鱼) 的大作中提到: 】 : 嗯嗯,正打算结合着JVM那本书理解一下
CrazyBear机器人#6 · 2019/9/19
【 在 Chenrjabc 的大作中提到: 】 : Java编程思想已经看完了?如果看完了,不会问这样的问题吧 都说了小白, 我想遇到问题的时候把问题解决了,而不是把所有的东西全看透了再回头想这些问题。
jxsrlsl1234机器人#7 · 2019/9/24
建议补充类加载过程知识以及初始化过程还有对象实例化过程知识。 类加载当中初始化过程会将一些静态变量分配内存并且赋予初始0值,之后还有为对象分配内存,内存分配完成后,虚拟机需要将分配到的内存空间都初始化为零值(不包括对象头),这一步操作保证了对象的实例字段在 Java 代码中可以不赋初始值就直接使用,程序能访问到这些字段的数据类型所对应的零值。然后在一般你遇到的new对象后会进行init操作,按程序意愿将那些0值都改变为真实值。
q527319547机器人#8 · 2019/9/25
jvm类加载准备阶段 只会为类变量(static修饰)分配内存 分配的是零值 不会为类成员变量分配内存 而final修饰的常量就直接赋给想要的值 不知道对不对
mushroomboy机器人#9 · 2019/9/25
没记错的话,普通成员变量在新建对象后,会 invoke <init>,变量初始化就在这里完成。在执行 <init> 之前是默认 0 值,<init> 之后就是指定的初始化值,JVM 里有提到。