java 代码块_Java代码块学习笔记

Java中的代码块

为方便清晰地掌握, 分开为概念和执行顺序两部分.

先了解它们具体是什么, 然后再探究它们的执行顺序.

概念

代码块: 定义在{}内部的代码.

普通代码块:

定义在方法里的代码块.

定义在普通方法中的{}就是最普通的代码块.

例如:

public static void main(String[] args){

{

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

}

}

复制代码

静态代码块:

定义在static里的代码块.

通常会在普通代码块的基础上在前面加上一个static, 来区分于普通的代码块.

并且, 它是属于类的. 不在方法里边.

例如:

public class Person{

static {

System.out.println("--------static中的静态代码块-------");

}

}

复制代码

构造块:

起名叫构造块的原因: 定义在类中而不是方法中, 并且执行上也有特点, 每次只在构造函数被调用时才会被执行.

与前面的区别在于, 一是在类中(与普通代码块相比), 二, 没有static的关键字.

定义在类中的代码块.

其实, 构造块还有一个名字叫做初始化块.

例如:

public class Person{

{

System.out.println("--------类中的构造代码块-------");

}

}

复制代码

执行顺序

在了解了以上3中代码块的概念之后, 让我们来看看它们在执行时间执行顺序上分别是怎样的.

例子: 在一个类中会依次写以上三种代码块, 来查看执行顺序.

其中, 为保证构造代码块的使用, 在main方法中会调用构造函数.

Demo

/**

* Content:

* 三种代码块

* @version 2020/4/22

* written by Jonty Zheng

*/

public class CodeBlockTest{

static int x = 1;

//类中的代码块

{

System.out.println("--------1.构造代码块分隔线-------");

}

//main方法

public static void main(String[] args){

System.out.println("--------main方法--------");

//方法中的普通代码块

{

System.out.println("--------2.普通代码块分隔线-------");

}

//调用构造方法

CodeBlockTest sbe = new CodeBlockTest();

}

//static中的代码块

static {

System.out.println("--------3.静态代码块分割线--------");

}

复制代码

程序的简单分析:

通过demo, 可以看到, 程序从上到下, 依次, 先是在构造函数的位置, 写了一个1.构造代码块分隔线, 接着在main方法中写了一个2.普通的代码块, 在前面加了一条方法的标识线. 并在后面追加了一个3.静态代码块.

接着来让我们看看程序是否会像顺序流一样, 依次执行1,2,3的代码块.

程序运行:

647ce4ec848caa605c76869bd2839842.png

图1

--------3.静态代码块分割线--------

--------main方法--------

--------2.普通代码块分隔线-------

--------1.构造代码块分隔线-------

复制代码

运行分析:

可以看到的是

与代码看上去的顺序大相径庭:

在后面的static静态代码块会优先执行, 与它的位置无关, 即使它长在main方法中的下方, 这说明在所有的代码块中静态代码块是优先执行, 地位还是比较高的(伴随着类加载的时候它就出来了).

接着就是很常规的执行顺序了, 按照程序的代码位置顺序, 原先就是写在main方法普通代码块后面的构造函数, 在实际运行时也是在普通代码块后执行

构造块当且仅当构造函数执行后才会被执行.

扩展

尝试了如果重写构造函数呢, 既然构造代码块是在构造函数被调用的时候被执行的, 那么, 构造函数和构造块两者之间又会不会有执行顺序上的先后呢?

程序修改: 将以下内容(构造函数中打印输出)加入到了原Demo构造块上的位置.

//我加在构造块的前边

public CodeBlockTest(){

System.out.println("测试构造函数");

}

复制代码

程序运行:

53f16e7b3c8b1f1c5b312352c6a9d009.png

图2

--------3.静态代码块分割线--------

--------main方法--------

--------2.普通代码块分隔线-------

--------1.构造代码块分隔线-------

测试构造函数

复制代码

运行分析:

可以看到的是, 构造函数写在前. 但实际上,

却行在后的.

小结:

通过以上的测试, 三大代码块的特征和执行顺序可以概括为以下2点.

1.执行顺序: static静态块 > 普通代码块 构造块

2.构造块只有在构造函数new时才会执行, 且实际顺序上优先构造函数.

以上皆与代码顺序无关.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值