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

Java之静态代码块和静态类、静态导入

前言

在上一篇文章中给大家讲解了static静态关键字,以及静态变量、静态常量和静态方法等内容。但是关于static,还有其他的一些内容,比如静态类、静态代码块和静态导入等,接下来给大家继续分析讲解。我们一起来看看这些内容都是怎么用吧。

全文大约【3300】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图,可以让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

一. 静态代码块

1. 概念

由static修饰的代码块称为静态代码块,每个类中可以有多个静态代码块,每个静态代码块都只会在类加载时执行一次。对那些只需要进行一次操作的初始化代码,就可以放在静态代码块中执行。静态代码块具有如下特性:

● 静态代码块类似于是一个方法,但它不可以在方法中调用,也不能存在于任何方法体中;

● 静态代码块可以写在类中的任何地方,一个类中也可以有多个静态代码块;

● 静态代码块在类加载时执行;

● 静态代码块优先于动态代码块执行;

● 如果类中包含多个静态代码块,则JVM虚拟机会按它们在类中出现的先后顺序依次执行,每个静态代码块只会被执行一次;

● 静态代码块与静态方法一样,不能直接访问类的实例变量和实例方法,需要通过类的实例对象来访问。

2. 语法

静态代码块的语法格式如下:

static {

//代码内容

}

静态代码块的语法格式比较奇特,static关键字后面直接跟一个{ }花括号,这就是静态代码块。我们可以在这个静态代码中编写若干代码,效果类似于是一个方法。

3. 案例

3.1 定义User类

我们先来定义一个User类,在该类中定义一个静态代码块,一个非静态代码块,还有一个构造方法。在Java中,按照代码执行时间的早晚:

静态代码块 > 非静态代码块 > 构造方法 > 普通方法

我们要记住以下几点:

● 静态代码块,在类被加载时就会自动调用,且只会被调用一次。

● 非静态代码块,在对象被创建时自动调用,每次创建对象时都会执行。

● 而构造方法,每创建一个对象就会执行一次。

 3.2 定义测试类

接下来我们再定义一个测试类,在这里创建3个User对象。

 3.3 执行结果分析

上面的代码执行结果如下图所示:

 在上述代码中,我们创建了3个User对象。其中,无论构造几次对象,一个类中的一个static静态代码块都只会执行一次,所以在构造第一个User对象时num是10。然后执行非静态代码块,num变成11,age等于20。接着执行构造方法。num=12,age=21。

之后开始构造第2个对象,此时只执行非静态代码块和构造方法,不会再执行静态代码块。因为num是静态属性,所以第2个user对象继续共享num变量,num=13;而因为age是成员变量,所以age是一个新的成员变量,age仍然是20。接着执行构造方法,num=14,age=21。

最后创建第3个User对象,过程和上述一样。

二. 静态内部类

1. 概念

在Java中,我们可以在一个类的内部定义另一个类,也就是A类里面可以嵌套一个B类,这个内部的B类就叫做内部类。而内部类根据是否带有static关键词,可以分为静态内部类和非静态内部类。

其中,静态内部类使用 static关键字修饰。对于静态内部类,我们可以直接访问,不需要创建外部类来访问它。

注意,对于内部类会在后面进行专门的讲解,所以此处我们大家先有个印象即可。

2. 语法

静态内部类的语法格式如下:

public class 外部类 {

//代码...

static class 内部类{

//代码...

}

}

3. 案例

3.1 定义静态内部类

这里先简单定义一个静态内部类,后面我们在学习内部类时再专门讲解。在这个静态内部类中,定义了一个方法,来访问外部类中的普通属性和静态属性。我们要记住以下几点:

● 静态内部类访问外部类的成员变量时,需要先创建外部类对象;

● 非静态内部类可以直接访问使用外部类的成员变量,如同使用本类中的变量;

● 所有的内部类访问外部类的静态变量时,可以直接通过"外部类.静态变量"的形式访问。

 3.2 定义测试类

我们再定义一个测试类,看看内部类对象是怎么调用的。

 

三. 静态导入

1. 概念

JDK 1.5之后,Java中新增了一种静态导入的语法,用于导入指定类中的某个静态变量、静态方法或全部的静态变量和静态方法。如果一个类中的方法全都是使用 static 声明的静态方法,我们就可以通过import static的方式进行导入,这种导包方式就叫做静态导入。

2. 语法

我们要使用import static语句进行静态导入,根据导入数量的多少,会有两种情况:

● 部分导入:导入部分静态变量或静态方法;

● 全部导入:导入全部静态变量或静态方法。

2.1 部分导入

部分导入是指利用静态导入的语法,导入指定类中单个的静态变量或静态方法。语法格式如下:

 上面的星号是java中的一种通配符,代表所有导入的静态变量或静态方法名。

我们要注意,import static语句要放在Java代码的 package 语句之后、类定义之前,与普通的import语句平级。

3. 案例

我们在这里设计一个简单的案例,给大家演示一下静态导入的使用。我们之前进行输出的时候,经常使用System.out.println("");语句,其实这样就挺麻烦,每次都要写System.out,实际上我们只需要调用println()方法就可以了。而println()就是一个静态方法,所以我们就可以使用静态导包来简化操作了。

 四. 结语

至此,我们就把static静态变量、静态常量、静态代码块、静态类、静态导入等相关的内容给大家全部介绍完毕了。这些都是我们开发时很常用的内容,所以希望各位初学者,要把static相关的内容牢牢掌握。最后壹哥再来给大家简单总结一下本文要点:

● 静态成员属于所有实例对象都“共享”的字段,是类中的“公共财产”;

● 调用静态方法不需要实例对象,静态方法中不能使用this和super;

● 静态方法中可以访问静态变量和其他静态方法;

● 静态方法一般是在工具类中定义;

● 掌握静态代码块的写作方式;

● 掌握静态内部类的调用方式;

● 掌握静态导入的使用方式。

相关文章:

Java之静态代码块和静态类、静态导入

前言 在上一篇文章中给大家讲解了static静态关键字,以及静态变量、静态常量和静态方法等内容。但是关于static,还有其他的一些内容,比如静态类、静态代码块和静态导入等,接下来给大家继续分析讲解。我们一起来看看这些内容都是怎…...

Python3 File isatty() 、os.chflags()方法

Python3 File isatty() 方法Python3 File(文件) 方法概述isatty() 方法检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。语法isatty() 方法语法如下:fileObject.isatty(); 参数无返回值如果连接到一个终端设备返回 True&…...

【SH_CO_TMT_PACKAGE保留60天数据和增加索引】

1. 保留60天数据 DELETE FROM SH_CO_TMT_PACKAGE WHERE CREATED_ < SYSDATE - 195SH_CO_TMT_PACKAGE 这个表是tmt的数据统计表,数据量极大,大概有1500W 里头的数据都是从TMT机台运行状况表(比如满管率,断丝数,下次落纱时间)同步过来的。 朗通针对这些数据,做了个…...

2022蓝桥杯省赛——数位排序

问题描述 小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。 例如, 2022 排在 409 前面, 因为 2022 的数位之和是 6, 小于 409 的数位之和 13 。 又如, 6 排在 …...

弥散磁共振成像在神经科学中的应用

导读弥散加权成像技术突破了神经科学的界限&#xff0c;使我们能够检查活体人脑的白质微观结构。这为基本的神经科学问题提供了答案&#xff0c;开启了一个以前基本上难以接近的新研究领域。本研究简要总结了神经科学历史上提出的关于大脑白质的关键问题。然后&#xff0c;阐述…...

多进程(python)

参考&#xff1a; https://www.liaoxuefeng.com/wiki/1016959663602400/1017627212385376 个人封装的python多进程处理类&#xff0c;跑满CPU&#xff0c;优化性能 概念 进程: 对于操作系统来说&#xff0c;一个任务就是一个进程&#xff08;Process&#xff09;&#xff0c;…...

利用Kali工具进行信息收集(35)

预备知识 Kali是一款开源的安全漏洞检测工具&#xff0c;是专业用于渗透测试的Linux操作系统&#xff0c;由BackTrack发展而来&#xff0c;可以帮助安全和IT专业人士识别安全性问题&#xff0c;验证漏洞的缓解措施&#xff0c;并管理专家驱动的安全性进行评估&#xff0c;提供真…...

《程序员面试金典(第6版)》 面试题 08.11. 硬币(动态规划,组合问题,C++)

题目描述 硬币。给定数量不限的硬币&#xff0c;币值为25分、10分、5分和1分&#xff0c;编写代码计算n分有几种表示法。(结果可能会很大&#xff0c;你需要将结果模上1000000007) 示例1: 输入: n 5 输出&#xff1a;2 解释: 有两种方式可以凑成总金额: 55 511111 示例2: 输…...

实体商家做抖音运营如何做矩阵?

商家实体门店如何做好短视频矩阵&#xff1f;这是一个值得深入探讨的问题。在当今的数字化时代&#xff0c;短视频成为越来越多企业吸引用户、提高曝光度的一种重要方式&#xff0c;实体店也不例外。在本文中&#xff0c;我们将提供一些实用的建议&#xff0c;帮助实体店如何做…...

java 双列集合Map 万字详解

目录 一、前言 二、概述 三、特点 四、常用方法 1. V put(K key, V value) : Δ代码演示 : 2. V get(Object key) : Δ代码演示 : 3. V remove(Object key) : Δ代码演示 : 4. int size() : Δ代码演示 : 5. default V replace(K key, V value) : Δ代码演示 : 6. bo…...

【数据结构】二叉树<遍历>

【二叉树遍历】|-前序-中序-后序-层序-|<二叉树的遍历>1.前序遍历【递归】2.中序遍历【递归】3.后序遍历【递归】4.层序遍历【非递归】4.1判断是否是完全二叉树<二叉树的遍历> 在学习二叉树遍历之前我们先了解下二叉树的概念。 二叉树是&#xff1a; 1.空树 2.非空…...

linux查看硬件信息

dmidecode用于在linux下获取硬件信息&#xff0c;遵循SMBIOS/DMI标准&#xff0c;可获取包括BIOS、系统、主板、处理器、内存、缓存等等硬件信息 1、查看CPU信息cat /proc/cpuinfo、lscpu 型号&#xff1a;cat /proc/cpuinfo|grep name|cut -f2 -d:|uniq -c 物理核&#xff1a…...

吐血整理,互联网大厂最常见的 1120 道 Java 面试题(带答案)整理

前言 作为一个 Java 程序员&#xff0c;你平时总是陷在业务开发里&#xff0c;每天噼里啪啦忙敲着代码&#xff0c;上到系统开发&#xff0c;下到 Bug 修改&#xff0c;你感觉自己无所不能。然而偶尔的一次聚会&#xff0c;你听说和自己一起出道的同学早已经年薪 50 万&#x…...

RabbitMQ如何避免消息丢失

目录1.生产者没有成功把消息发送到MQ2.RabbitMQ接收到消息之后丢失了消息3.消费者弄丢了消息前言 首先明确一点一条消息的传送流程&#xff1a;生产者->MQ->消费者 我们根据这三个依次讨论 1.生产者没有成功把消息发送到MQ 丢失的原因&#xff1a;因为网络传输的不稳定…...

做算法题的正确姿势(不断更新)

不停的反思自己&#xff0c;总结建议 做一道算法题&#xff0c;不能去死磕。 如果看一道题&#xff0c;半小时内&#xff0c;没有清晰的思路&#xff0c;就看题解&#xff01;&#xff01;&#xff01;你可能觉得你有点思路&#xff0c;就往里死钻&#xff0c;结果可能就像进…...

p85 CTF夺旗-JAVA考点反编译XXE反序列化

数据来源 图片来源 Java 常考点及出题思路 考点技术&#xff1a;xxe&#xff0c;spel 表达式&#xff0c;反序列化&#xff0c;文件安全&#xff0c;最新框架插件漏洞等 设法间接给出源码或相关配置提示文件&#xff0c;间接性源码或直接源码体现等形式 https://www.cnblog…...

FastJson——JSO字符串与对象的相互转化

一、FastJson介绍 ​ Fastjson是阿里巴巴的开源SON解析库它可以解析JSON格式的字符串&#xff0c;支持将java Bean序列化为ISON字符串&#xff0c;也可以从JSON字符串反序列化到JavaBean。 Fastjson的优点 速度快 fastjson相对其他JSON库的特点是快&#xff0c;从2011年fastj…...

《程序员面试金典(第6版)》面试题 08.08. 有重复字符串的排列组合(回溯算法,全排列问题)C++

题目描述 有重复字符串的排列组合。编写一种方法&#xff0c;计算某字符串的所有排列组合。 示例1: 输入&#xff1a;S “qqe” 输出&#xff1a;[“eqq”,“qeq”,“qqe”] 示例2: 输入&#xff1a;S “ab” 输出&#xff1a;[“ab”, “ba”] 提示: 字符都是英文字母。…...

k8s API限流——server级别整体限流和客户端限流

1. 背景 为了防止突发流量影响apiserver可用性&#xff0c;k8s支持多种限流配置&#xff0c;包括&#xff1a; MaxInFlightLimit&#xff0c;server级别整体限流Client限流EventRateLimit, 限制eventAPF&#xff0c;更细力度的限制配置 1.1 MaxInFlightLimit限流 apiserver…...

在华为做了三年软件测试被裁了,我该怎么办

近年来&#xff0c;随着经济环境的变化和企业战略的调整&#xff0c;员工被裁员的情况变得越来越普遍。无论是因为企业经营困难还是因为业务调整&#xff0c;员工们都可能面临被裁员的风险。如果你也遇到了这样的情况&#xff0c;那么你应该怎么办呢&#xff1f; 首先&#xf…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...