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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

baofanfan

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© baofanfan 初级黑马   /  2013-3-15 22:25  /  1664 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class StaticCode {
public static void main(String[] args) {
  Code code1 = new Code();
  
  Code code2 = new Code();
}
}
class Code{
{
  System.out.println("普通的代码块...");
}

static{
  System.out.println("静态代码块...");
}

public Code(){
  System.out.println("构造方法...");
}
}

4 个回复

倒序浏览
结果为:静态代码块,普通的代码块,构造方法,普通代码块,构造方法。
因为静态代码块即static的代码块优先于构造代码块,构造代码块优先与构造方法。但是不管有多少个对象产生,静态代码块只执行一次。
静态代码块是:
  1. static{
  2.    System.out.println("静态代码块...");
  3. }
复制代码
构造块是:
  1. class Code{
  2. {
  3.    System.out.println("普通的代码块...");
  4. }
复制代码
构造方法为:
  1. public Code(){
  2.    System.out.println("构造方法...");
  3. }
复制代码
回复 使用道具 举报
代码的执行结果:
  1. 静态代码块...
  2. 普通的代码块...
  3. 构造方法...
  4. 普通的代码块...
  5. 构造方法...
复制代码
原因:
1、静态代码块优于普通代码块执行,普通代码块优于构造函数执行;
2、静态代码块随着类的加载而执行,且只执行一次,用于给类初始化;
3、普通构造代码块是给所有对象统一初始化。

Code code1 = new Code();
语句先执行了静态代码块
static
{
  System.out.println("静态代码块...");
}
然后执行普通构造代码块
{
  System.out.println("静态代码块...");
}
最后执行构造函数
public Code()
{
  System.out.println("构造方法...");
}

Code code2 = new Code();
因为Code类已经在堆内存中加载,所以不再执行静态代码块。语句对code2初始化执行
普通构造代码块
{
  System.out.println("静态代码块...");
}
最后执行构造函数
public Code()
{
  System.out.println("构造方法...");
}
回复 使用道具 举报
结果为:静态代码块,普通的代码块,构造方法,普通代码块,构造方法。
回复 使用道具 举报

支持!

我是来刷墙的<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>光子祛斑
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马