Java代码初始化块

目录

实例域代码块

静态域代码块


初始化代码块分为静态域代码块和实例域代码块,静态域代码块在类第一次被加载时被执行,实例域代码块在创建对象时被执行,一个类中可以有多个代码块。 

实例域代码块

使用方法

  • 可以有输出语句

  • 可以对类的属性、类的声明进行初始化操作

  • 对集合中属性进行填充

  • 可以调用静态的方法或者变量

  • 若有多个非静态代码块,执行顺序为从上到下的顺序依次执行

  • 每次创建对象的时候,都会执行依次

public class ClassD {int a;static String str="数据3";static void print(){System.out.println("静态方法执行了");}List list=new ArrayList();{int a=10;list.add("数据1");list.add("数据2");list.add(str);print();System.out.println("实例域代码块执行了");}public ClassD() {System.out.println("构造方法");}public static void main(String[] args) {ClassD classD=new ClassD();System.out.println(classD.list.toString());}
}

运行结果:

这里有个问题,就是我们可以看出实例域代码块比构造方法先执行了,但真的是这样吗?对象在初始化的时候会先调用构造方法,这是毫无疑问的,那为什么会出现上面的结果呢?看下面这段代码

public class A {A() {System.out.println("构造方法");}{System.out.println("实例域代码块");}public static void main(String[] args) {A a=new A();}
}

 执行结果:

实际上在进行构造方法时会将代码初始化块放到了构造方法中

public class A {A() {{ System.out.println("实例域代码块"); }System.out.println("构造方法");}
}

静态域代码块

静态代码块通常用来初始化一些静态变量,它会优先于 main() 方法和实例化代码块执行。

public class staticBlock {{System.out.println("实例代码块执行了");}static{System.out.println("静态代码块执行了");}public static void main(String[] args) {System.out.println("执行main了");}}

运行结果:

再看下面这段代码 

public class staticBlock {{System.out.println("实例代码块执行了");}static{System.out.println("静态代码块执行了");}public static void main(String[] args) {staticBlock staticBlock1=new staticBlock();staticBlock staticBlock2=new staticBlock();System.out.println("执行main了");}}

运行结果:

 然后再看这段示例:

public class staticBlock {{System.out.println("实例代码块执行了");}static{System.out.println("静态代码块执行了");}public static void main(String[] args) {System.out.println("执行main了");}}

运行结果:

 

可以看出静态域代码块是在类加载过程中执行,只会执行一次,而实例域代码块是在类实例化时才会执行,每次创建实例对象都会执行一次 。因此,在实际开发之中,可以通过静态代码块来加载一些配置文件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue实现a-model弹窗拖拽移动

通过自定义拖拽指令实现 实现效果 拖动顶部,可对整个弹窗实施拖拽(如果需要拖动底部、中间内容实现拖拽,把下面的ant-modal-header对应改掉就行) 代码实现 编写自定义指令 新建一个ts / js文件,用ts举例 import V…

基于modbus tcp通讯的雷赛导轨控制器调试软件

0.前言 之前工作遇到了雷赛电机驱动器设备,主要是用来控制光学导轨移动。雷赛的调试软件用的时串口通讯,还要他们定制的串口线,在现场都是485转网络的接口,调试起来也很不方便。所以我就照着他们的说明书,写了一个简易…

Vue3 引入Vanta.js使用

能搜到这篇文章 想必一定看过demo效果图了吧 示例 Vanta.js - Animated 3D Backgrounds For Your Website (vantajs.com) 1. 引入 在根目录 index.html中引入依赖 <script src"https://cdnjs.cloudflare.com/ajax/libs/three.js/r134/three.min.js"></sc…

基于SpringBoot+VueJS+微信小程序技术的图书森林共享小程序设计与实现:7000字论文+源代码参考

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

详解 @MapperScan 注解和 @Mapper 注解

文章目录 1. Mapper 注解1.1 Mapper 注解的定义和用途1.2 Mapper 注解的使用示例 2. MapperScan 注解2.1 MapperScan 注解的定义和用途2.2 MapperScan 注解的使用示例 3. Mapper 注解与 MapperScan 注解的区别4. 使用 Mapper 和 MapperScan 的注意事项5. Mapper 和 MapperScan …

我会什么开发技能

java我会什么&#xff1f; 一、并发编程 1、并发编程&#xff1a;jdk中的courren包只能够类实现&#xff08;seamplore&#xff0c;CountDownLaunch&#xff0c;Pharse&#xff0c;CycliBarrier&#xff0c;CompletableFuture&#xff09;&#xff0c;AQS的原理&#xff0c;线…

mysql笔记1

查询是在mysql中耗时最多的&#xff0c;约束是非常消耗cpu性能&#xff0c;外国不承认阿里的代码规范&#xff0c;在页面小报错没关系&#xff0c;库1与库2相互不影响&#xff0c;mysql被orcle收购了&#xff0c;所以mysql也属于oracle,企业中不允许推倒重来utf8mb3更适合中文 …

基于FPGA设计基础知识

基于FPGA设计基础知识 数字电路&#xff08;数电&#xff09;知识模拟电路&#xff08;模电&#xff09;知识1. 放大器1.1. 晶体管放大器1.2. 运算放大器1.3. 管子放大器&#xff08;真空管放大器&#xff09;微处理器/单片机知识其他相关知识 基于FPGA的算法设计是一个跨学科的…

底软驱动 | U-boot移植点点滴滴

u-boot 移植要点 一般厂家直接提供 u-boot 源码&#xff0c;做查看、修改(增加新功能) 或 u-boot 版本升级这三大块的用处&#xff1b;后两种都需要对新板子做适配/移植。 如果没有提供 u-boot 源码&#xff0c;那么就从 u-boot 官方版本中找到一个最相近的板子配置进行移植&…

【QT】布局管理器

布局管理器 布局管理器1. 垂直布局2. 水平布局3. 网格布局4. 表单布局5. Spacer 布局管理器 之前使⽤ Qt 在界⾯上创建的控件, 都是通过 “绝对定位” 的⽅式来设定的&#xff1b;也就是每个控件所在的位置, 都需要计算坐标, 最终通过 setGeometry 或者 move ⽅式摆放过去。 …

Log4j的原理及应用详解(四)

本系列文章简介&#xff1a; 在软件开发的广阔领域中&#xff0c;日志记录是一项至关重要的活动。它不仅帮助开发者追踪程序的执行流程&#xff0c;还在问题排查、性能监控以及用户行为分析等方面发挥着不可替代的作用。随着软件系统的日益复杂&#xff0c;对日志管理的需求也日…

深入理解C++ 中的可调⽤对象

C中的可调⽤对象总结 普通函数类成员函数类静态成员函数与类成员函数的区别 仿函数简单示例高级用法-状态保持优缺点优点缺点 函数指针获取函数地址声明并调用函数指针 lambda表达式语法定义捕获单个捕获符 std::function()协程 可调用对象用处⼴泛&#xff1a; ⽐如在使⽤⼀些…

排序-java(详解)

一&#xff0c;分类 主要的排序大致分为以下几类&#xff1a; 1&#xff0c;插入排序&#xff0c;又分为直接插入排序和希尔排序 2&#xff0c;选择排序&#xff0c;又分为选择排序和堆排序 3&#xff0c;交换排序&#xff0c;又分为冒泡排序和快速排序 4&#xff0c;归并…

【linux】服务器安装及卸载pycharm社区版教程

【linux】服务器安装及卸载pycharm社区版教程 【创作不易&#xff0c;求点赞关注收藏】 文章目录 【linux】服务器安装及卸载pycharm社区版教程1、到官网下载安装包2、通过终端wget下载安装包3、解压4、安装5、设置环境变量6、运行pycharm7、删除pycharm安装包、卸载pycharm …

从“卷模型”到“卷应用”:AI时代的价值重塑与个性化智能探索

&#x1f308;所属专栏&#xff1a;【其它】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

使用独享代理IP安全性高不高?怎么辨别独享IP和共享IP?

在网络安全的多种工具和技术中&#xff0c;代理IP是常用的一种手段&#xff0c;尤其是在处理需要隐私保护和安全性的网络请求时。独享代理IP&#xff08;专用代理&#xff09;和共享代理IP是两种主要的代理类型&#xff0c;它们在安全性、性能和成本方面有着本质的区别。本文将…

【漏洞复现】华测监测预警系统2.2 UserEdit.aspx SQL注入

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 华测监测预警系统2.2&#xff08;HuaCe Monitoring and Early Warning System 2.2&#xff09;是一款由华…

人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解。本文将给大家展示全连接神经网络与代码详解&#xff0c;包括全连接模型的设计、数学原理介绍&#xff0c;并从手写数字识别到猫狗识…

【第32章】MyBatis-Plus之代码生成器配置

文章目录 前言一、概述1.特点说明2.示例配置3. 数据库配置 (DataSourceConfig) 二、全局配置 (GlobalConfig)1.方法说明2.示例配置 三、包配置 (PackageConfig)1. 方法说明2. 示例配置 四、模板配置 (TemplateConfig)1. 方法说明2. 示例配置 五、注入配置 (InjectionConfig)1. …

使用 exe4j 转换 Java jar 程序为 Windows 平台可执行文件 (.exe)

使用 exe4j 转换 Java jar 程序为 Windows 平台可执行文件 &#xff08;.exe&#xff09; 介绍exe4j 特点&#xff1a;转换全过程&#xff08;软件操作&#xff09;1、注册2、选择模式3、配置应用4、选择执行的方式&#xff08;我这里管这个叫呈现方式&#xff09;5、选择 JAR …