有关代码块的知识你真的了解吗?

🎐

本篇主要介绍Java中的类与对象中 的代码块


👩🏻‍🏫作者: 初入编程的菜鸟哒哒
📚系列文章目录:

一、TvT——JavaSE(1)–Java的数据类型与变量
二、TvT——JavaSE(2)–Java的运算符
三、TvT——JavaSE(3)–Java的逻辑控制
四、TvT——JavaSE(4)–Java方法的使用
五、你真的学会了JavaSE中数组的定义与使用吗?
六、Java中的类与对象来袭
七、类与对象有关static成员的知识你真的了解吗?


📜刷题笔记:
1️⃣TvT——C语言进阶の刷题【1】:指针进阶


前言

大家记得联系上一篇博客一起学习。

Java中的类与对象来袭

🧈代码块

在这里插入图片描述

🍨1. 代码块概念以及分类

使用 {} 定义的一段代码称为代码块。

根据代码块定义的位置以及关键字,又可分为以下四种:

  • 普通代码块(本地代码块)

  • 构造块(实例代码块)

  • 静态块(静态代码块)

  • 同步代码块(后续讲解多线程部分再谈)

🍨2. 普通代码块

  • 普通代码块(本地代码块)
public static void main(String[] args) {
        {
            System.out.println("这就是一个代码块");
        }
    }

🍨3. 构造块

  • 构造块(实例代码块)

🎈实例代码块定义在类的内部,方法的外部
实例代码块内部可以初始化成员变量。

 class Student {
     public String name;
    public double score;
     public int age;
 
     public Student (String name,double score,int age) {
         this.name = name;
         this.age = age;
         this.score = score;
     }
     
     {
         this.name = "11";
         System.out.println("实例代码块");
     }
     
     public void goname(Student this) {
         System.out.println(this);
     }
      }

🍨4. 静态代码块

  • 静态块(静态代码块)

🎠静态代码块一般用于初始化静态成员。

class Student {
    public String name;
    public double score;
    public int age;
    public  static String classes  = "2001";

    public Student (String name,double score,int age) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
    public void upClass(Student this) {
        System.out.println("普通方法");
        classes = "2002";
    }
    static
    {
        System.out.println("静态代码块");
    }
    public void goname(Student this) {
         System.out.println(this);
     }
}

在这里插入图片描述

🍨5. 静态代码块的执行顺序

当我们执行下面这个代码时:


class Student {
    public String name;
    public double score;
    public int age;
    public  static String classes  = "2001";

    public Student (String name,double score,int age) {
        this.name = name;
        this.age = age;
        this.score = score;
        System.out.println("这是一个构造函数");
    }
    
    {
        System.out.println("实例代码块");
    }

    static
    {
        System.out.println("静态代码块");
    }
    
    public static void goname() {
        int name1 = 3;
        System.out.println("静态方法成员"+name1);
    }
}
public class Test {
    public static void main(String[] args) {
        Student student4 = new Student("4",99,17);
    }
    
}

❓ 以我们之前所学的知识来看,运行结果是不是应该只打印这是一个构造函数呢?

那运行一下看看结果:
在这里插入图片描述
💫我们发现结果并不是我们想象的那样。

💌那我们就可以得出结论

加了代码块之后先加载静态代码块,再执行实例代码块,再执行构造方法。

❓ 那我们再来探讨一下,静态代码块静态成员变量谁先执行呢?

class Student {
    public String name;
    public double score;
    public int age;
    public  static String classes  = "2001";

    public Student (String name,double score,int age) {
        this.name = name;
        this.age = age;
        this.score = score;
        System.out.println("这是一个构造函数");
    }
    
    {
        System.out.println("实例代码块");
    }

    static
    {
        classes = "2003";
        System.out.println("静态代码块");
    }
    
    public static void goname() {
        int name1 = 3;
        System.out.println("静态方法成员"+name1);
    }
}
public class Test {
    public static void main(String[] args) {
       System.out.println(Student.classes);
    }
    
}

结果是这样的:
在这里插入图片描述

💕规则是:

看定义的顺序,谁先定义谁先执行。

💌执行顺序总结:

  1. 先执行静态的(加载了类就会被执行)

  2. 如果有多个静态的,那么看定义顺序

  3. 如果没有实例化对象,那么只会执行静态的。(静态的只会执行一次)
    可以看见只执行了一次。

  4. 实例的数据(有多个实例要看定义的顺序)

  5. 构造函数执行

在这里插入图片描述
最后的注意事项:

  • 静态代码块不管生成多少个对象,其只会执行一次
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并(这个你只要记住是从上往下执行的就行了,不容易弄混)
  • 实例代码块只有在创建对象时才会执行

总结

在这里插入图片描述

本篇到此结束
“莫愁千里路,自有到来风。”
我们顶峰相见!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值