当前位置: 首页 > news >正文

【Java】代码块的细节你搞懂了吗(基础知识七)

 希望像唠嗑一样,one step one futher。

目录

(1)代码块的应用场景

 (2)代码块的细节

1.static 代码块只加载一次

 2.当调用类的静态成员时,类会加载

3. 使用类的静态成员时,static代码块会被执行,但普通代码块不会执行

4.创建对象时,静态成员、普通成员、 构造器的调用顺序

5.有继承关系时,静态成员、普通成员、 构造器的调用顺序

6.静态代码块中只能调用静态成员​


基于韩顺平老师的课进行Java知识的巩固练习 

(1)代码块的应用场景

 假设有以下雇员类,在该类的每个构造函数中输出“我是员工”这句话,不免有些重复并且造成内存浪费。

 public class Employee {private String name;private int id;private int salary;public Employee(String name) {System.out.println("我是员工");this.name = name;}public Employee(String name, int id) {System.out.println("我是员工");this.name = name;this.id = id;}public Employee(String name, int id, int salary) {System.out.println("我是员工");this.name = name;this.id = id;this.salary = salary;}}

如果用代码块则可以解决重复的问题,由此可以看出代码块可以初始化并且解决重复语句的问题(代码块执行顺序要比构造函数高)

 public class Employee {private String name;private int id;private int salary;{System.out.println("我是员工");}public Employee(String name) {this.name = name;}public Employee(String name, int id) {this.name = name;this.id = id;}public Employee(String name, int id, int salary) {this.name = name;this.id = id;this.salary = salary;}}

 (2)代码块的细节

1.static 代码块只加载一次

如果是普通代码块,每创建一个对象它就会执行一次代码块,而static代码块无论是创建多少个对象(>=1)都只会执行一次。

 2.当调用类的静态成员时,类会加载

注意创建子类对象时,父类也会被加载。先加载父类代码块,再加载子类代码块。当创建了一个对象时,调用该对象的静态成员时,类就会被加载。

3. 使用类的静态成员时,static代码块会被执行,但普通代码块不会执行

由下列看出,当没有创建对象时,使用类加载去访问静态成员时,static代码块也会被加载(只加载一次),但普通代码块不会被加载。

4.创建对象时,静态成员、普通成员、 构造器的调用顺序

 在创建对象时,调用顺序是这样的:先调用静态(属性或方法按顺序调用),然后是普通代码块和普通属性,最后才是构造器的调用。 

5.有继承关系时,静态成员、普通成员、 构造器的调用顺序

  

由下列程序可以观察到,如果有两个类是继承关系,两个类都有静态、普通、构造方法。创建一个子类对象,则执行的顺序是:

(1)先调用父类static,然后是子类static。先完成父子类的静态属性

(2)父类的普通方法,然后是父类的构造器,完成父类后。

(3)子类的普通方法,最后是子类的构造器,最后完成子类。

class Employee{static{System.out.println("Employee静态代码块");}public Employee() {System.out.println("Employee构造器");}
}
class Manager extends Employee{static{System.out.println("Manager静态代码块");}public Manager(){System.out.println("Manager构造器");}
}
class Test{public static void main(String[] args) {Manager manager = new Manager();}
}

 

6.静态代码块中只能调用静态成员

 由下图看出当在静态代码块中访问非静态成员是不允许的。但在普通代码块中则可以访问静态或者非静态成员。

相关文章:

【Java】代码块的细节你搞懂了吗(基础知识七)

希望像唠嗑一样,one step one futher。 目录 (1)代码块的应用场景 (2)代码块的细节 1.static 代码块只加载一次 2.当调用类的静态成员时,类会加载 3. 使用类的静态成员时,static代码块会被执…...

设计模式C++实现12:抽象工厂模式

参考大话设计模式; 详细内容参见大话设计模式一书第十五章,该书使用C#实现,本实验通过C语言实现。 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们…...

目标检测论文阅读:GraphFPN算法笔记

标题:GraphFPN: Graph Feature Pyramid Network for Object Detection 会议:ICCV2021 论文地址:https://ieeexplore.ieee.org/document/9710561/ Abstract 特征金字塔已经被证明在需要多尺度特征的图像理解任务中是强大的。SOTA的多尺度特征…...

实测2023款哪吒U-II,智驾功能对女司机很友好

最近,我们受邀试驾了2023款哪吒U-II。这是一款A级新能源SUV,是哪吒U的改款车型。哪吒U系列自2020年3月上市到2023年1月,累计销售数量达76688台,也因此被称为15万级智能天花板。2023款哪吒U-II的一大亮点是:针对以往哪吒…...

Python自动化测试【软件测试最全教程(附笔记、学习路线)】,看完即就业

最近看到很多粉丝在后台私信我,叫我做一期Python自动化测试的教程,其实关于这个问题,我也早就在着手准备了,我录制了一整套完整的Python自动化测试的教程,上传到网盘里了,大家有兴趣的可以去文末交流群免费…...

2023/2/13总结

今天主要学习了哈夫曼树。 哈夫曼树 哈夫曼树是二叉树的一种,它是一种WPL最优二叉树。 叶子结点(也称叶节点):指的是自己下面不再连接有节点的节点(即末端),称为叶子节点(又称为终…...

webSock前端

1.什么是webSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。允许服务端主动向客户端推送数据。 2.如何使用webSocket WebSocket 构造函数WebSocket 对象作为一个构造函数,用于新建 WebSocket 实例。 代码如下: let ws = new WebSocket(网址); 2.websock事件: …...

AcWing 3956. 截断数组(每日一题)

AcWing 3956. 截断数组 题目描述 给定一个长度为 nnn 的数组 a1,a2,…,ana_1, a_2, …, a_na1​,a2​,…,an​ 。 现在,要将该数组从中间截断,得到三个非空子数组。 要求,三个子数组内各元素之和都相等。 请问,共有多少种不同…...

Android 一体机研发之修改系统设置————屏幕亮度

Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 前言 最近工作略微有点儿空闲,抽空给大家总结一下:近期一直搞得一体机app研发,适用…...

C++通用算法

1.概述根据名字就知道如何使用相关算法&#xff0c;比如copy函数&#xff0c;就是复制的意思&#xff0c;它需要一个范围&#xff0c;以及要复制的位置copy(begin, end, container_begin);#include <iostream> #include<vector> #include<algorithm> #includ…...

Springboot停机方式

1. 介绍 简单的说&#xff0c;就是向应用进程发出停止指令之后&#xff0c;能保证正在执行的业务操作不受影响&#xff0c;直到操作运行完毕之后再停止服务。应用程序接收到停止指令之后&#xff0c;会进行如下操作&#xff1a; 1.停止接收新的访问请求 2.正在处理的请求&…...

Linux perf_event_open 简介

文章目录前言一、简介二、struct perf_event_attr2.1 type2.2 size2.3 config2.3.1 PERF_TYPE_HARDWARE2.3.2 PERF_TYPE_SOFTWARE2.3.3 PERF_TYPE_TRACEPOINT2.3.4 PERF_TYPE_HW_CACHE2.3.5 其他类型三、sample相关参数3.1 sample_period3.2 sample_freq3.3 sample_type四、其他…...

Java给定两组起止日期,求交集

/*** 判断2个时间段是否有重叠&#xff08;交集&#xff09;* param startDate1 时间段1开始时间戳* param endDate1 时间段1结束时间戳* param startDate2 时间段2开始时间戳* param endDate2 时间段2结束时间戳* param isStrict 是否严格重叠&#xff0c;true 严格&#xff0…...

数组的复制与二维数组的用法

今天学习的主要内容有 数组的复制 数组的复制 利用循环进行数组的复制 import java.util.Arrays; public class Main3 {public static void main(String[] args) {int []arr new int[]{1,2,3,4,5,6};int []arr1 new int[arr.length];for (int i 0; i < arr.length; i…...

JS判断两个table数据是否完全相等(判断两个数组对象是否完全相等)

需求 现有的table为tableA&#xff0c;有多个要做对比的table为一个数组 CompareArray 涉及到的问题 外层是数组&#xff0c;但是内部数据都是对象&#xff0c;对象属性名的排序不一样外层数组也涉及到 顺序不一样的问题 思路 对compareArray做长度筛选 filter 得到 同长度…...

关于小程序,你想知道的这些

近年来&#xff0c;各大平台纷纷上架小程序&#xff0c;迎来了小程序的爆发式增长。今天就来跟大家简单分享一下小程序基本的运行机制和安全机制。 小程序的由来 在小程序没有出来之前&#xff0c;最初微信WebView逐渐成为移动web重要入口&#xff0c;微信发布了一整套网页开…...

WuThreat身份安全云-TVD每日漏洞情报-2023-02-13

漏洞名称:THORSTEN PHPMYFAQ 跨站点脚本 漏洞级别:高危 漏洞编号:CVE-2023-0791 相关涉及:THORSTEN PHPMYFAQ 3.1.10 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-03506 漏洞名称:TENDA AC23 越界写入 漏洞级别:高危 漏洞编号:CVE-2023-078…...

【Linux】软件安装(三分钟教会你如何在linux下安装软件)

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️博客专栏&#xff1a;✈️Linux之路       &#x1f6f0;️社区&#xff1a;✈️进步学堂 目录&…...

Fluent Python 笔记 第 10 章 序列的修改、散列和切片

本章将以第 9 章定义的二维向量 Vector2d 类为基础&#xff0c;向前迈出一大步&#xff0c;定义表示多维向量的 Vector 类。这个类的行为与 Python 中标准的不可变扁平序列一样。 10.3 协议和鸭子类型 在 Python 中创建功能完善的序列类型无需使用继承&#xff0c;只需实现符…...

在中国程序员工作是青春饭吗?

上个月公司告诉我毕业了。 我打开boss直聘&#xff0c;一溜溜的外包公司和我打招呼。 我寻思我说不定啥时候就离开深圳了&#xff0c;外包不外包也无所谓钱到位就行。&#xff08;大公司学历不够格也进不去&#xff09; 结果华为、平安的外包告诉我&#xff0c;不好意思呀&a…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...