一个类被使用到的时候才会被加载,那么在加载一个类的时候会去执行初始化操作么?还是说,加载类的时候可以延迟执行初始化操作?
例如:
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:初始化
解决方案 »
- 求阶乘!!!!
- 这两者的写法有什么区别?那一种更好呢?
- 反射出错java.lang.IllegalArgumentException: argument type mismatch
- 日期加时间问题!!非常急!!!!!
- 关于sql标记库的 急!!
- 大哥,大姐,大虾们,小妹有个难题请好心的人帮忙!很急!
- socket连接问题
- 用java方法可以读取批处理文件吗?
- jtable菜鸟求助
- 求解,输入一个整形数字,小于等于4位,判断为几位数,并输出各个位数的数字,用chack方法
- 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块或方法来完成,这样,因为会需要先加载另一个类,而达到所谓的延迟