首页 > 编程语言 >重识Java中的代码块

重识Java中的代码块

时间:2024-07-07 10:02:22浏览次数:15  
标签:初始化 重识 Java String 静态 Movie 代码 调用

目录

一、基本介绍

二、基本语法

三、代码块的好处

3.1 普通代码块

 3.2 静态代码块

四、代码块调用顺序


 

一、基本介绍

代码块又称为初始化块,属于类的成员,类似于方法,将逻辑语句封装在方法体中,通过{ }包围起来。

但是与类不同的是,它没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或者类显式调用,而是加载类时,或创建对象时隐式调用。

二、基本语法

[修饰符]{

}

  1.  修饰符可选,但只能是不写或者static
  2. 代码块分为两种,静态代码块和普通代码块
  3. 代码块末尾的;号可以加上,也可以省略

三、代码块的好处

3.1 普通代码块

1.相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化操作。

2.如果多个构造器中都有重复语句,可以抽取到初始化块中,提高代码的重用性

※ 普通代码块的执行顺序先于构造方法,无论调用哪个构造器创建对象,都会先执行代码块中的内容。普通代码块是每创建一个对象,就执行一次代码块中的内容。

例如:

public class DaiMaKuai {
    public static void main(String[] args) {
        Movie movie = new Movie();
    }
}

class Movie {
    String author;
    String name;

    public Movie(String author, String name) {
        System.out.println("我是构造器,我要执行了");
        this.author = author;
        this.name = name;
    }

    public Movie() {
        System.out.println("我是构造器,我要执行了");
    }
}

就可优化为:

public class DaiMaKuai {
    public static void main(String[] args) {
        Movie movie = new Movie();
    }
}

class Movie {
    {
        System.out.println("我是构造器,我要执行了");
    }

    String author;
    String name;

    public Movie(String author, String name) {
        this.author = author;
        this.name = name;
    }

    public Movie() {
    }
}

 3.2 静态代码块

静态代码块的作用是对类的初始化,它随着类的加载而执行,并且会执行一次。

这就引出一个问题,运行时,Java虚拟机究竟会加载哪些类?

  1. 最先加载main( )方法所在类
  2. 创建某个类的实例对象时,该类会被加载
  3. 创建子类的对象实例时,其父类先加载
  4. 使用某个类的静态成员(方法或属性)时,该类会被加载

四、代码块调用顺序

创建一个对象时,在一个类的调用顺序是:

  1. 最先,调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态属性初始化,则按照它们定义的顺序执行)
  2. 其次,调用普通代码块和普通属性初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通属性初始化,则按照它们定义的顺序执行)
  3. 最后,调用构造方法(注意:构造方法中隐含了super( )和调用普通代码块)

当包含继承关系时:

他们的静态代码块,静态属性初始化普通代码块,普通属性初始化,构造方法的调用顺序如下:

  1. 父类的静态代码块和静态属性(优先级一样,按定义顺序执行)
  2. 子类的静态代码块和静态属性(优先级一样,按定义顺序执行)
  3. 父类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
  4. 父类的构造方法
  5. 子类的普通代码块和普通属性初始化(优先级一样,按定义顺序执行)
  6. 子类的构造方法 

静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员。

标签:初始化,重识,Java,String,静态,Movie,代码,调用
From: https://blog.csdn.net/weixin_69053029/article/details/140240765

相关文章

  • Java面试之并发与网络通信常见面试题
    并发编程部分1.什么是进程和线程?进程:操作系统分配资源的最小单位,各个进程之间占据独立的寻址空间,运行也是独立运行,进程间通信需要一些机制。线程:程序执行的基本单位,一个进程可以开启多个线程,他们的很多空间(如堆空间)是公用的。线程执行开销小,但是不够安全。2.线程有几......
  • 计算机毕业设计项目推荐:66945 同城信息网(开题答辩+程序定制+全套文案 )上万套实战教程
    摘要随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采SSM技术和mysql数据库来完成对系统的设计。整个开发过程首先对同城信息网进行需求分析,得出......
  • 「代码随想录算法训练营」第一天(补) | 数组 part1
    704.二分查找题目链接:https://leetcode.cn/problems/binary-search/题目难度:简单文章讲解:https://programmercarl.com/0704.二分查找.html视频讲解:https://www.bilibili.com/video/BV1fA4y1o715题目状态:通过个人思路:就是简单的二分查找思路,判断数组中间的值是否等于目......
  • Java I/O
    JavaI/O(输入/输出)是Java语言中用于处理数据流的一套丰富而强大的API。JavaI/O分为两个主要的包:java.io和java.nio(非阻塞I/O)。以下是一些JavaI/O的基本概念和组件:1.流的概念流:是字节序列的表示,可以是输入流(读取数据)或输出流(发送数据)。2.主要的流类InputStream和Outpu......
  • NET 中的 12 个简单干净代码技巧
    编写干净的代码对于可维护性、可读性和可扩展性至关重要。这里有12个简单的技巧可以帮助您在.Net中编写更干净的代码,每个技巧都附有好的和坏的代码片段。1.使用有意义的名字糟糕的代码publicclassC{publicvoidM(){vara=10;var......
  • java内存管理机制垃圾回收的详细说明
    前言在前面三篇文章中,对JVM的内存布局、内存分配、垃圾标记做了较多的介绍,垃圾都已经标记出来了,那剩下的就是如何高效的去回收啦!这篇文章将重点介绍如何回收旧手机、电脑、彩电、冰箱~啊呸(⊙o⊙)…将重点介绍几种垃圾回收算法、HotSpot中常用的垃圾收集器的主要特点和应用场......
  • 超参数优化方法之贝叶斯优化实现流程及代码
    超参数优化方法之贝叶斯优化实现流程及代码在机器学习模型的训练过程中,超参数的选择往往对模型性能有着决定性的影响。贝叶斯优化作为一种高效的超参数调优方法,以其在高维空间中的搜索效率和对最优化问题的独特见解而受到关注。本文将深入探讨贝叶斯优化的基本原理、实现策......
  • 51单片机:多功能时钟(附代码详解)
    一、基本功能介绍:1.时钟系统(TIME-24h)1.可根据当地时间自由修改!(非联网)按下按键S1                          默认时间05:12:01(小彩蛋*1)           使用定时器完成,保证在执行其他功能时,这套时钟......
  • 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点 、 19.删除链表的倒数第N个
    24.两两交换链表中的节点 题目:.-力扣(LeetCode)思路:这题关键是要每次进行两个结点的操作,并且每次都要保存其前结点,做题思路比较清晰,但是总是处理不好边界问题,总是越界。代码:/***Definitionforsingly-linkedlist.*structListNode{*intval;*List......
  • 代码随想录算法训练营第三天 | 203.移除链表元素 、 707.设计链表 、206.反转链表
    203.移除链表元素题目:.-力扣(LeetCode)思路:主要是通过运用虚拟头节点来统一移除元素的写法。代码:/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode......