一个类被使用到的时候才会被加载,那么在加载一个类的时候会去执行初始化操作么?还是说,加载类的时候可以延迟执行初始化操作?
例如:
public class A{
public static int a=0;
}
在类被加载的时候,a=0会不会执行?一个类被使用的时候一般分为三个步骤:
1:加载类
2:分配空间
3:初始化
例如:
public class A{
public static int a=0;
}
在类被加载的时候,a=0会不会执行?一个类被使用的时候一般分为三个步骤:
1:加载类
2:分配空间
3:初始化
解决方案 »
- 关于StringBuilder的一些问题,第一次发帖求支持,大家看看
- 如何对两个图形是否重叠进行判断?
- 我想做一个东西 能像windows 里的搜索功能 搜索本地文件
- 数据拟合,合并,大家帮我出出主意。
- JPanel和getContentPane()的问题,急
- java与c++转变的问题
- J2SE如何实现浮动面板?是不是用Frame嵌套?
- 请问关于Applet的显示问题,头疼。
- 有谁了解java的在sun公司的考试
- 雷老虎,我实在想不通下面代码了:为什么产生产生的号码一样?(有时候前几组一样,后几组一样)
- js 中怎样生命一个Hasmap对象?
- String s = new String("xyz");创建了几个String Object?
public static int a=0;
}
在类被加载的时候,a=0会不会执行?
对于这段代码来说,a=0会执行
也就是类加载的时候,static块都会被执行,static方法会加载到方法区
所谓static块,比如
class A {
static { //在类中,用static加花括号括起来的代码叫static块,这些是类加载时执行
System.out.println("我是static块");
}
}
对于static a = 0;可以看作
static a; //定义
static {a = 0;} //赋值
2条语句
一个类被使用的时候一般分为三个步骤:
1:加载类
2:分配空间
3:初始化一个类的使用,你是指什么使用,使调用静态方法,访问静态属性,还是调用构造方法?
在上述说的三种使用中,如果类还没有被加载,都会先加载类所谓分配空间,又是指什么的分配空间?
如果是类对象(也就是Class对象)的分配空间,那么加载类之前,就先为类对象分配空间
如果是指实例对象的分配空间,那么如果类还没有被加载,就在类加载结束以后给对象分配空间初始化是指什么初始化,是static块初始化还是实例对象初始化?
static初始化,就是上面说的static块,这些是在类加载的时候执行还有一种是实例初始化块,如
class A {
{ //这里和static块的区别就是,花括号前面没有static,
//那么在实例初始化的时候(构造方法调用以前)会执行
System.out.println("我是实例初始化块");
}
}
在生成对象实例的时候,先执行初始化块,然后执行构造方法所以,LZ所谓的延迟执行,如果是对象初始化,应该没有这一说,应为生成实例就会执行初始化,除非没有在初始化块或构造方法执行相应的操作,把它放到某个方法里,通过调用方法来达到所谓的延迟执行对于类加载来说,有所谓的延迟执行,就是把初始化工作交给另一个类的static块或方法来完成,这样,因为会需要先加载另一个类,而达到所谓的延迟