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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© alexchy 中级黑马   /  2014-8-25 12:20  /  604 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用,并且静态的代码要优先于主函数


public class StaticCode {

/**
  * @param args
  */
public static void main(String[] args) {
  
  new StaticCodeDemo(5);
  
  //没有具体的指向,类中的静态代码是不会得到执行的
  StaticCodeDemo a=null;
  System.out.println("d");

//通过类名直接调用类中的静态方法
  StaticCodeDemo.show();
}
//静态代码块
static{
  System.out.println("a");
}

}

class StaticCodeDemo{
int i=9;
static{
  System.out.println("b");
}

//这一段属于构造函数
{
  System.out.println("e"+this.i);
  
}
//静态方法,必须要通过类使用时,或者
static void show()
{
  System.out.println("c");
}

//构造函数给对应对象初始化的
StaticCodeDemo(int x)
{
  System.out.println("f");
}
StaticCodeDemo(){}
}

输出结果为:

a
b
e9
f
d

c

运行分析:首先先执行StaticCode 中的静态代码输出a,然后执行new StaticCodeDemo(5);在加载StaticCodeDemo中的静态代码输出b,之后输出构造函数中的e9,之后执行有参数的代码中等的输出语句f,之后是输出d,左后执行StaticCodeDemo中的静态方法输出c


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马