黑马程序员技术交流社区

标题: 请高手指点?? [打印本页]

作者: 自己玩    时间: 2012-7-1 22:53
标题: 请高手指点??
本帖最后由 自己玩 于 2012-7-1 23:13 编辑

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------------


作者: 王一军    时间: 2012-7-1 23:09
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------------,这个就是你这个程序的整个执行流程

作者: 李建锋    时间: 2012-7-1 23:11
虚拟机加载的时候也是按普通类加载的方式加载的,即1 静态代码块
2 构造代码块
3 构造函数
的顺序加载的,只不过main方法是不用调用,虚拟机做完那些常规的工作,就会进入main方法!
作者: 陌花╮有意、    时间: 2012-7-1 23:32
这个要看加载顺序:
1.class字节码
2.静态代码块                //所以有 -------stati----------
3.分配类的存储空间
4.默认初始化
5.显示初始化
6.构造代码块                //所以有 ---------{}----------
7.构造函数                  //所以有 ---------DoSomething---------  

在静态过后就是main函数执行,所以 ----------mian---------- 在前面




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2