解析java中的静态代码块和实例代码块(匿名代码块)

解析java中的静态代码块和实例代码块(匿名代码块)

1 静态代码块

1.1 含义

static修饰的{}叫做静态代码块,其语法如下所示:

static{
   //代码块里面的内容
}

1.2 为什么需要静态代码块?

类在加载时初始化(实例化对象之前必须加载类)

1.3 怎么用静态代码块?

1.3.1 给静态变量赋初始值
a 示例代码
Chinese类
public class Chinese {
    static int count;
    static{
        count=100;
    }
    public Chinese() {
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
        System.out.println(Chinese.count);
    }
}

b 示例代码运行截图

在这里插入图片描述

1.3.2 在同一个类中,静态代码块可以有多个,代码的执行顺序为静态代码块在类体中的书写顺序(谁写在前,谁先执行)
a 示例代码
Chinese类
public class Chinese {
    static{
        System.out.println("第一个static修饰的代码块被成功执行了");
    }
    public Chinese() {
    }
    static{
        System.out.println("第二个static修饰的代码块被成功执行了");
    }
    static{
        System.out.println("第三个static修饰的代码块被成功执行了");
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
        new Chinese();
    }
}

b 实例代码运行截图

在这里插入图片描述

1.3.3 静态代码块一定需要实例化对象后才会被自动调用,其在自动调用构造方法之前调用
a 错误示例代码
Chinese类
public class Chinese {
    static{
        System.out.println("测试静态代码块在实例化对象前是否执行-------1");
    }
    public Chinese() {
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
    }
}

b 错误示例代码运行截图

在这里插入图片描述

c.正确的示例代码
Chinese类
public class Chinese {
    static{
        System.out.println("测试静态代码块在实例化对象前是否执行-------1");
    }
    public Chinese() {
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
        new Chinese();
    }
}

d.正确的示例代码运行截图

在这里插入图片描述

2.实例代码块

2.1 含义

没有名字没有被static修饰的代码块叫做实例代码块,又称匿名代码块

其语法格式如下所示:

{
    //实例代码块内容
}

2.2 什么需要实例代码块(匿名代码块)?

在实例化对象前对象进行初始化

2.3 怎么用实例代码块?

2.3.1 实例代码块一定需要实例化对象后才会被自动调用,其在自动调用构造方法之前调用
a 错误示例代码
Chinese类
public class Chinese {
    {
        System.out.println("测试实例代码块在实例化对象前是否执行");
    }
    public Chinese() {
        System.out.println("无参构造方法调用了!!!!");
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
    }
}

b 错误示例代码运行截图

在这里插入图片描述

c.正确的示例代码
Chinese类
public class Chinese {
    {
        System.out.println("测试实例代码块在实例化对象前是否执行");
    }
    public Chinese() {
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
        new Chinese();
    }
}

d.正确的示例代码运行截图

在这里插入图片描述

2.3.2 在同一个类中,实例代码块可以多个,他们的执行的顺序是按照书写的先后顺序来执行(谁写在前,谁先执行)
a 示例代码
Chinese类
public class Chinese {
    {
        System.out.println("实例代码块2");
    }
    {
        System.out.println("实例代码块1");
    }
    public Chinese() {
    }
    {
        System.out.println("实例代码块3");
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
        new Chinese();
    }
}

b 示例代码运行截图

在这里插入图片描述

3.静态代码块、实例代码块、构造方法的执行的条件是什么?

3.1 条件

都需要实例化对象后才能被调用。(实例化对象前必须先加载类的)

3.2 错误示例代码

Chinese类
public class Chinese {
    {
        System.out.println("实例代码块");
    }
    static{
        System.out.println("static修饰的代码块");
    }
    public Chinese() {
        System.out.println("构造方法");
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
    }
}

3.3 错误示例代码运行截图

在这里插入图片描述

3.4 正确示例代码

Chinese类
public class Chinese {
    {
        System.out.println("实例代码块");
    }
    static{
        System.out.println("static修饰的代码块");
    }
    public Chinese() {
        System.out.println("构造方法");
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
        new Chinese();
    }
}

3.5 正确示例代码运行截图

在这里插入图片描述

4.静态代码块、实例代码块、构造方法之间的执行的先后顺序是什么?

4.1 规则

a. 不同种之间优先级别从高到低为: 静态代码块>实例代码块>构造方法

b.同种之间的优先级别为: 类体中书写的先后顺序,写在前的优先执行

4.2 示例代码

Chinese类
public class Chinese {
    {
        System.out.println("实例代码块2");
    }
    static{
        System.out.println("static修饰的代码块3");
    }
    static{
        System.out.println("static修饰的代码块1");
    }
    {
        System.out.println("实例代码块1");
    }
    public Chinese() {
        System.out.println("构造方法");
    }
    static{
        System.out.println("static修饰的代码块2");
    }
    {
        System.out.println("实例代码块3");
    }
}

Demo类
public class Demo {
    public static void main(String[] args) {
      //测试static代码块的功能
        new Chinese();
    }
}

4.3 示例代码运行截图

在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值