黑马程序员技术交流社区

标题: 请问这段代码的结果是什么?问什么? [打印本页]

作者: baofanfan    时间: 2013-3-15 22:25
标题: 请问这段代码的结果是什么?问什么?
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("构造方法...");
}
}

作者: jdzzlf    时间: 2013-3-15 23:24
结果为:静态代码块,普通的代码块,构造方法,普通代码块,构造方法。
因为静态代码块即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. }
复制代码

作者: 丘凤光    时间: 2013-3-15 23:49
代码的执行结果:
  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("构造方法...");
}

作者: 王小丑    时间: 2013-3-16 09:50
结果为:静态代码块,普通的代码块,构造方法,普通代码块,构造方法。
作者: hjcpempb    时间: 2013-6-19 17:56
标题: 支持!
我是来刷墙的<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>光子祛斑




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