您的位置:首页 > 编程语言 > Java开发

java 代码块

2016-06-02 22:32 344 查看
静态的方法或者方法块在 类加载的时候就已经初始化了,在类加载的时候 静态绑定。

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

static

{

}

类装载步骤:

在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:

装载:查找和导入类或接口的二进制数据;

链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;

校验:检查导入类或接口的二进制数据的正确性;

准备:给类的静态变量分配并初始化存储空间;

解析:将符号引用转成直接引用;

初始化:激活类的静态变量的初始化Java代码和静态Java代码块。

初始化类中属性是静态代码块的常用用途,但只能使用一次。

普通块和静态块的异同:

相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋
    值。


不同点:静态代码块在非静态代码块之前执行(静态代码块--》非静态代码块--》构造方法)。

    静态代码块只在第一次new执行一次,之后不在执行,而非静态代码块在每new一次就执行一次。非静态代码块可以
    在普通方法中定义(个人感觉作用不大);而静态代码块不行。


示例:

父类方法:

package 方法块;

public class father {
static{
System.out.println("父类的静态方法块");
}
{
System.out.println("父类的方法块");<pre name="code" class="java"><span style="white-space:pre">	</span>}
public father() {System.out.println("父类的构造函数");}}

子类方法:

package 方法块;

public class son extends father{
static{
System.out.println("子类的静态方法块");
}
{
System.out.println("子类的方法块");
}
public son() {
System.out.println("子类的构造函数");
}
public static void main(String[] args) {
son s = new son();
}
}
执行的顺序:
main中new 出子类实例时,由于子类继承了父类,会去先装载父类,由于静态方法块在装载的时候就会执行,所以判断父类中是否有静态的方法块,执行完毕后,再去子类中查找是否有静态的方法块,当子类的静态方法块执行完后,执行父类的普通方法块和父类的构造函数,执行结束后,再执行子类的普通方法块和子类的构造函数。

执行结果:

父类的静态方法块

子类的静态方法块

父类的方法块

父类的构造函数

子类的方法块

子类的构造函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: