Java类中代码块的执行顺序

我们都知道java代码在执行的时候都需要先编译成字节码,再jvm上运行,所以我们编写都各个类,都是运行在jvm上,jvm规定了类都加载顺序,我们今天在这里探讨类中代码块都执行顺序。

在java类中,代码都执行顺序都会按照一定都顺序去执行:

静态代码块>构造代码块>构造函数>普通代码块

1. 静态代码块:
格式:

static{
	System.out.println("我是一个静态代码块");
}

静态代码块在类加载都时候会一并进行加载,并且只执行一次,它优先其余都4种代码块执行。如果在类中存在多个静态代码块,它们都执行顺序会按照由上而下执行。
(1)静态代码块的作用
   一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。
(2)静态代码块不能存在任何方法体中
   首先我们要明确静态代码块是在类加载的时候就要运行了。我们分情况讨论:
(3)静态代码块不能访问普通变量
   普通变量只能通过对象来调用,是不能放在静态代码块中的。
与普通代码块区别:
 普通方法:由于普通方法是通过加载类,然后new出实例化对象,通过对象才能运行这个方法,而静态代码块只需要加载类之后就能运行了。
 静态方法:在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。
 
 2. 构造代码块
 格式:

{
	System.out.println("我是一个静态代码块");
}

构造代码块在创建对象时被调用,每次创建对象都会调用一次,但是优先于构造函数执行。也就是说,实例话一个对象时,如果存在构造代码块,构造代码块会先执行,然后才会执行构造函数

public class ConstructionCodeBlock {

    static {
        System.out.println("我是一个静态代码块");
    }

    {
        System.out.println("我是一个构造代码块");
    }

    public ConstructionCodeBlock() {
        System.out.println("我是构造函数");
    }


    public static void main(String[] args) {
        ConstructionCodeBlock constructionCodeBlock = new ConstructionCodeBlock();
    }

}

输出:

我是一个静态代码块
我是一个构造代码块
我是构造函数

Process finished with exit code 0

作用:
   和构造函数的作用类似,都是对对象进行初始化,并且只要创建一个对象,构造代码块都会执行一次。
 
3. 构造函数
  (1)构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
  (2)构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。
  (3)构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
  (4)默认先调用父类的无参构造函数

4. 普通代码块
  普通代码块和构造代码块的区别是:
  构造代码块是在类中定义的
  普通代码块是在方法体中定义的。且普通代码块的执行顺序和书写顺序一致。

public void sayHello(){
        System.out.println("我是普通代码块");
}

5. 代码块执行顺序

public class ConstructionCodeBlock {
	// 1
    static {
        System.out.println("我是一个静态代码块");
    }
	// 2
    {
        System.out.println("我是一个构造代码块");
    }
	// 3
    public ConstructionCodeBlock() {
        System.out.println("我是构造函数");
    }
	// 4
	public void sayHello(){
        System.out.println("我是普通代码块");
	}
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值