package cn.itcast.servlet;
public class DoSomeThing {
/**
* @param args
*/
DoSomeThing() {
System.out.println("----------DoSomething------------");
}
static {
System.out.println("----------static------------");
}
{
System.out.println("----------{}------------");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("mian");
new DoSomeThing();
}
}
虚拟机是main()方法中开始执行,但是请看打印结果!
----------static------------
mian
----------{}------------
----------DoSomething------------
我来帮你说说吧
static {
System.out.println("----------static------------");
}
这种写法,称为java中的静态代码块一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下也一定会执行,所你你程序运行的时候首先执行了 System.out.println("----------static------------");输出了 ---------static------------,
静态代码块的作用就是用来初始化一些项目最常用的变量或对象;静态方法可用作不创建对象也可能需要执行的代码.
执行完静态代码块之后就会返回到main方法执行 System.out.println("mian"); 所以紧跟其后你看到了输出了 main 执行完 之后再往下执行会执行到
new DoSomeThing(); 这样的写法在java中称之为匿名对象,就是给DoSomeThing类创建了实例
其次在说下
{
System.out.println("----------{}------------");
}
这样的写法在java中称为构造块,构造块是在类被实例化的时候最先执行,其优先于构造方法。所以在DoSomeThing类被实例话的时候会首先执行构造块中的代码System.out.println("----------{}------------"); 所以你看到紧接着输出了 ----------{}------------ 构造块被执行完之后,就会去执行构造方法中的内容
DoSomeThing() {
System.out.println("----------DoSomething------------");
}
所以最后输出的是构造方法中的信息----------DoSomething------------,这个就是你这个程序的整个执行流程
|