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-----被执行
构造函数被执行
 * */
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java,抽象类代码块和静态代码块的执行顺序如下: 1. 父类静态代码块:在类加载时执行,且只执行一次。 2. 子类静态代码块:在类加载时执行,且只执行一次。 3. 父类代码块:在创建父类实例时执行,每次创建实例都会执行一次。 4. 父类构造方法:在父类代码块执行完后执行。 5. 子类代码块:在创建子类实例时执行,每次创建实例都会执行一次。 6. 子类构造方法:在子类代码块执行完后执行。 静态代码块是在类加载时执行的,用于初始化静态变量或执行一些只需要执行一次的操作。抽象类的静态代码块普通的静态代码块执行顺序相同,即在父类静态代码块之后、子类静态代码块之前执行。 代码块是在创建对象时执行的,用于初始化实例变量或执行一些需要在对象创建时执行的操作。抽象类代码块普通代码块执行顺序相同,即在父类代码块之后、子类代码块之前执行。 下面是一个抽象类静态代码块代码块的示例: ```java abstract class Animal { static { System.out.println("Animal static block"); } { System.out.println("Animal block"); } public Animal() { System.out.println("Animal constructor"); } } class Dog extends Animal { static { System.out.println("Dog static block"); } { System.out.println("Dog block"); } public Dog() { System.out.println("Dog constructor"); } } public class Main { public static void main(String[] args) { new Dog(); } } ``` 输出结果为: ``` Animal static block Dog static block Animal block Animal constructor Dog block Dog constructor ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值