关于Java中的代码块
Java中除了构造方法以外提供了其他的初始化方式,这里说两种不同于C++风格的方式:
构造块,静态代码块。至于同步代码块以后再说。
先看下面例子:
public class Main{
{
System.out.println("构造块");
}
static{
System.out.println("静态代码块");
}
public Main(){
System.out.println("构造函数");
}
public static void main(String args[]){
Main m;
}
}
执行结果为:
静态代码块
为什么呢,程序里面只是申请了一个引用,但是并没有实例化,这说明构造方法和构造块都是在实例化时调用的,而静态代码块不是,分析内存知道,静态的并不属于对象,而是属于类,不论实例化多少对象,静态的内存只有一个,在出现声明引用的时候即分配内存!
再看下面例子:
public class Main{
{
System.out.println("构造块");
}
static{
System.out.println("静态代码块");
}
public Main(){
System.out.println("构造函数");
}
public static void main(String args[]){
Main m=new Main();
}
}
这个程序跟上面那个比较只是实例化了一个对象,为对象分配了内存,那么看执行结果:
静态代码块
构造块
构造函数
这个说明了一个问题:在程序执行过程中,静态代码块优于构造块,构造块优于构造函数执行。
再看下面代码:
public class Main{
{
System.out.println("构造块");
}
static{
System.out.println("静态代码块");
}
public Main(){
System.out.println("构造函数");
}
public static void main(String args[]){
Main m=new Main();
Main m1=new Main();
}
}
此代码与上面代码相比较是实例化了两个对象,那么看执行结果:
静态代码块
构造块
构造函数
构造块
构造函数
此结果足以说明一个问题:静态代码块不论实例化多少对象,只调用一次!而其他的执行多次!
注:静态代码块是在main方法执行之前执行的!
|
|