标题: 类加载的问题 [打印本页] 作者: 杜佳瑞 时间: 2012-8-6 20:42 标题: 类加载的问题 我知道创建对象时首先将这个类加载到内存中,也知道程序分为编译时期和运行时期.
我的问题是 1,加载是在什么时期加载的呢?编译时期就加载了还是运行时再加载?
2,静态方法随着类的加载而加载,先于对象,下面程序当A类加载时,成员变量a和成员函数show也会加载,那么当程序运行时刻,A.show()调用时,a=new A()这个初始化什么时候执行呢?是方法一调用就执行吗?
class A
{
static A a=new A();
public static A show()
{
return a;
}
}
class B
{
public static void main(String[] args)
{
A a=A.show();
}
}
作者: 樊占江 时间: 2012-8-6 20:48
方法调用后就执行。 你可以加断点 调试一下,就知道了作者: 黑马王冬冬 时间: 2012-8-6 22:13
1.首先,编译时和运行时是针对多态来说的,例如:
List list = new ArrayList();
其中,对象list的编译时类型是List,运行时类型是ArrayList。
2.类的加载指的是系统将class文件读入内存,并为之创建一个java.lang.Class对象。接着在类的初始化阶段,java虚拟机主要进行静态field的初始化。
3.当调用A类的静态方法时,系统会初始化A类,首先会初始化静态field,这时会创建A类的对象,然后执行方法show。
可以通过如下程序进行测试
class A
{
static A a=new A();
A(){
System.out.println("A constructor");
}
public static A show()
{
System.out.println("A show");
return a;
}
}
class B
{
public static void main(String[] args)
{
A a=A.show();
}
}
复制代码
作者: 杜佳瑞 时间: 2012-8-6 22:26
黑马王冬冬 发表于 2012-8-6 22:13
1.首先,编译时和运行时是针对多态来说的,例如:
List list = new ArrayList();
其中,对象list的编译时类 ...