【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.静态代码块中只能调用静态成员![](https://img-blog.csdnimg.cn/0207e8b9f34d42eaac3c36add34f7d6e.png)
由下图看出当在静态代码块中访问非静态成员是不允许的。但在普通代码块中则可以访问静态或者非静态成员。
相关文章:
![](https://img-blog.csdnimg.cn/d8c098b961454a468c5d85b6c4c8a7ab.png)
【Java】代码块的细节你搞懂了吗(基础知识七)
希望像唠嗑一样,one step one futher。 目录 (1)代码块的应用场景 (2)代码块的细节 1.static 代码块只加载一次 2.当调用类的静态成员时,类会加载 3. 使用类的静态成员时,static代码块会被执…...
![](https://img-blog.csdnimg.cn/5469f28713fc475a9fe90eed71df5a31.jpeg)
设计模式C++实现12:抽象工厂模式
参考大话设计模式; 详细内容参见大话设计模式一书第十五章,该书使用C#实现,本实验通过C语言实现。 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们…...
![](https://img-blog.csdnimg.cn/652a06036fb4493289ebb03056663f1c.png#pic_center)
目标检测论文阅读:GraphFPN算法笔记
标题:GraphFPN: Graph Feature Pyramid Network for Object Detection 会议:ICCV2021 论文地址:https://ieeexplore.ieee.org/document/9710561/ Abstract 特征金字塔已经被证明在需要多尺度特征的图像理解任务中是强大的。SOTA的多尺度特征…...
![](https://img-blog.csdnimg.cn/img_convert/4c994102ae89b3f32b799107fe9bcd91.jpeg)
实测2023款哪吒U-II,智驾功能对女司机很友好
最近,我们受邀试驾了2023款哪吒U-II。这是一款A级新能源SUV,是哪吒U的改款车型。哪吒U系列自2020年3月上市到2023年1月,累计销售数量达76688台,也因此被称为15万级智能天花板。2023款哪吒U-II的一大亮点是:针对以往哪吒…...
![](https://img-blog.csdnimg.cn/img_convert/f32ad9ab97944ed5a43c761ab516e1ae.png)
Python自动化测试【软件测试最全教程(附笔记、学习路线)】,看完即就业
最近看到很多粉丝在后台私信我,叫我做一期Python自动化测试的教程,其实关于这个问题,我也早就在着手准备了,我录制了一整套完整的Python自动化测试的教程,上传到网盘里了,大家有兴趣的可以去文末交流群免费…...
![](https://img-blog.csdnimg.cn/b2b29b7c4bc54170b17f6a6914e1ce67.png)
2023/2/13总结
今天主要学习了哈夫曼树。 哈夫曼树 哈夫曼树是二叉树的一种,它是一种WPL最优二叉树。 叶子结点(也称叶节点):指的是自己下面不再连接有节点的节点(即末端),称为叶子节点(又称为终…...
![](https://www.ngui.cc/images/no-images.jpg)
webSock前端
1.什么是webSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。允许服务端主动向客户端推送数据。 2.如何使用webSocket WebSocket 构造函数WebSocket 对象作为一个构造函数,用于新建 WebSocket 实例。 代码如下: let ws = new WebSocket(网址); 2.websock事件: …...
![](https://www.ngui.cc/images/no-images.jpg)
AcWing 3956. 截断数组(每日一题)
AcWing 3956. 截断数组 题目描述 给定一个长度为 nnn 的数组 a1,a2,…,ana_1, a_2, …, a_na1,a2,…,an 。 现在,要将该数组从中间截断,得到三个非空子数组。 要求,三个子数组内各元素之和都相等。 请问,共有多少种不同…...
![](https://img-blog.csdnimg.cn/d432dd35365b415493a7e9293aa204d9.png)
Android 一体机研发之修改系统设置————屏幕亮度
Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 前言 最近工作略微有点儿空闲,抽空给大家总结一下:近期一直搞得一体机app研发,适用…...
![](https://www.ngui.cc/images/no-images.jpg)
C++通用算法
1.概述根据名字就知道如何使用相关算法,比如copy函数,就是复制的意思,它需要一个范围,以及要复制的位置copy(begin, end, container_begin);#include <iostream> #include<vector> #include<algorithm> #includ…...
![](https://www.ngui.cc/images/no-images.jpg)
Springboot停机方式
1. 介绍 简单的说,就是向应用进程发出停止指令之后,能保证正在执行的业务操作不受影响,直到操作运行完毕之后再停止服务。应用程序接收到停止指令之后,会进行如下操作: 1.停止接收新的访问请求 2.正在处理的请求&…...
![](https://www.ngui.cc/images/no-images.jpg)
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四、其他…...
![](https://www.ngui.cc/images/no-images.jpg)
Java给定两组起止日期,求交集
/*** 判断2个时间段是否有重叠(交集)* param startDate1 时间段1开始时间戳* param endDate1 时间段1结束时间戳* param startDate2 时间段2开始时间戳* param endDate2 时间段2结束时间戳* param isStrict 是否严格重叠,true 严格࿰…...
![](https://img-blog.csdnimg.cn/9d8d2875dde5404cb933dcd6ed86d566.png)
数组的复制与二维数组的用法
今天学习的主要内容有 数组的复制 数组的复制 利用循环进行数组的复制 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…...
![](https://www.ngui.cc/images/no-images.jpg)
JS判断两个table数据是否完全相等(判断两个数组对象是否完全相等)
需求 现有的table为tableA,有多个要做对比的table为一个数组 CompareArray 涉及到的问题 外层是数组,但是内部数据都是对象,对象属性名的排序不一样外层数组也涉及到 顺序不一样的问题 思路 对compareArray做长度筛选 filter 得到 同长度…...
![](https://img-blog.csdnimg.cn/img_convert/8202fa5fdc0037e732e824ff24ca5f39.png)
关于小程序,你想知道的这些
近年来,各大平台纷纷上架小程序,迎来了小程序的爆发式增长。今天就来跟大家简单分享一下小程序基本的运行机制和安全机制。 小程序的由来 在小程序没有出来之前,最初微信WebView逐渐成为移动web重要入口,微信发布了一整套网页开…...
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://img-blog.csdnimg.cn/e29ff6cfe60f433eb8a206f6be5e3aef.png)
【Linux】软件安装(三分钟教会你如何在linux下安装软件)
🔥🔥 欢迎来到小林的博客!! 🛰️博客主页:✈️小林爱敲代码 🛰️博客专栏:✈️Linux之路 🛰️社区:✈️进步学堂 目录&…...
![](https://www.ngui.cc/images/no-images.jpg)
Fluent Python 笔记 第 10 章 序列的修改、散列和切片
本章将以第 9 章定义的二维向量 Vector2d 类为基础,向前迈出一大步,定义表示多维向量的 Vector 类。这个类的行为与 Python 中标准的不可变扁平序列一样。 10.3 协议和鸭子类型 在 Python 中创建功能完善的序列类型无需使用继承,只需实现符…...
![](https://img-blog.csdnimg.cn/img_convert/ab4e5ae18388d48026827bd741033fdb.png)
在中国程序员工作是青春饭吗?
上个月公司告诉我毕业了。 我打开boss直聘,一溜溜的外包公司和我打招呼。 我寻思我说不定啥时候就离开深圳了,外包不外包也无所谓钱到位就行。(大公司学历不够格也进不去) 结果华为、平安的外包告诉我,不好意思呀&a…...
![](https://img-blog.csdnimg.cn/0a2c3fb4ac9948988c0a91dd75d6b2c8.jpeg#pic_center)
Linux tcpdump
tcpdump - 转储网络上的数据流 是不是感觉很懵?全方位描述tcpdump: 通俗:tcpdump是一个抓包工具,用于抓取网络中传输的数据包形象:tcpdump如同国家海关,凡是入境和出境的货物,海关都要抽样检查࿰…...
![](https://img-blog.csdnimg.cn/3c104788ca8441198a17cf0c11c6337c.png)
redis知识汇总(部署、高可用、集群)
文章目录一、redis知识汇总什么是redisredis的优缺点:为什么要用redis做缓存redis为什么这么快什么是持久化redis持久化机制是什么?各自优缺点?AOF和RDB怎么选择redis持久化数据和缓存怎么做扩容什么是事务redis事务的概念ACID概念主从复制re…...
![](https://img-blog.csdnimg.cn/img_convert/66843d72ec86b4dcf161babfd2aab976.png)
【手写 Vuex 源码】第十篇 - Vuex 命名空间的实现
一,前言 上一篇,主要介绍了 Vuex 响应式数据和缓存的实现,主要涉及以下几个点: Vuex 的响应式实现原理;响应式核心方法 resetStoreVM;commit 和 dispatch 的处理; 本篇,继续介绍 …...
![](https://img-blog.csdnimg.cn/47325515693541728df1ff93aa14683f.png)
面试腾讯测试岗后感想,真的很后悔这5年一直都干的是基础测试....
前两天,我的一个朋友去大厂面试,跟我聊天时说:输的很彻底… 我问她:什么情况?她说:很后悔这5年来一直都干的是功能测试… 相信许多测试人也跟我朋友一样,从事了软件测试很多年,却依…...
![](https://www.ngui.cc/images/no-images.jpg)
知识图谱 方法、实践与应用 王昊奋 读书笔记(下)
最近读了这本书,在思路上很有启发,对知识图谱有了初步的认识,以下是原书后半部分的内容,可以购买实体书获取更多内容。 知识图谱推理 结合已有规则,推出新的事实,例如持有股份就能控制一家公司࿰…...
![](https://img-blog.csdnimg.cn/04bf1b4f49944e11bcc0aa8ffbcc2845.png)
vue实现打印浏览器页面功能(两种方法)
推荐使用方法二 方法一:通过npm 安装插件 1,安装 npm install vue-print-nb --save 2,引入 安装好以后在main.js文件中引入 import Print from vue-print-nbVue.use(Print); //注册 3,现在就可以使用了 div id"printTest…...
![](https://img-blog.csdnimg.cn/img_convert/142733bbdfe0f660746fa7074324dcb0.png)
【VictoriaMetrics】VictoriaMetrics单机版批量和单条数据写入(Prometheus格式)
VictoriaMetrics单机版支持以Prometheus格式的数据写入,写入支持单条数据写入以及多条数据写入,下面操作演示下如何使用 1、首先需要启动VictoriaMetrics单机版服务 2、使用postman插入单机版VictoriaMetrics,以当前时间插入数据 地址为 http://victoriaMetricsIP:8428/api…...
![](https://img-blog.csdnimg.cn/img_convert/5f9573fbdfaf7380ec1c2fc1d36ed6b5.png)
【青训营】分布式定时任务简述
这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天 分布式定时任务简述 定义 定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程。分布式定时任务是把分散的、可靠性差的定时任务纳入统一平台,并且实现集群管理调度和…...
![](https://img-blog.csdnimg.cn/b225d086741b48658083a5e05ad3382a.png)
golang语言本身设计点总结
本文参考 1.golang的内存管理分配 golang的内存分配仿造Google公司的内存分配方法TCmalloc算法;她会把将内存请求分为两类,大对象请求和小对象请求,大对象为>32K的对象。 在了解golang的内存分配之前要知道什么事虚拟内存,虚拟内存是把磁盘作为全局…...
![](https://img-blog.csdnimg.cn/465eb0f461144866b78553e375ab8124.png)
PTA L1-046 整除光棍(详解)
前言:内容包括四大模块:题目,代码实现,大致思路,代码解读 题目: 这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被…...
![](/images/no-images.jpg)
4399小游戏电脑版在线玩/魔贝课凡seo课程好吗
Shell 命令替换是指将命令的输出结果赋值给某个变量。比如,在某个目录中输入 ls 命令可查看当前目录中所有的文件,但如何将输出内容存入某个变量中呢?这就需要使用命令替换了,这也是 Shell 编程中使用非常频繁的功能。 Shell 中有…...
![](https://img-blog.csdnimg.cn/13505310c78f4b0b953ae0fc840170a1.jpeg)
网站怎样做链接/微商刚起步怎么找客源
Internet是目前世界上最大的计算机互联网络,它遍布全球,将世界各地各种规模的网络连接成一个整体。作为Internet上一种先进的,易于被人们所接受的信息检索手段,World Wide Web(简称WWW)发展十分迅速,成为目前世界上最大…...
![](/images/no-images.jpg)
怎么查网站接入商/seo顾问阿亮
在vue中使用dom-top-image,可截取有滚动条的页面,支持多种格式 具体方法如下: 1.首选安装相关插件 npm install dom-to-image然后在使用的页面中引用 import domtoimage from dom-to-image下面是封装的具体的方法: shotPic () {const that thisconst …...
![](/images/no-images.jpg)
达州网站制作/谁有恶意点击软件
4.后续计量(1)持有至到期投资后续计量:按摊余成本进行后续计量。(2)企业在初始确认以摊余成本计量的金融资产或金融负债时,就应当计算确定实际利率,并在相关金融资产或金融负债预期存续期间或适用的更短期间内保持不变。金融资产或金融负债的…...
佛山新网站制作渠道/信息流广告代运营
今日头条视频去重复上传方法-网络营销推广教程如何完美去除视频字幕和LOGO批量下载快手西瓜视频如何快速去掉视频上的logo批量下载快手西瓜视频还有很多渠道也可以上传视频,比如微信公众号、AcFun、百度视频、凤凰自媒体、qq公众平台等等,但是这些平台基…...
![](/images/no-images.jpg)
律师做几个网站/网站google搜索优化
#!/bin/bash #自动备份grafana数据库并上传到云盘 NOWDATEdate %Y-%m-%d YUNPAN_USERxxxx YUNPAN_PASSWDXXXXXXXXXX YUNPAN_SERVERhttps://yunpan.x.com/remote.php/webdav YUNPAN_DIRx/backup/grafana #建立备份基本目录环境 BACKUPDIR/x/data/backup/grafana [ -d ${BACKUPDI…...