黑马程序员技术交流社区
标题:
类加载的问题??
[打印本页]
作者:
高鑫
时间:
2012-7-30 11:06
标题:
类加载的问题??
本帖最后由 高鑫 于 2012-7-30 12:24 编辑
class Demo {
public static void main(String args[]){
String s=Person.name;
}
}
class Person{
static String name="lisi";
int age=10;
public void show(){
System.out.println(s);
}
}
复制代码
程序中String s=Person.s;这句执行的时候,要先加载Person类, static 修饰的name直接加载到方法区,请问那非静态的show会加载到方法区吗?因为没有创建对象,age应该不会加载到堆内存的吧?写的时候把name写成s了,已经更正
作者:
周坤
时间:
2012-7-30 11:20
加载,是将类文件中的一行行内容存放到了内存当中,并不会执行任何语句。加载时期,即使有输出语句也不会执行。那么就会加载静态成员变量(类变量),在方法区的静态部分静态方法,方法区的非静态部分非静态方法(包括构造函数)。
所以非静态的show会加载到了方法区,至于age作为类的成员变量,没有new出对象,不会加载。
作者:
罗磊
时间:
2012-7-30 11:31
实在看不懂!这程序在我理解范围内!我觉得编译会错误!
作者:
李东升
时间:
2012-7-30 11:59
我也觉得你的代码会报编译错误。。
静态方法,静态属性在运行jvm的时候就已经加载上了,所以那些静态属性,静态方法可以直接通过类名点出来,而不是通过实例点。所以你的代码中,age和show方法必须通过实例才能调用。
作者:
陈汉维
时间:
2012-7-30 12:14
本帖最后由 陈汉维 于 2012-7-30 12:19 编辑
class Demo {
public static void main(String args[]){
String s=Person.s;
}
}
class Person{
static String name="lisi";
int age=10;
public void show(){
System.out.println(s);
}
}
复制代码
什么叫String s = Person.s;
Person里面哪里来的s?
Person类中的age是成员变量,存在于堆内存中。
先加载Person类, static修饰的name直接加载到方法区。
而show方法加载到栈内存里,show输出后,show就出栈了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2