A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

3黑马币
class HaHa {
    static final int a= 1;
    static int b = 2;
    final int  c = 3;
}
1.调用a的时候类会加载进内存吗?
2.a位于内存的哪个地方???
3.b位于类的静态区中吗?
4.c位于堆中吗?
5.class.forName(HaHa)会执行静态初始化 ,HaHa.class就不会,为什么?

24 个回复

倒序浏览
不太懂,顶一个吧
回复 使用道具 举报
调用a类会加载到内存
a位于静态常量区
b位于静态区
c位于常量区
回复 使用道具 举报

class HaHa {
    static final int a= 1;
    static int b = 2;
    final int  c = 3;
}
1.调用a的时候类会加载进内存吗?             会
2.a位于内存的哪个地方???                  在静态区中
3.b位于类的静态区中吗?                 对
4.c位于堆中吗?               对,c不允许被二次赋值了。
5.class.forName(HaHa)会执行静态初始化 ,HaHa.class就不会,为什么?        因为class.forName(HaHa)把类加载进内存了,而HaHa.class就没有进内存

点评

你怎么知道.class没有把类加载进内存?  发表于 2016-2-13 18:39
回复 使用道具 举报
一念执着漂流 来自手机 中级黑马 2016-2-18 12:31:02
报纸
对啊。。。。。。。
回复 使用道具 举报
1.肯定会,要不然怎么类名调用?

点评

可以调用a,但是并不执行b和c的初始化. 具体怎么弄的我忘记了,java编程思想上面有写.  发表于 2016-2-29 21:18
回复 使用道具 举报
wusiyi 中级黑马 2016-2-18 13:35:21
7#
2.应该是静态池
回复 使用道具 举报
wusiyi 中级黑马 2016-2-18 13:37:04
8#
3.我觉得是的,老师画图是那么画
回复 使用道具 举报
1.调用a的时候类会加载进内存吗? 会的.
2.a位于内存的哪个地方??? 不清楚
3.b位于类的静态区中吗? 是的
4.c位于堆中吗? 是的
5.class.forName(HaHa)会执行静态初始化 ,HaHa.class就不会,为什么? 类字面常量直接获得class对象引用, 不会初始化, 至于为什么还不知道.
回复 使用道具 举报
你编译能过吗

点评

当然能  发表于 2016-2-29 21:10
回复 使用道具 举报
class HaHa {
    static final int a= 1;
    static int b = 2;
    final int  c = 3;
}
1.调用a的时候类会加载进内存吗?             会
2.a位于内存的哪个地方???                  在静态区中
3.b位于类的静态区中吗?               ststic  对
4.c位于堆中吗?               对    final修饰
5.class.forName(HaHa)会执行静态初始化 ,HaHa.class就不会,为什么?        因为class.forName(HaHa)把类加载进内存了,而HaHa.class就没有进内存
回复 使用道具 举报
看了之后觉得自己看的java基础算是白看了。。。好多不懂。。。

点评

这个问题有点偏, 感觉算不上基础吧  发表于 2016-2-29 21:20
个人感觉这不算基础了.. 有点偏的问题  发表于 2016-2-29 21:19
回复 使用道具 举报
1、static的成员是随着类的加载而加载,所以调用a的时候类肯定也近了内存,而且a只能由类调用;2、a位于堆内存中,因为静态类在堆内存中 3、b和a一样 4、c是类的成员,类在堆内存中,所以c也在堆内存中;5、这个我不会。。请前辈指教

点评

如果static成员没有被final修饰,那么 1.当类加载时,该成员不一定执行静态初始化, 2.该成员被调用时,该类一定已经被加载了. 我不知道为什么,所以来提问   发表于 2016-2-29 21:24
回复 使用道具 举报
class 本身就是静态的,所以静态成员和类一起加载
回复 使用道具 举报
tsldxszd 来自手机 中级黑马 2016-3-6 19:00:28
15#
本帖最后由 tsldxszd 于 2016-3-6 23:50 编辑

调用a的时候类会加载进内存吗?会,主动调用就会加载,但没有实例化。
2.a位于内存的哪个地方???a加了final的属性是一个value,而不是一个field,位于常量池。调用它不会导致类的初始化,这一点你可以做个实验,但它同时又加了
static,那么这个a应该在字节码文件 里,属于方法区也说 的过去,因为可以用静态 的 方法调用a。我更倾向于方法区里有个变量a指向了常量池中的 地址。
3.b位于类的静态区中吗?位于 方法区,也就是静态区,调用会初始化类
4.c位于堆中吗?c位于常量池,在堆中类的 对象的属性里 有一个c属性指向常量池中c的内存地址。
5.class.forName(HaHa)会执行静态初始化 ,HaHa.class就不会,为什么?因为它还没有显示的加载,类的加载虚拟机并没有强制约束,尤其自由把握,但是有那么几种情况,类如还没初始化,会立即进行初始化,既没有访问类变量,创建实例,访问类静态方法,也没有反射类的字节码文件,被动调用不会初始化类
回复 使用道具 举报
1 ,调用a时 类会加载进内存 生成HaHa.class文件
2,a位于内存的方法去中的静态区
3,b也在静态去
4,xxx.class 表示已加载过了,当类加载时,静态代码只执行一次,
回复 使用道具 举报
1,调用类中的 任何东西 类都会加载进内存,类要先加载进内存,才能执行类中的语句,2,a位于方法区的静态区.3,b也是在静态区.4,c在堆中.5,xxx.class 文件表示已经被加载过了,静态代码块只执行一次
回复 使用道具 举报
1,会,调用类中的任何方法和成员变量 ,类都会先加载进内存,然后才能执行类中的语句  
2,a位于内存的静态区
3,b和a一样位于静态区
4,c位于堆中
5,xxx.class 文件表示类已经加载过了,静态代码块 只执行一次,下一次加载类时就不执行了
回复 使用道具 举报
1,调用a的时候会类会加载内存,
2,位于方法区的静态区
3,b位于静态区
4,c不位于堆中,因为被final修饰为常量,位于方法去的常量池
5一个是类,一个是字节码文件,静态变量属于类所以会随着类的加载而加载
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马