Java SE代码块及其相关概念

简介: Java代码块

前言🙉

代码块类似于一种优化(补充)构造器的机制,也是类中的一部分,按照路线学习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修饰,调用普通成员的地方立马报错!

在这里插入图片描述

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

相关文章
|
4月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
1月前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
46 1
|
2月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
137 3
|
3月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。
|
3月前
|
Oracle Java 关系型数据库
Java(TM) Platform SE binary 已停止工作”的解决方法
Java(TM) Platform SE binary 已停止工作”的解决方法
254 2
|
4月前
|
安全 Java 编译器
Java 基础语法-面试题(53道)(基础概念+基础语法+流程控制)
Java 基础语法-面试题(53道)(基础概念+基础语法+流程控制)
66 18
|
4月前
|
存储 安全 搜索推荐
深入探讨Session和Cookie的概念、用途以及如何在Java Web开发中有效地使用它们进行用户状态管理。
在Java Web开发中,Session和Cookie是管理用户状态的核心技术。Session存储于服务器端,通过唯一的Session ID识别用户,确保数据安全与隐私;Cookie则存储于客户端,用于记录用户偏好等信息。两者各有优势:Session适合存储敏感数据,但需合理管理避免资源浪费;Cookie便于持久化存储,但在安全性上需谨慎设置。开发者可通过Servlet API轻松操作二者,实现个性化用户体验与应用性能优化。
68 2
|
4月前
|
Java Docker 微服务
微服务架构的概念、特点以及如何在Java Web开发中实现微服务。
微服务架构的概念、特点以及如何在Java Web开发中实现微服务。
101 1
|
4月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
4月前
|
Java
Java 匿名函数的概念和写法
Java 匿名函数的概念和写法
99 1