第三章:代码块
系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、代码块
- 总结
前言
代码块是只有方法体的类成员。
一、代码块
代码块又成为初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。但与方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显性调用,而是加载类时,或创建对象时隐式调用。
//语法形式
修饰符
{代码
};
| 代码块语法细则 |
|---|
| 修饰符可有可无,要写的话也只能写static |
| ;号可写可不写 |
| 代码块使用好处 |
|---|
| 相当于另外一种形式的构造器,可以做初始化的操做 |
| 如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性 |
| 先调用代码块的内容,在调用构造器 |
package com.hspedu.codeblock_;public class CodeBlock01 {public static void main(String[] args) {Movie movie = new Movie("你好, 李焕英");System.out.println("===============");Movie movie2 = new Movie("唐探 3", 100, "陈思诚");}
} class Movie {private String name;private double price;private String director;//3 个构造器-》 重载//老韩解读//(1) 下面的三个构造器都有相同的语句//(2) 这样代码看起来比较冗余//(3) 这时我们可以把相同的语句, 放入到一个代码块中, 即可//(4) 这样当我们不管调用哪个构造器, 创建对象, 都会先调用代码块的内容//(5) 代码块调用的顺序优先于构造器..{System.out.println("电影屏幕打开...");System.out.println("广告开始...");System.out.println("电影正是开始...");};public Movie(String name) {System.out.println("Movie(String name) 被调用...");this.name = name;}public Movie(String name, double price) {this.name = name;this.price = price;} public Movie(String name, double price, String director) {System.out.println("Movie(String name, double price, String director) 被调用...");this.name = name;this.price = price;this.director = director;}
}
| 代码块使用细则 |
|---|
| static代码块也叫静态代码块,是随着类的加载而执行,并且只会执行一次;普通代码块,每创建一次对象,就执行。使用静态成员或创建多个对象都只会加载一次类 |
| 普通的代码块,在创建对象时,会被隐式的调用。被创建一次,就会调用一次。如果只是使用类的静态成员时,普通代码块并不会执行,可以简单理解,普通代码块时构造器的补充 |
| 类什么时候被加载 |
|---|
| 创建对象实例时(new) |
| 创建子类对象实例,父类也会被加载 |
| 使用类的静态成员时(静态属性,静态方法) |
| 使用类的静态成员时,父类也会被加载 |
| 构造器的最前面其实隐含了super()和调用普通代码块,静态代码块。属性初始化,在类加载时,就执行完毕了 |
| 静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员 |
| 创建一个对象时,在一个类调用顺序 |
|---|
| 1. 调用静态代码块和静态属性初始化,多个则按定义顺序 |
| 2. 调用普通代码块和普通属性的初始化,多个则按定义顺序 |
| 3. 调用构造方法,定义了另一种方法 |
package com.hspedu.codeblock_;public class CodeBlockDetail02 {public static void main(String[] args) {A a = new A();// (1) A 静态代码块 01 // (2) getN1 被调用...// (3) A 普通代码块 01// (4) getN2 被调用..// (5)A() 构造器被调用}
} class A {{ //普通代码块System.out.println("A 普通代码块 01");} private int n2 = getN2();//普通属性的初始化static { //静态代码块System.out.println("A 静态代码块 01");} private static int n1 = getN1();//静态属性的初始化public static int getN1() {System.out.println("getN1 被调用...");return 100;}public int getN2() { //普通方法/非静态方法System.out.println("getN2 被调用...");return 200;} //无参构造器public A() {System.out.println("A() 构造器被调用");}
}
| 在继承关系中创建一个对象,在一个类的调用顺序 |
|---|
| 1. 父类的静态代码块和静态属性(优先级一样按定义顺序执行) |
| 2. 子类的静态代码块和静态属性(优先级一样按定义顺序执行) |
| 3. 父类的普通代码块和普通属性初始化(优先级一样按定义顺序执行) |
| 4. 父类的构造方法 |
| 5. 子类的普通代码块和普通属性初始化(优先级一样按定义顺序执行) |
| 6. 子类的构造方法 |
public class CodeBlockDetail04 {public static void main(String[] args) {//(1) 进行类的加载//1.1 先加载 父类 A02 1.2 再加载 B02//(2) 创建对象//2.1 从子类的构造器开始//new B02();//对象new C02();}
} class A02 { //父类private static int n1 = getVal01();static {System.out.println("A02 的一个静态代码块..");//(2)}{System.out.println("A02 的第一个普通代码块..");//(5)}public int n3 = getVal02();//普通属性的初始化public static int getVal01() {System.out.println("getVal01");//(1)return 10;}public int getVal02() {System.out.println("getVal02");//(6)return 10;}public A02() { //构造器//隐藏//super()//普通代码和普通属性的初始化......System.out.println("A02 的构造器");//(7)}
} class C02 {private int n1 = 100;private static int n2 = 200;private void m1() {}private static void m2() {}static {//静态代码块, 只能调用静态成员//System.out.println(n1);错误System.out.println(n2);//ok//m1();//错误m2();}{//普通代码块, 可以使用任意成员System.out.println(n1);System.out.println(n2);//okm1();m2();}
} class B02 extends A02 { //private static int n3 = getVal03();static {System.out.println("B02 的一个静态代码块..");//(4)} public int n5 = getVal04();{System.out.println("B02 的第一个普通代码块..");//(9)} public static int getVal03() {System.out.println("getVal03");//(3)return 10;} public int getVal04() {System.out.println("getVal04");//(8)return 10;} //一定要慢慢的去品..public B02() {//构造器//隐藏了//super()//普通代码块和普通属性的初始化...System.out.println("B02 的构造器");//(10)// TODO Auto-generated constructor stub}
}
总结
对象的创建有着严格的代码执行顺序。
相关文章:
第三章:代码块
系列文章目录 文章目录 系列文章目录前言一、代码块总结 前言 代码块是只有方法体的类成员。 一、代码块 代码块又成为初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。但与方法不同,…...
javaEE案例,前后端交互,计算机和用户登录
加法计算机,前端的代码如下 : 浏览器访问的效果如图 : 后端的代码如下 再在浏览器进行输入点击相加,就能获得结果 开发中程序报错,如何定位问题 1.先定位前端还是后端(通过日志分析) 1)前端 : F12 看控制台 2)后端 : 接口,控制台日志 举个例子: 如果出现了错误,我们就在后端…...
安卓学习记录
文章目录 Text_View基础属性字体阴影跑马灯**activity_main.xml**MyTextview button Text_View ctrl右键可以看到属性 代码整理采用的快捷键是ctrlaltL(电脑qq锁定快捷键,退一下qq就行了) 基础属性 字体阴影 <?xml version"1.0" encoding"utf-…...
gradle 使用记录
gradle 使用记录 下载与设置android studio 配置 参考 IDEA如何配置 Gradle 及 Gradle 安装过程(详细版) 设置Gradle国内镜像并配置本地仓库地址 下载与设置 腾讯镜像下载 比如gradle-8.4-bin.zip 新建环境变量 GRADLE_HOME 为 D:\java\gradle &#…...
电源基础元件
文章目录 电源基础元件理想电压源理想电流源受控电源 电源基础元件 理想电压源 定义 其两端电压总能保持定值或一定的时间函数,其值与流过它的电流i无关的元件叫理想电压源 理想电压源的电压、电流关系 1.电源两端电压由电源本身决定,与外电路无关&…...
[RK-Linux] updateEngine工具使用以及代码分析
Rockchip Linux 平台支持两种启动方案,Recovery 模式和Linux A/B 模式: Recovery 模式,设备上有一个单独的分区(recovery)用于升级操作。Linux A/B 模式,设备上有两套固件,可切换使用。两种启动方案的对比如下: 升级方案代码路径是否支持Recovey启动模式升级是否支持A/B启…...
MySQL | 数据库的表的增删改查【进阶】
MySQL | 数据库的表的增删改查【进阶】 文章目录 MySQL | 数据库的表的增删改查【进阶】系列文章目录本节目标:数据库约束约束类型NULL约束UNIQUE:唯一约束DEFAULT:默认值PRIMARY KEY:主键FOREIGN KEY:外键CHECK 表的设…...
爱剪辑如何将视频旋转90度,详细操作流程
爱剪辑是一款电脑端常用的视频剪辑类软件,基本上囊括了视频剪辑所需的所有功能,此处主要介绍,爱剪辑是如何对视频进行旋转操作的,水平旋转或者垂直旋转爱剪辑都是可以操作的,整体操作的详细过程将在下方为大家讲解。 …...
三国杀中的概率学问题3——王荣
前言 本文是三国杀中的概率学问题系列文章中的一篇,将详细讨论王荣吉占的期望摸牌数问题。并加上连续情形作为拓展。 值得说明的是,本文的思路受到了一篇文章的启发,在此特别鸣谢,这是文章的链接。 王荣吉占的期望摸牌数 王荣的…...
Linux - 实现一个简单的 shell
前言 之前我们对进程的替换,进程地址空间等等的概念进行了说明,本篇博客会基于这些知识点来 实现一个简单的 shell ,如有疑问,可以参考下述博客:Linux - 进程程序替换 - C/C 如何实现与各个语言之间的相互调用 - 替换…...
不同优化器的应用
简单用用,优化器具体参考 深度学习中的优化器原理(SGD,SGDMomentum,Adagrad,RMSProp,Adam)_哔哩哔哩_bilibili 收藏版|史上最全机器学习优化器Optimizer汇总 - 知乎 (zhihu.com) import numpy as np import matplotlib.pyplot as plt import torch # …...
学习网络编程No.9【应用层协议之HTTPS】
引言: 北京时间:2023/10/29/7:34,好久没有在周末早起了,该有的困意一点不少。伴随着学习内容的深入,知识点越来越多,并且对于爱好刨根问底的我来说,需要了解的知识就像一座大山,压得…...
PSP - 蛋白质复合物结构预测 Template Pair 特征 Mask 可视化
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/134333419 在蛋白质复合物结构预测中,在 TemplatePairEmbedderMultimer 层中 ,构建 Template Pair 特征的源码,…...
RK3568开发笔记-amixer开机设置音量异常
目录 前言 一、amixer介绍 1. 显示音频设备信息 2. 显示音量信息...
STM32两轮平衡小车原理详解(开源)
一、引言 关于STM32两轮平衡车的设计,我想在读者阅读本文之前应该已经有所了解,所以本文的重点是代码的分享和分析。至于具体的原理,我觉得读者不必阅读长篇大论的文章,只需按照本文分享的代码自己亲手制作一辆平衡车,…...
区间内的真素数问题(C#)
题目:区间内的真素数 找出正整数 M 和 N 之间(N 不⼩于 M)的所有真素数。真素数的定义:如果⼀个正整数P 为素数,且其反序也为素数,那么 P 就为真素数。例如,11,13 均为真素数&#…...
eclipse安装lombok插件
lombok插件下载:Download 下载完成,lombok.jar放到eclipse根目录,双击jar运行 运行界面,点击Install安装。 安装完成,重启IDE,rebuild 项目。 rebuild 项目...
故障演练 | 微服务架构下如何做好故障演练
前言 微服务架构场景中,应用系统复杂切分散。长期运行时,局部出现故障时不可避免的。如果发生故障时不能进行有效反应,系统的可用性将极大地降低。 什么是故障演练 故障演练是指模拟生产环境中可能出现的故障,测试系统或应用在…...
Python爬虫-获取汽车之家车家号
前言 本文是该专栏的第9篇,后面会持续分享python爬虫案例干货,记得关注。 地址:aHR0cHM6Ly9jaGVqaWFoYW8uYXV0b2hvbWUuY29tLmNuL0F1dGhvcnMjcHZhcmVhaWQ9MjgwODEwNA== 需求:获取汽车之家车家号数据 笔者将在正文中介绍详细的思路以及采集方法,废话不多说,跟着笔者直接往…...
No195.精选前端面试题,享受每天的挑战和学习
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...
unknown
unknown...
jsTree状态管理插件终极指南:实现用户界面的持久化状态保存
jsTree状态管理插件终极指南:实现用户界面的持久化状态保存 【免费下载链接】jstree jquery tree plugin 项目地址: https://gitcode.com/gh_mirrors/js/jstree jsTree状态管理插件是提升用户体验的关键组件,能够自动保存和恢复树形结构的展开状态…...
Project Quay故障排查指南:常见问题及解决方案
Project Quay故障排查指南:常见问题及解决方案 【免费下载链接】quay Build, Store, and Distribute your Applications and Containers 项目地址: https://gitcode.com/gh_mirrors/quay/quay Project Quay是一款强大的容器镜像仓库管理工具,用于…...
H5网页实现摄像头实时检测与拍照功能
1. 为什么需要网页摄像头功能? 现在越来越多的应用场景需要在网页中直接调用摄像头,比如在线考试的人脸识别验证、远程医疗问诊时的病情拍摄、视频会议中的实时画面传输等。传统做法需要用户安装专门的客户端软件,而H5技术可以直接在浏览器中…...
OpenClaw云端体验:星图平台一键部署Kimi-VL-A3B-Thinking镜像
OpenClaw云端体验:星图平台一键部署Kimi-VL-A3B-Thinking镜像 1. 为什么选择云端体验OpenClaw 作为一个长期折腾本地AI部署的技术爱好者,我深知在个人电脑上配置OpenClaw的痛处。从Python环境冲突到CUDA版本不兼容,每次安装都像在拆解一颗定…...
基于智能软开关的配电网优化调度分析(含故障恢复能力与分布式电源影响)
基于智能软开关的配电网优化调度matlab 采用matlab编程,分析得到了含智能软开关下的配电网故障恢复能力,包括恢复负荷、失电节点以及节点电压等,程序选择标准ieee33节点系统作为分析对象,采用yalmip编程,运行稳定。 这…...
A89306电机控制器驱动库:SPI寄存器级控制与FOC系统集成
1. A89306电机控制器驱动库技术解析与工程实践1.1 芯片定位与系统角色A89306是由Allegro MicroSystems推出的高集成度三相无刷直流(BLDC)电机控制器专用IC,面向中高端工业驱动与精密运动控制场景。该芯片并非通用MCU,而是集成了栅…...
告别卡顿:在Windows10上通过QEMU与WHPX硬件加速高效部署Ubuntu20.04开发环境
1. 为什么选择QEMUWHPX方案? 很多开发者都遇到过这样的困境:在Windows系统上运行Linux虚拟机时,要么性能拉胯到让人抓狂,要么配置复杂得让人望而却步。我之前用VMware跑Ubuntu时,光是开个浏览器就能让CPU飙到100%&…...
Linux栈机制解析:从原理到实践应用
1. Linux中的栈机制概述在计算机系统中,栈(stack)是一种后进先出(LIFO)的数据结构,它不仅在软件层面有着广泛应用,在硬件层面也扮演着关键角色。大多数处理器架构都实现了硬件栈,有专门的栈指针寄存器和特定的硬件指令来完成入栈/…...
2026届学术党必备的降AI率平台横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 降低那个AIGC率的关键要点在于削弱机器生成所呈现出的模式化特性。其一,对句式结…...
