Java SE代码块及其相关概念

简介: Java代码块

@TOC

前言🙉

代码块类似于一种优化(补充)构造器的机制,也是类中的一部分,按照路线学习java的过程中不断体会到了各种优化基础思维的新东西,我想以后的SSM应该也是这种思想的一种延续

在这里插入图片描述

代码块

一.定义及语法

1.定义

**🟤代码块又称初始代码块,和构造器,成员方法,成员属性一样是类中的成员,他将逻辑语句封装在方法体中,通过{}包装起来。
🟤代码块没有方法名,没有返回值没有参数,只有一个方法体,他不通过类或者类的对象显式调用,而是在类的加载时出现,或者创建类的对象时隐式调用
🟤所谓的隐式调用,即不用写出对象调用的成员,类一加载就自动调用,如下**

在这里插入图片描述

2.语法:

[修饰符]{
  代码 
}

3.注意事项:

1.修饰符可以写可不写,如果要写,只能是static
2.代码块分为,静态代码块和非静态代码块
3.代码块调用顺序优先于构造器,不管调用哪个构造器来初始化对象都会先调用代码块内容

✔️例如:

public class Play {
    public static void main(String[] args) {
        new AAA("彭于晏"); //创建对象发生类加载 隐式调用了代码块
    }
}
class AAA{
    public String name="彭于晏";

    public AAA(String name) {  //构造器
        System.out.println("1.构造器被调用啦~");
        this.name = name;
    }
    {//代码块
        System.out.println("2.彭于晏好帅啊~~");
    }
}

▶️运行结果:
在这里插入图片描述

二.代码块与类的联系

1.普通的代码块

普通代码块在创建对象对象实例时被隐式调用,被创建一次就调用一次

2.static修饰的代码块

static代码块也叫静态代码块,同样可以理解成是对类的初始化,而且它随着➖ 类的加载而执行➖,且只会➖ 执行一次

✔️例如:

public class Play {
    public static void main(String[] args) {
        new AAA();//创建对象发生类加载 隐式调用了代码块
        new AAA();
        new AAA();
    }
}
class AAA{
    static {  //静态代码块
        System.out.println("静态代码块被调用");
    }
    {     //普通代码块
        System.out.println("普通代码块被调用");
    }
}

▶️运行结果:
在这里插入图片描述

✔️很显然,上述程序中,类加载了三次普通代码块随着类加载调用了三次,而静态代码块只加载了一次

三.类被加载的情况(🚩重点)

1.在创建对象实例时,类加载
2.继承关系中创建子类对象实例,父类也会被加载(先父后子)
3.使用类的静态成员时(静态属性,静态方法)

四.类中成员的调用顺序(🚩面试)

1.创建普通对象时

1️⃣调用静态代码块静态属性(两者谁写在前面就调用谁)
2️⃣普通代码块和普通属性
3️⃣构造方法
✔️例如:

public class Play {
    public static void main(String[] args) {
        new AAA("彭于晏");//创建对象发生类加载 隐式调用了代码块
    }
}
class AAA{
    public String name="彭于晏";

    public AAA(String name) {
        System.out.println("1.构造器被调用啦~");
        this.name = name;
    }
    static {
        System.out.println("2.静态代码块被调用");
    }
    {
        System.out.println("3.普通代码块被调用");
    }
}

▶️运行结果:
在这里插入图片描述

2.创建子类对象时

1️⃣父类的静态代码块和静态属性
2️⃣子类的静态代码块和静态属性
3️⃣父类的普通代码块和普通属性
4️⃣父类构造方法
5️⃣子类的普通代码块和普通属性
6️⃣子类构造方法
✔️例如:

public class Play {
    public static void main(String[] args) {
        new BBB("彭于晏");//创建对象发生类加载 隐式调用了代码块
    }
}
class AAA{
    public String name;
    public AAA(String name) {
        System.out.println("1.父类构造器被调用啦~");
        this.name = name;
    }
    static {
        System.out.println("2.父类静态代码块被调用");
    }
    {
        System.out.println("3.父类普通代码块被调用");
    }
}
class BBB extends AAA{
    public BBB(String name) {
        super(name);
        System.out.println("1.子类构造器被调用啦~");
    }
    static {
        System.out.println("2.子类静态代码块被调用");
    }
    {
        System.out.println("3.子类普通代码块被调用");
    }
}

▶️运行结果:
在这里插入图片描述

五.调用范围

⭕普通代码块可以调用任意成员
✔️例如:

class CCC{
    public String name="懒羊羊";
    public static int age=20;
    public void play(){
        System.out.println("今天你玩耍了吗");
    }
    public static void study(){
        System.out.println("今天你学习了吗");
    }
    {
    play();                   //普通代码块调用普通方法
    System.out.println(name);;//普通代码块调用普通属性
    System.out.println(age);; //普通代码块调用静态属性
    study();                  //普通代码块调用静态方法
    }
}

▶️运行结果:
在这里插入图片描述
⭕静态代码块只能调用静态成员
✔️例如:
在上述代码基础上,把普通代码块前加上static修饰,调用普通成员的地方立马报错!

在这里插入图片描述

✔️说明静态代码块只能调用静态成员

相关文章
|
11天前
|
Java
Java中的抽象类:深入了解抽象类的概念和用法
Java中的抽象类是一种不能实例化的特殊类,常作为其他类的父类模板,定义子类行为和属性。抽象类包含抽象方法(无实现)和非抽象方法。定义抽象类用`abstract`关键字,子类继承并实现抽象方法。抽象类适用于定义通用模板、复用代码和强制子类实现特定方法。优点是提供抽象模板和代码复用,缺点是限制继承灵活性和增加类复杂性。与接口相比,抽象类可包含成员变量和单继承。使用时注意设计合理的抽象类结构,谨慎使用抽象方法,并遵循命名规范。抽象类是提高代码质量的重要工具。
25 1
|
13天前
|
设计模式 存储 Java
23种设计模式,享元模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享技术有效地支持大量细粒度对象的重用。这个模式在处理大量对象时非常有用,特别是当这些对象中的许多实例实际上可以共享相同的状态时,从而可以减少内存占用,提高程序效率
31 4
|
13天前
|
设计模式 Java 中间件
23种设计模式,适配器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现
30 4
|
2月前
|
Java 测试技术 Maven
JAVA单元测试概念与实战
单元测试是软件开发中的一个测试方法,用于验证软件代码中最小的、独立的单元是否按照预期工作。在Java中,这通常指的是单个的方法或者一个类的个别功能。单元测试的目的是隔离代码的每个部分,并确保各个部分是正确的。
51 4
|
1月前
|
Arthas Java 中间件
如何优雅的在java中统计代码块耗时
如何优雅的在java中统计代码块耗时
32 1
|
9天前
|
Java 调度
Java中常见锁的分类及概念分析
Java中常见锁的分类及概念分析
14 0
|
10天前
|
算法 Java 开发者
Java中的多线程编程:概念、实现与性能优化
【4月更文挑战第9天】在Java编程中,多线程是一种强大的工具,它允许开发者创建并发执行的程序,提高系统的响应性和吞吐量。本文将深入探讨Java多线程的核心概念,包括线程的生命周期、线程同步机制以及线程池的使用。接着,我们将展示如何通过继承Thread类和实现Runnable接口来创建线程,并讨论各自的优缺点。此外,文章还将介绍高级主题,如死锁的预防、避免和检测,以及如何使用并发集合和原子变量来提高多线程程序的性能和安全性。最后,我们将提供一些实用的性能优化技巧,帮助开发者编写出更高效、更稳定的多线程应用程序。
|
9天前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
13 0
|
10天前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
25 4
|
11天前
|
Java 关系型数据库 MySQL
大厂面试题详解:Java抽象类与接口的概念及区别
字节跳动大厂面试题详解:Java抽象类与接口的概念及区别
33 0