JAVA中的代码块

一、基本语法

[修饰符]{
    代码;
};
{
    System.out.println(111);
}
1.修饰符可选,要写的话也只能写static
2.代码块分为两类 使用static修饰的是静态代码块 没有static修饰的叫普通代码块
3.逻辑语句可以为任何逻辑语句
4.;可以不写
1)静态代码块 作用是对类进行初始化 并且只会执行一次
static {
    System.out.println("静态代码块被调用");
}
2)如果是普通代码块每创建一个对象就执行一次 创建实例对象的时,会被隐式调用
{
    System.out.println("普通代码块被调用");
}

二、类加载

1.创建对象实例时(new)
2.创建子类对象实例,父类也会被加载 父类先被加载,子类后加载
3.使用类的静态成员时 (静态属性、静态方法)也会执行代码块

三、类什么时候被加载

 1.创建对象实例时(new)
 2.创建子类对象实例,父类也会被加载 父类先被加载,子类后加载
 3.使用类的静态成员时 (静态属性、静态方法)也会执行代码块
小结:
    static代码块是类加载时执行,只会被执行一次
    普通代码是创建对象时被调用的,创建一次调用一次

四、创建对象时,类调用的顺序

1.调用静态代码块和静态初始化
2.调用普通代码块和普通属性的初始化
3.调用构造器方法
注:多个静态/普通代码块等 按定义顺序来执行
public class CodeBlockDetail02 {
    public static void main(String[] args) {
        // 1)静态代码块 2)getN1()方法被调用
        // 3)普通代码块 4)getN2()方法被调用
        // 5)无参构造器
        A a = new A();
    }
}
class A{

    public A() {
        System.out.println("无参构造器");
    }

    {
        System.out.println("普通代码块");
    }

    static {
        System.out.println("静态代码块");
    }
    private static int n1 = getN1();
    private int n2 = getN2();

    public static int getN1() {
        System.out.println("getN1()方法被调用");
        return 100;
    }

    public static int getN2() {
        System.out.println("getN2()方法被调用");
        return 100;
    }
}

五、创建子类时继承关系顺序

  • 1.父类的静态代码块和静态属性(定义顺序)
  • 2.子类的静态代码块和静态属性(定义顺序)
  • 3.父类的普通代码块和普通属性(定义顺序)
  • 4.父类的构造器
  • 5.子类的普通代码块和普通属性(定义顺序)
  • 6.子类的构造器
public class CodeBlockDetail04 {
    /* 静态代码块只能调用静态成员
    * 普通代码块可以调研任意成员*/
    public static void main(String[] args) {
        /* 1.父类的静态代码块
           2.子类的静态代码块
           3.父类的普通代码块
           4.父类的构造器
           5.子类的普通代码块
           6.子类的构造器
        */
        new Child();
    }
}

class Father{
    public Father() {
        System.out.println("父类的构造器");// (7)
    }

    {
        System.out.println("父类的普通代码块");// (5)
    }

    private static int n1 = getVal01();
    private int n2 = getVal02();

    public static int getVal01(){
        System.out.println("父类的静态方法");// (1)
        return 100;
    }

    public int getVal02(){
        System.out.println("父类的普通方法");// (8)
        return 200;
    }

    static {
        System.out.println("父类的静态代码块");// (2)
    }
}

class Child extends Father{
    private static int n3 = getVal03();
    private int n4 = getVal04();

    public static int getVal03(){
        System.out.println("子类的静态方法");// (3)
        return 100;
    }

    public int getVal04(){
        System.out.println("子类的普通方法");// (9)
        return 200;
    }
    public Child() {
        System.out.println("子类的构造器");// (10)
    }

    {
        System.out.println("子类的普通代码块");// (6)
    }

    static {
        System.out.println("子类的静态代码块");// (4)
    }
}

六、细节

1.构造器的最前面其实隐含了super()和调用普通代码块
静态相关的代码块属性初始,在类加载时就执行完毕了
因此优先于构造器和普通代码执行块
public class CodeBlockDetail03 {
    public static void main(String[] args) {
        /*  1)AAA的普通代码块
            2)AAA()被调用
            3)BBB的普通代码块
            4)BBB()被调用了
        */
        new BBB();
    }
}

class AAA{
    {
        System.out.println("AAA的普通代码块");
    }
    public AAA(){
        // 隐藏了super();
        System.out.println("AAA()被调用");
    }
}

class BBB extends AAA{
    {
        System.out.println("BBB的普通代码块");
    }
    public BBB() {
        System.out.println("BBB()被调用了");
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/372744.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot源码解读与原理分析(十八)启动SpringApplication逻辑分析

文章目录 6.2 启动SpringApplication6.2.1 前置准备6.2.1.1 计时器对象的使用6.2.1.2 awt的设置6.2.1.3 对比SpringBoot 2.0.x-2.2.x6.2.1.4 对比SpringBoot 2.4.x 6.2.2 获取SpringApplicationRunListeners6.2.2.1 EventPublishingRunListener6.2.2.2 与其他版本的对比 6.2.3 …

TP框架 之think-auth权限认证

一、安装think-auth composer require 5ini99/think-auth二、数据表 -- ---------------------------- -- think_auth_rule,规则表, -- id:主键,name:规则唯一标识, title:规则中文名称 status 状态:为1正常…

我在代码随想录|写代码Day26 |回溯算法|332. 重新安排行程 , 51. N皇后 , 37. 解数独

学习目标: 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门 👍👍👍👍👍👍👍👍👍👍👍👍 ☆*: .。. o(≧▽≦)…

私域市场如何突破?解锁高效转化的三个核心要素!

一、私域电商三要素 一是私域、二是社交、三是电商。 私域就是承载用户的地方,比如微信,然后做好私域运营。 社交就是通过内容触达用户于用户建立社交关系。 电商就是通过私域卖产品给用户。 私域电商有几个公式: 社交红利信息关系链互…

redis(6)

文章目录 一、redis clusterRedis Cluster 工作原理Redis cluster 基本架构Redis cluster主从架构Redis Cluster 部署架构说明部署方式介绍 原生命令手动部署原生命令实战案例:利用原生命令手动部署redis cluster 实战案例:基于Redis 5 的redis cluster部…

Nicn的刷题日常之获得月份天数

目录 1.题目描述 描述 输入描述: 输出描述: 示例1 2.解题 1.题目描述 描述 KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。 输入描述: 多组输入,一行有两…

外包干了10个月,技术退步明显...

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

如何把大容量10G的文件分享给别人?整理了3个简单的方法~

如果文件过大,比如10G的文件发送起来简直问题重重,不仅费时费流量而且还很可能在发送的中途失败,这时候就需要借助一些压缩软件对文件进行压缩,下面就向大家介绍3个好用的压缩软件~ 方法一:使用嗨格式压缩大师压缩后发…

深入理解Java中的二叉树

目录 一、什么是二叉树? 二、二叉树的主要类型 三、二叉树的实现 四、二叉树的应用 五、关于二叉树的题目 引言: 二叉树是计算机科学中常用的一种数据结构,它是由节点组成的层级结构,每个节点最多有两个子节点。在Java编程语言中,二…

架构学习(三):scrapy-redis源码分析并实现自定义初始请求

scrapy-redis源码分析并实现自定义初始请求 前言关卡:如何自定义初始请求背景思考简单又粗暴的方式源码分析 结束 前言 通过这篇文章架构学习(二):原生scrapy如何接入scrapy-redis,初步入局分布式,我们正式开启scrapy-redis分布式…

C语言递归与迭代并举:双重视角下的C语言阶乘计算实现

引言 计算一个正整数的阶乘是常见的数学问题。阶乘的定义为:n的阶乘(记作n!)是所有小于及等于n的正整数的乘积。例如,5的阶乘(5!)就是54321120。下面我们将通过一个使用递归方法实现阶乘的C语言代码示例&am…

Qt|实现时间选择小功能

在软件开发过程中,QtDesigner系统给出的控件很多时候都无法满足炫酷的效果,前一段时间需要用Qt实现选择时间的小功能,今天为大家分享一下! 首先看一下时间效果吧! 如果有需要继续往下看下去哟~ 功能 1:开…

linux 05重定向和管道管理

01.重定向 例子: 关键字 > date 中的数据要写入 887.txt 02.FD 进程的句柄文件 进程的信息的传输: porcess 会有 0 号文件来接收键盘的信息 1 号文件 向终端 来输出信息 FD文件存储在proc文件中,可以看看 举个例子: 查看pro…

计算机网络原理基础

目录 前言: 1.网络发展史 2.网络通信基础 2.1IP地址 2.1.1定义 2.1.2格式 2.2端口号 2.2.1定义 2.2.2格式 2.3协议 2.3.1定义 2.3.2作用 2.3.3分层 2.4五元组 2.4.1定义 2.4.2组成 3.TCP/IP五层网络模型 3.1模型概念 3.2模型构成 3.3网络分层对应…

docker-compose部署laravel项目实战(主机nginx连接项目容器)(详细配置过程)

我用的是主机上的nginx,没有用docker安装nginx, 所以需要先在主机上安装nginx # 更新系统yum sudo yum update# 安装安装包sudo yum install epel-release sudo yum install wget# 安装Nginx sudo yum install nginx #启动 sudo systemctl start nginx #开机自启动…

C语言笔试题之反转链表(头插法)

实例要求: 1、给定单链表的头节点 head ;2、请反转链表;3、最后返回反转后的链表; 案例展示: 实例分析: 1、入参合理性检查,即head ! NULL || head->next ! NULL;2、while循环…

Vue3中使用element-plus菜单折叠后文字不消失

今天使用element-plus中国的导航菜单时,发现菜单栏折叠起来时文字不会自动消失,因为element-plus中内置了菜单折叠文字自动消失的,使用collapsetrue/false即可,但在实际使用中出现了一下问题: 折叠以后文字并没有消失&…

普通编程,机器学习与深度学习

普通编程:基于人手动设置规则,由输入产生输出经典机器学习:人手工指定需要的特征,通过一些数学原理对特征与输出的匹配模式进行学习,也就是更新相应的参数,从而使数学表达式能够更好的根据给定的特征得到准…

vue2父组件向子组件传值时,子组件同时接收多个数据类型,控制台报警的问题

最近项目遇到一个问题,就是我的父组件向子组件(公共组件)传值时,子组件同时接收多个数据类型,控制台报警的问题,如下图,子组件明明写了可同时接收字符串,整型和布尔值,但控制台依旧报警: 仔细检查父组件,发现父组件是这样写的: <common-tabletooltip :content=…

Vue3开发环境搭建和工程结构(一)

一、NVM和Node.js安装 NVM 是 Node Version Manager&#xff08;Node 版本管理工具&#xff09;的缩写&#xff0c;是一个命令行工具&#xff0c;用于管理和切换到不同版本的 Node.js。 1、前往 nvm-windows 仓库&#xff0c;然后单击立即下载 2、下载最新版本 3 、按照安装向…