A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 自己玩 黑马帝   /  2012-7-1 22:53  /  1610 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 自己玩 于 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------------

3 个回复

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

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

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

在静态过后就是main函数执行,所以 ----------mian---------- 在前面
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马