Java中static{}块、{}块和普通代码块的研究

1、普通代码块

普通代码块就是在方法或者是在语句中用{}定义的代码块
普通代码块和方法中其它语句的执行顺序与其出现的顺序一致:即先出现先执行。

package com.wrh.codeblock;

public class CommonCodeBlock {

    public static void main(String[] args) {
        //普通代码块的研究

        {
            System.out.println("方法中的普通代码块1");
        }

        System.out.println("主方法非代码块{}修饰的语句");
        {
            System.out.println("方法中的普通代码块2");           
        }
    }

}
/* * 运行结果如下: 方法中的普通代码块1 主方法非代码块{}修饰的语句 方法中的普通代码块2 * */

2、自由代码块

package com.wrh.codeblock;
//自由代码块的研究
//自由代码块就是在类中用{}定义的代码块
//执行顺序在new对象调用构造方法之前执行。但如果在一个类中有几个自由代码块,则其执行顺序与其出现的顺序一致:即先出现先执行。
//且每新建一个对象,都会执行一次。
public class freedomCodeBlock {
    {
        System.out.println("自由代码块2被运行");//故意将2写在前面
    }
    public freedomCodeBlock(){
        System.out.println("构造函数被执行");
    }
    {
        System.out.println("自由代码块1被执行");
    }
    public static void main(String[] args) {
        System.out.println("main 方法中在创建对象前的第一条语句被执行");
        new freedomCodeBlock();
        new freedomCodeBlock();
    }

}
/* * 运行结果如下 main 方法中在创建对象前的第一条语句被执行 自由代码块2被运行 自由代码块1被执行 构造函数被执行 自由代码块2被运行 自由代码块1被执行 构造函数被执行 * */

3、static代码块

静态代码块是在类中这样定义的:static{},即是在自由代码块前面用static修饰的

package com.wrh.codeblock;
//静态代码块的研究
//
//静态代码块的是在JVM进行类加载时被执行的,且只执行一次。即其执行时间是最早最早的。
//如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
//注意:1 静态代码块不能存在于任何方法体内。
//2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。
public class StaticCodeBlock {
    static{
        System.out.println("静态代码块--------1-------被执行");
    }
    {
        System.out.println("自由代码块-----1-----被执行");
    }
    static{
        System.out.println("静态代码块--------2-------被执行");
    }
    public StaticCodeBlock(){
        System.out.println("构造函数被执行");
    }
    {
        System.out.println("自由代码块-----2-----被执行");
    }
    public static void main(String[] args) {
        System.out.println(" main 方法中在new对象之前的第一条语句被执行。");
        new StaticCodeBlock();
        new StaticCodeBlock();
    }

}

/* *运行结果如下: 静态代码块--------1-------被执行 静态代码块--------2-------被执行 main 方法中在new对象之前的第一条语句被执行。 自由代码块-----1-----被执行 自由代码块-----2-----被执行 构造函数被执行 自由代码块-----1-----被执行 自由代码块-----2-----被执行 构造函数被执行 * */

你可能感兴趣的:(java,static代码块,自由代码块,普通代码块)