| 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------------,这个就是你这个程序的整个执行流程
 
 |