关于Java中try...catch...finally的面试题
关于Java中try…catch…finally的面试题
一、问题
try...catch...finally
try中间有return返回值,那么finally还执行吗?
如果try中间有return返回,finally中间也有,会发生什么?
如果try中间有return返回一个变量,在finally中修改这个变量,会发生什么?
二、解答
1)try中间有返回值,那么finally还执行吗
finally中的代码块都会执行,不管try中有没有return,也不管有没有出现异常。
这个大家都知道,通常这个finally关键字,都是用来释放资源的,比如关闭流。
2)如果try中间有return返回,finally中间也有,会发生什么
这个问题有点困扰,平常我们不会这样写代码,正如上面说的,我们通常是用来释放资源的。
但如果在finally出现了return代码,应该知道将会出现什么样的结果。
注意看下面这段代码
123456789101112131415161718192021222324252627282930packa ...
Spring中事件的发布订阅
Spring中事件的发布订阅
一、介绍
在Spring框架中,ApplicationEventPublisher是一个接口,用于发布应用程序事件。它允许应用程序的不同组件之间进行解耦,实现事件驱动的开发模式。
通过ApplicationEventPublisher,我们可以将自定义的事件发布到应用程序的上下文中,然后其他组件可以注册为ApplicationListener来监听这些事件。ApplicationListener是另一个接口,用于接收和处理应用程序事件。
当事件被发布时,ApplicationEventPublisher会通知所有注册的ApplicationListener,并将事件对象传递给它们。这样,监听器就可以根据事件的类型进行相应的处理逻辑,完成业务逻辑的触发和处理。
使用ApplicationEventPublisher和ApplicationListener可以实现松耦合的事件驱动编程,提高代码的可维护性和扩展性。它们是Spring框架中事件机制的核心组件之一。
不啰嗦,直接看如何编写代码
二、代码
声明一个事件,TestEvent.java,需要继承Appli ...
如何在控制台实现一个进度条
如何在控制台实现一个进度条
一、前言
在今天使用Java代码做一个集合的任务的时候,没在for循环中手动打印日志信息,导致在任务执行后根本不知道执行到了哪一步。
这点让我挺困扰的,于是在github上寻找有没有什么进度条的显示方式,我还真找到了。
看了一下代码,挺简单的,就将思路直接copy过来,实现了一个自己的控制台进度条。
vdurmont/etaprinter: Java console progress bar (github.com)
二、代码
抽象类ProcessBarUtil.java,里面有着基本的信息
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485package com.banmoon.utils.processbar;import java.util.Iterator;import java.u ...
SpringBoot动态创建绑定rabbitMq队列
SpringBoot动态创建绑定rabbitMq队列
一、介绍
在以前,我写过一篇如何使用SpringBoot整合rabbitMq的文章。
SpringBoot整合rabbitMq | 半月无霜 (banmoon.top)
上面这种方法,是自己创建队列,交换机,绑定。生成Bean,从而实现队列等等的创建。
这种方式太过于繁琐,有没有一种方法可以快速创建呢,我们只管使用就行了
还真的有,只需要在配置文件中配置队列、交换机等信息,就可以在服务启动的时候自动创建并绑定。
一次偶然间,在csdn上看到了,动态创建rabbitMq队列的文章。
拉出来魔改了一下,只要再配置文件中配置了相关的实现,实现了队列、交换机的绑定。
同时还解决了,多个开发连接同一个rabbitMq,导致自己生产的消息,被其他同事消费走的问题。
二、代码
1)读取配置的代码
这是RabbitModuleInfoProperties.java,读取配置文件中的信息,生成信息对象
12345678910111213141516171819202122232425262728293031323334353637383940414 ...
ComplatableFuture初解使用
ComplatableFuture初解使用
一、介绍
CompletableFuture是Java中的一个类,用于进行异步编程。它提供了一套强大的方法,可以方便地管理异步操作、处理结果和错误等。
二、方法
方法
功能
入参
出参
completedFuture(T value)
创建一个已经完成结果的CompletableFuture对象
无
有
runAsync(Runnable runnable)
启动异步任务
无
无
supplyAsync(Supplier<U> supplier)
启动异步任务
无
有
thenApply(Function<T, U> function)
转换一个CompletableFuture对象及内容
有
有
thenApplyAsync(Function<T, U> fn)
启动异步任务,转换一个CompletableFuture对象及内容
有
有
thenAccept(Consumer<T> consumer)
消费一个CompletableFuture对象的内容
有
...
SpringBoot日志详解使用include
SpringBoot日志详解使用include
一、介绍
前段时间,公司让我整改SpringBoot日志的配置,我改的老痛苦了。
一共有7个微服务,其中每一个微服务各自都有4个这样logback-spring-{active}.xml文件。
正好我看过SpringBoot中是怎么写的,给大家截图看下
既然如此,我们也可以通过include标签来进行编写。
哦对了,SpringBoot使用的logback日志,里面的含义代表什么,我就不详细讲了。
具体可以看我的这边文章,SpringBoot日志配置详情 | 半月无霜 (banmoon.top)
二、配置
这边创建两份基础文件,分别是
banmoon-logback-defined.xml:里面定义了一些参数
banmoon-logback-append.xml:里面定义了一些输出
banmoon-logback.xml:将上面的两个文件引入整合,并加上了一些日志等级的配置
看看文件所在的目录,都在scr/main/java的包内
1)banmoon-logback-defined.xml
123 ...
如何读取到maven中profile设置的参数
如何读取到maven中profile设置的参数
一、介绍
在maven工程中,我们会用到profiles来配置不同环境的不同的参数。
我们下面介绍如何读取到在这里面设置的值
1234567891011121314151617<profiles> <profile> <id>local</id> <properties> <host>localhost:2333</host> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>dev</id> <properties> ...
JDK17的新特性写法
JDK17的新特性写法
一、介绍
JDK 17 是 Java Development Kit(Java 开发工具包)的一个版本,是 Oracle 公司提供的 Java SE(Java 平台,标准版)的一部分。以下是 JDK 17 的一些基本信息:
版本号:JDK 17 的完整版本号是 17,它是 Java SE 17 的版本。
发布日期:JDK 17 v17.0.0 在 2021 年 9 月 14 日正式发布。
LTS 版本:JDK 17 被标记为 “LTS”(长期支持)版本。LTS 版本提供长期支持和维护,适合用于生产环境。
特性更新:JDK 17 引入了一些新的特性、改进和增强,包括但不限于密封类、基础类型的模式匹配、日期时间API的升级等。
垃圾回收器:JDK 17 包含了多种垃圾回收器,包括 ZGC、G1GC、ParallelGC 等,以满足不同场景下的需求。
二、新特性
1)switch
可以不用再写break了,可以进行简化
1234567891011121314151617181920212223242526272829303132package ...
MySQL插入重复后进行覆盖更新
MySQL插入重复后进行覆盖更新
一、介绍
在MySQL中,常常会有唯一键的约束,当使用Java插入重复的值后,会报异常我们需要进行捕获处理。
上面的解决思路,确实是一种办法,但我将介绍一下MySQL的一种插入写法,可以解决这种插入重复数据的问题。
二、使用
首先,我们先建立一张有唯一键的表,并初始化插入一条数据
1234567891011121314CREATE TABLE `tb_user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(20) NOT NULL COMMENT '姓名', `old_name` varchar(20) DEFAULT NULL COMMENT '曾用名', `id_card` varchar(20) NOT NULL COMMENT '身份证号码', `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT ...
如何在html中使用Vue3
如何在html中使用Vue3
一、介绍
作为一名后端人员,有时候会写一点前端代码配合使用。
但比较轻量,没有必要使用脚手架创建工程,故此我在html中使用就好了。
正如那句话,适合自己的才是最好的。
二、代码
1)引入Vue,并创建Vue实例
在官网上,已经讲得很清楚了,我们可以这样使用
1234567891011121314151617181920212223242526272829<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>html使用vue</title></head><body> <div id="app" v-c ...