首先,我们先看一段程序,代码如下:

public class Father
{
public Father() //构造方法
{
System.out.println(" 父类构造方法");
}
static //静态块
{
System.out.println(" 父类静态块");
}
//非静态块
{
System.out.println(" 父类非静态块");
}
public static void main(String[] args)
{
System.out.println(" main方法开始");
Father father = new Father();
}
}

运行结果如下所示:

从运行结果可以看出,程序首先执行静态块的内容,然后才开始main()方法,其次执行非静态块,最后加载构造方法。

如果这个类有个子类Son.java继承Father.java,那么运行结果又该如何呢?

public class Son extends Father
{
public Son() //子类构造方法
{
System.out.println(" 子类构造方法");
}
static //子类静态块
{
System.out.println(" 子类静态块");
}
{ //子类非静态块
System.out.println(" 子类非静态块");
} public static void main(String[] args)
{
System.out.println(" main方法开始");
Son son = new Son();
}
}

运行结果如下所示:

从这两个程序的运行结果,我们可以看出,

1、上述程序并非首先从main()方法开始执行的,而是首先加载执行静态块,然后找到main方法的入口,执行main方法,紧接着执行非静态块,最后执行构造方法。

2、如果有子类,那么首先执行父类的方法后,然后才执行子类的方法。

这到底是为什么呢?

我们先分析静态块和非静态块的区别:

Java中静态块和非静态块中的区别是生命周期不一样。
静态代码块,在虚拟机加载类的时候就会加载执行,先于主方法的执行,并只执行一次;
非静态代码块,在创建对象的时候(即new一个对象的时候)执行,每次创建对象都会执行一次,非静态块是在每次实例化类的对象时执行的,而且执行在构造方法之前。

顺便说一下,静态方法与静态块的区别:

(1)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如:

static
{
//静态块内容
}

(2)静态变量是整个类的变量,不能再任何方法体内声明静态变量,例如:

function()
{
static int x = 0; //错误
}

(3)在静态方法里只能调用类中的其它静态成员,而不能直接访问类中的非静态成员。因为对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。

 那么下面的程序的运行结果是什么呢?如下所示:

class Test{
public static int X=300;
static
{
System.out.println("1、X的结果: " +X);
X=200;
System.out.println("2、X的结果: " +X);
}
{
System.out.println("3、非静态块X的结果: "+X);
}
} public class StaticBlockTest{
public static void main(String args[]){
System.out.println("主方法执行,X的值为:"+Test.X);
}
}

自己运行一下,想一下为什么?!

出处:http://www.cnblogs.com/bester/p/3297655.html

Static块详解的更多相关文章

  1. java 关键字final static native详解

    java 关键字native static final详解 一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义, ...

  2. 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)

    李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...

  3. static{ }语句块详解

    static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法.举ge例子: public class Test { public static i ...

  4. 转 java中static{}语句块详解

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

  5. java中static{}语句块详解

    static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法,下面我们详细的讨论一下该语句块的特性及应用. 一.在程序的一次执行过程中,stati ...

  6. Java static{}语句块详解

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

  7. java中static作用详解

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何 ...

  8. static用法详解

    一. 面向过程程序设计 1.静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变量的例子,如下: //Example 1 #include & ...

  9. java中的static关键字详解

    static对于我们这些初学者在编写代码和阅读代码是一个难以理解的关键字,也是大量公司面试题最喜欢考的之一.下面我就来就先讲述一下static关键字的用法和我们初学者容易误解的地方. static关键 ...

随机推荐

  1. Servlet概述

    1.Servlet简介 Servlet是使用Java Servlet应用程序设计接口及相关类和方法的Java程序.它在Web服务器上或应用服务器上运行并扩展了该服务器的能力.Servlet装入Web服 ...

  2. hdu 4864 Task (贪心 技巧)

    题目链接 一道很有技巧的贪心题目. 题意:有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间xi和等级yi, 对于每个任务,也有一个运行时间xj和等级yj.只有当xi& ...

  3. uva10375 Choose and divide

    唯一分解定理. 挨个记录下每个质数的指数. #include<cstdio> #include<algorithm> #include<cstring> #incl ...

  4. 无线端不响应键盘事件(keydown,keypress,keyup)

    今天在项目时,在android手机上使用输入法的智能推荐的词的话,不会触发keyup事件,一开始想到在focus时使用一个定时器,每隔100ms检测输入框的值是否发生了改变,如果改变了就作对应的处理, ...

  5. Android studio 下JNI编程实例并生成so库

    Android studio 下JNI编程实例并生成so库 因为公司需要为Android相机做美颜等图像后期处理,需要使用JNI编程,最近学了下JNI,并且在Android Studio下实现了一个小 ...

  6. MySQL基础之第1章 数据库概述

    1.1.数据存储方式 1.人工管理阶段2.文件系统阶段3.数据库系统阶段 1.2.数据库泛型 数据库泛型就是数据库应该遵循的规则.数据库泛型也称为范式.目前关系数据库最常用的四种范式分别是:第一范式( ...

  7. MySQL备份与复制

    1.二进制日志 二进制日志记录了数据库的所有改变,使得任何slave都可以执行相同的更新.一般来说,开启二进制日志大概会有1%的性能损耗,它有两个重要的使用场景: (1)备份:在某个时间点t作了一次备 ...

  8. SQL2012远程连接到SQL2008时的问题:已成功与服务器建立连接,但在登陆过程中发生错误。

    服务器装的是2008,我机上装的是2012,结果一远程连接马上报错而且2012直接crash了.后来找到这位兄弟的帖子,http://www.cnblogs.com/liuguozhu2015/p/3 ...

  9. UVA 10047 The Monocycle

    大白图论第二题··· 题意:独轮车的轮子被均分成五块,每块一个颜色,每走过一个格子恰好转过一个颜色. 在一个迷宫中,只能向前走或者左转90度或右转90度(我曾天真的认为是向左走和向右走···),每个操 ...

  10. hdu 3047 Zjnu Stadium(加权并查集)2009 Multi-University Training Contest 14

    题意: 有一个运动场,运动场的坐席是环形的,有1~300共300列座位,每列按有无限个座位计算T_T. 输入: 有多组输入样例,每组样例首行包含两个正整数n, m.分别表示共有n个人,m次操作. 接下 ...