首先,我们看一个实际例子:

class Test{

    public static int X=100;
public final static int Y=200; public Test(){
System.out.println("Test构造函数执行");
} static{
System.out.println("static语句块执行");
} public static void display(){
System.out.println("静态方法被执行");
} public void display_1(){
System.out.println("实例方法被执行");
}
} public class StaticBlockTest {
public static void main(String args[]) {
Test t = new Test();
new Test();
}
}

  程序的输出为:

static语句块执行
Test构造函数执行
Test构造函数执行

  实际上,static块的执行发生在“初始化”的阶段。初始化阶段,jvm主要完成对静态变量的初始化静态块执行等工作。不初始化则不会执行static块。

  需要注意的一点是:非static变量不可以置于static块中。

一、静态变量的初始化

public class Test {
static {
_i = 20;
}
public static int _i = 10; public static void main(String[] args) {
System.out.println(_i);
}
}

  代码输出:10

public class Test {

    public static int _i = 10;
static {
_i = 20;
}
public static void main(String[] args) {
System.out.println(_i);
}
}

  代码输出:20

  结论:我们要注意到这两个输出不同的区别仅在于static变量与static块的位置不一样。也就是说对于静态变量,它的初始化按照顺序初始化。

问题2:JDK如何处理static块

  类定义中可以存在多个static块吗?回答是可以。如:

public class Test {
public static int _i;
static {
_i = 10;
} static {
_i = 20;
} public static void main(String[] args) {
System.out.println(_i);
}
}

  输出结果:20

  输出符合问题一得出的结论。

  结论:不仅类定义中可以有多个static块,而且在编译时编译器会将多个static块按照代码的前后位置重新组合成一个static块。

Java static块的更多相关文章

  1. java static{}块

    java中static{}块只有在类加载是才会被调用. 这说明:static只有可能被调用一次. 原因:首先理解什么是类加载,区分类加载和申明对象的区别. public class StaticTes ...

  2. java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)

     java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...

  3. java的static块执行时机

    一.误区:简单认为JAVA静态代码块在类被加载时就会自动执行.证错如下: class MyClass1 { static {//静态块 System.out.println("static  ...

  4. Java中static块执行时机

    Java中static块执行时机 演示例子 在使用static进行初始化的操作,怎么也执行不了!代码如下: public class StaticDemo { public static final ...

  5. java的static块执行时机<转>

    一.误区:简单认为JAVA静态代码块在类被加载时就会自动执行.证错如下: class MyClass1 { static {//静态块 System.out.println("static  ...

  6. Java静态变量的初始化(static块的本质)

    Java静态变量的初始化(static块的本质) 标签: javaclassstring编译器jdk工作 2010-02-06 07:23 33336人阅读 评论(16) 收藏 举报  分类: Jav ...

  7. java的static块及相关内容

    原文地址:http://blog.csdn.NET/lubiaopan/article/details/4802430     感谢原作者! static{}(即static块),会在类被加载的时候执 ...

  8. java static代码块执行时机

    之前一直认为static块是在class load的时候执行,今天在验证Spring初始化Context loader的时候,发现bean的static块并没有执行. Java代码: 1 Class ...

  9. Java static{}语句块详解

    [转自] http://blog.csdn.net/lubiaopan/article/details/4802430 static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一 ...

随机推荐

  1. 安装 SQL Server2008 安装程序规则支持提示“重新启动计算机”失败

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 删除 PendingFileRenameOperations这个 ...

  2. 【译】addEventListener 第二个参数

    这是原文链接:Our Backwards DOM Event Libraries 浏览器APIs 先简单回顾一下各个浏览器提供了哪些绑定事件的接口. IE浏览器提供了element.attachEve ...

  3. Tomcat6.0数据源配置

    涉及context.xml和server.xml http://blog.csdn.net/onlymilan/article/details/5493485

  4. memmove 的实现

    baidu的笔试题目 用C语言实现一个公用库函数void * memmove(void *dest,const void *src,size_t n).该函数的功能是拷贝src所指的内存内容前n个字节 ...

  5. [转载] 与WIN不同,linux替换文件夹会删除原文件夹下的全部内容!

    今天差点把源码给覆盖掉了><...555... 虚惊一场!!看了一篇博客分析这种情况.我的环境是CentOS5.5,不会出现文件夹直接被覆盖的情况,但是在Linux下不要用Win下的一些直 ...

  6. RBAC角色权限设计思路

    1 设计思路 为了设计一套具有较强可扩展性的用户认证管理,需要建立用户.角色和权限等数据库表,并且建立之间的关系,具体实现如下. 1.1 用户 用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名.密 ...

  7. phpcms 2008和discuz X3.1实现同步登陆退出论坛(已实现)

    网络上文章很多,按步骤配置好了之后phpcms可以同步登录dz,但是dz登录后状态却无法同步到phpcms,网络上找了很多资料都大同小异,头大.只能自己调试了,废话不多说了.       以下网络上抄 ...

  8. Altium Designer打印设置

    1:1打印PCB设置 如图1所示,打开PCB,点击“FileàPage Setup…”. 进入设置对话框,在“ScalingàScale Mode”下拉条中选择 “Scale Print”. 如图3所 ...

  9. protocol buffer和当年corba ,和现在SOA有啥异同点

    CORBA是对象管理集团(OMG)的一个标准,使得不同语言编写的,运行在不同计算机上的能够协同工作.标准包括分布式计算的通讯协议(GIOP和IIOP),可映射到多种语言的接口描述语言(IDL),对象请 ...

  10. hdu-1800

    思路: 这题被坑的不轻. 首先花了一段时间想明白了思路是要找出现次数最多数字,以为这题就这样解决了,结果发现每个数字的最大长度是30,long long都装不下,因此就要用字符串来保存处理.然后在in ...