Java学习笔记
文章平均质量分 69
Java学习笔记
i余数
这个作者很懒,什么都没留下…
展开
-
当FutureTask遇上DiscardPolicy,有坑
今天来了解下当 FutureTask 遇上 DiscardPolicy 或 DiscardOldestPolicy 时容易掉的坑,然后分析分析问题产生的原因以及如何规避这类问题。原创 2023-01-10 22:40:37 · 417 阅读 · 0 评论 -
Spring注解 @EventListener 的介绍与使用示例以及异常处理
将一个方法标记为监听器,用于监听应用程序事件,事件可以是 ApplicationEvent实例,也可以是其他任意的对象。原创 2023-01-05 20:32:16 · 14502 阅读 · 13 评论 -
Java如何自定义一个变长数组?
1. 扩容:这里扩容2倍(ArrayList 是扩容 1.5 倍),扩容时新建一个2倍容量的新数组,然后将旧数组中的元素按顺序拷贝到新数组。2. 缩容......原创 2022-12-29 11:03:51 · 2278 阅读 · 0 评论 -
Spring BeanPostProcessor 代码实践
执行顺序为:依赖注入 > postProcessBeforeInitialization > @PostConstruct > afterPropertiesSet > postProcessAfterInitialization。Bean后置处理器接口,在初始化方法前后执行,允许对新建的Bean实例进行自定义修改,如检查标记接口或者包装为代理类。原创 2022-09-12 12:30:53 · 342 阅读 · 0 评论 -
Spring @Transactional 与 JTA @Transactional
本文主要介绍Spring @Transactional 与 JTA @Transactional注解的差别。在Spring应用中可以使用JTA事务注解,但是在Spring应用外无法使用Spring事务注解,只能用JTA。原创 2022-09-09 21:15:00 · 1515 阅读 · 0 评论 -
Jackson ObjectMapper activateDefaultTyping 中 JsonTypeInfo 的作用
主要用于将Java Class 以指定的格式序列化到Json字符串中,反序列化时就不需要显示的指定转换类型了。以属性的的方式,在Json字符串中体现为:"@class"为key,Class Type 为value。以数组的方式,Class Type 为第一个元素,Json字符串为第二个元素。以对象的形式,Class Type 为key, Json字符串为value。反序列化时需要显示指定读取的Java Class 类型。序列化后的字符串不包含Class Type。准备一个Person类,用于后续测试。原创 2022-09-07 20:30:06 · 3251 阅读 · 0 评论 -
Java8 为什么在接口中引入default方法,以及default方法的使用
Java8 为什么在接口中引入 default 方法?Java8之前,如果需要在一个已有的接口中添加一个方法,那么所有这个接口的实现类也都必须同时实现这个方法,否则程序将无法正常编译运行。为了解决这一问题,Java8在接口中引入了 default 方法。default 方法也被称之为守护方法(defender method)或者虚拟扩展方法(virtual extension method)。............原创 2022-08-27 21:08:39 · 1929 阅读 · 0 评论 -
使用 Spring InitializingBean接口的afterPropertiesSet方法实现初始化操作
由Spring提供,在设置完Bean的所有属性后被调用,主要用于执行一些初始化操作和检查属性是否合规。使用JDK提供的注解@PostConstruct同样可以实现这些功能。执行顺序:构造方法 -> 依赖注入 -> @PostConstruct -> afterPropertiesSet -> @PreDestroy.........原创 2022-08-26 20:14:13 · 701 阅读 · 0 评论 -
@PostConstruct注解的使用
@PostConstruct注解是Java自带的,在包javax.annotation下。用于将一个方法标注为初始化方法,在依赖注入完成后执行初始化操作,每个类最多只能有一个方法被该标签标注,且只会执行一次。原创 2022-08-26 18:15:10 · 946 阅读 · 0 评论 -
Jackson 反序列化 — UnrecognizedPropertyException异常解决方案
概述:出现这个异常的原因是JSON转Java对象的时候,JSON包含有Java对象没有的属性值,所以无法识别该多余的属性。解决方案有三种,分别是:原创 2020-10-28 21:45:27 · 9569 阅读 · 0 评论 -
Jackson序列化 — 修改属性名称
概述:通过注解 @JsonProperty 可以更改序列化字段名。@JsonProperty 可以打在字段上,也可以打在属性上。当在打在字段上的时候,可以省略对应字段的getter方法。代码示例:import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;public class Test { private final stat原创 2020-10-27 20:58:48 · 3586 阅读 · 0 评论 -
Jackson序列化 — 自定义日期格式
介绍:Jackson 对 java.util.Date 的默认序列化是时间戳。我们可以通过ObjectMapper提供的setDateFormat方法去改变其对 java.util.Date 的序列化格式。 public ObjectMapper setDateFormat(DateFormat dateFormat) { this._deserializationConfig = (DeserializationConfig)this._deserializationConfig原创 2020-10-27 20:56:32 · 2384 阅读 · 0 评论 -
Jackson 序列化 JSON 时忽略 Null 值
一、忽略某一个值为 Null 的属性二、忽略 Class 下的所有值为 Null 的属性三、全局配置,忽略所有待序列化对象的 Null 属性原创 2020-10-26 11:15:28 · 14319 阅读 · 2 评论 -
Could not find artifact com.sun:tools:jar:1.8.0 at specified path
原因环境变量 JAVA_HOME 配置错误,应该配置为jdk的路径而不是jre的路径。我们可以看到tools.jar是在jdk目录下的。解决方式更新 JAVA_HOME 的配置为 jdk 路径。重启cmd即可生效。原创 2020-10-23 09:04:13 · 12442 阅读 · 0 评论 -
Java多次获取Request Body的实现
HttpHelper 获取 request bodypublic class HttpHelper { private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class); /** * get request Body * */ public static String getBodyString(ServletRequest request) {原创 2020-10-21 15:29:02 · 1417 阅读 · 1 评论 -
Springboot jar包部署脚本 start/stop/restart/status
shell脚本#!/bin/shAPP_NAME=my-app.jarCONFIG_LOCATION=/webapp/my_app/application.ymlusage(){ echo "Usage: sh my-app.sh [start|stop|restart|status]" exit 1}is_exist(){ pid=`ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}'` if [ -z "${pid}原创 2020-09-25 10:30:49 · 881 阅读 · 0 评论 -
如何使 HttpClient 的 Delete 支持 HttpEntity 传参
pom 依赖<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId></dependency>问题所在HttpDelete 继承自 HttpRequestBase,而 HttpRequestBase 中并没有关于设置 HttpEntity 的实现。解决方案我们知道 HttpPost原创 2020-09-24 15:27:10 · 843 阅读 · 0 评论 -
Spring StopWatch代码示例
import lombok.extern.slf4j.Slf4j;import org.springframework.util.StopWatch;@Slf4jpublic class StopWatchTest { public static void main(String[] args) throws InterruptedException { StopWatch stopWatch = new StopWatch("每日工作时间"); stop原创 2020-09-16 17:49:11 · 193 阅读 · 0 评论 -
spring boot 访问项目时加项目名称
以 application.yml 为例:server: port: 8080 servlet: context-path: my-project原创 2020-09-14 10:50:15 · 592 阅读 · 0 评论 -
IDEA 异常总结
Cannot access Xxx当 extends Xxx 的时候, IDEA 莫名其妙的提示异常 Cannot access Xxx,重启后恢复正常。原创 2020-09-08 15:46:53 · 364 阅读 · 0 评论 -
JAVA IO InputStreamReader:字节流转换为字符流的桥梁
概述InputStreamReader 是字节流转换为字符流的一个桥梁。它将读取到的字节数据根据指定字符编码解码成字符数据。因InputStreamReader 继承自 Reader, 所以其必然需要实现两个方法read(char[], int, int) 和 close()。构造函数InputStreamReader(InputStream in): 字符编码为虚拟机默认字符编码,如果找不到虚拟机默认编码则采用UTF-8。InputStreamReader(InputStream in, St原创 2020-08-20 23:24:24 · 1753 阅读 · 0 评论 -
Java IO PipedInputStream与 PipedOutputStream
PipedOutputStream 源码解析/** * 1. 可以将一个管道输出流连接到一个管道输入流,来创建一个通信管道。管道的数据发送端为管道输出流。 * 2. 通常,一个线程将数据写入到管道输出流(PipedOutputStream),其他线程可以通过与管道输出流相连接的管道输入流(PipedInputStream)来读取数据。 * 3. 不推荐在一个线程中同时使用管道输入输出流,可能会导致死锁。 * 4. 如果从相连接的管道输入流读取数据的线程已经不再存活,那么就代表这个管道已经损坏。原创 2020-08-19 00:04:19 · 169 阅读 · 0 评论 -
Java 创建 List 的时候直接赋值
示例代码public class Test { private static List<String> list = new ArrayList<String>() { // 第一个花括号表示匿名内部类 { // 第二花括号表示匿名内部类的构造代码块,可以有多个。构造代码块在构造函数前执行,匿名内部类的构造代码块在调用父类同参构造函数后执行 this.add("A"); this.add("B");原创 2020-08-18 16:23:47 · 9824 阅读 · 0 评论 -
Java IO ByteArrayInputStream与 ByteArrayOutputStream
publicclass ByteArrayInputStream extends InputStream { /** * 创建时提供的字节数组 * 流中可读元素从 buf[0]到 buf[count-1] * 元素 buf[pos] 为下一个可读字节 */ protected byte buf[]; /** * 下一个可读字节的索引位,这个值一定是非负整数且不大于 count 。 * 下一个可读字节是 buf[pos]原创 2020-08-13 00:06:54 · 311 阅读 · 0 评论 -
Java判断一个字符是否是中文 以及 判断一个字符串是否包含中文
/** * 判断一个字符是否是中文 * */ public static boolean isChinese(char c) { return c >= 0x4E00 && c <= 0x9FA5;// 根据字节码判断 } /** * 判断一个字符串是否包含中文 * */ public static boolean hasChinese(String str) { i...原创 2020-08-08 22:21:41 · 2396 阅读 · 0 评论 -
Java IO ObjectInputStream 与 ObjectOutputStream
public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private Integer age; private String sex; public Person(String name, int age, String sex){ this.name = name;原创 2020-08-05 18:25:17 · 224 阅读 · 0 评论 -
Java IO File中delete()和deleteOnExit()的区别
delete():直接删除 public boolean delete() { SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkDelete(path); } if (isInvalid()) { return false; }转载 2020-08-05 10:52:07 · 757 阅读 · 0 评论 -
Java Arrays的8个常用方法
1、数组的声明String[] aArray = new String[5];String[] bArray = {"a","b","c", "d", "e"};String[] cArray = new String[]{"a","b","c","d","e"};2、打印输出一个数组的内容int[] intArray = { 1, 2, 3, 4, 5 };Stri原创 2014-03-30 23:54:23 · 1008 阅读 · 1 评论 -
final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用原创 2014-02-18 23:11:41 · 482 阅读 · 0 评论 -
DOM解析XML——打印所有元素的名字(迭代)
import java.io.InputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.junit.Before;import org.junit.Test;import org.w3c.dom.Document;im原创 2014-02-16 14:48:43 · 1148 阅读 · 0 评论 -
JSTL标签库引用无效
JSTL标签库引用无效,纠结了半天,最后发现忘记添加standard.jar包了。至于为什么要加,因为standard.jar是JSP 标准标签库,在1.0、1.1的版本中,和jstl.jar 一起使用,但在jstl-1.2.jar 就不再需要了。原创 2014-02-21 21:39:15 · 1411 阅读 · 0 评论 -
JAVA学习笔记——字符串操作(String,StringBuffer,StringBuilder)
java中用于存储和操作字符串的类有3个,分别是String,StringBuffer和StringBuilder。这3个类都是final类型的,也就是说不可以被继承。他们都实现了java.io.Serializable接口。一、StringString是一个不可变常量,他的值一旦创建就不能再做更改。我们一般对String的操作事实上都是重新建立了一个新的String对象。创建St原创 2013-11-01 17:04:30 · 901 阅读 · 1 评论 -
JAVA学习笔记——增强Date与String之间的相互转换
之前写的转换工具有点儿二,改进一下,可以自定义转换格式,也可以使用默认格式“yyyy-MM-dd”转换。自定义格式转换调用下面这两个方法,其中pattern为自定义格式字符串。public static Date str2date(String date, String pattern)public static String date2string(Date date, Stri原创 2013-10-26 13:39:10 · 729 阅读 · 0 评论 -
求一个字符串的最长回文子字符串
public static String longestPalindrome1(String s) { int maxPalinLength = 0; String longestPalindrome = null; int length = s.length(); for (int i = 0; i < length; i++) { for (int j = i + 1; j转载 2014-03-23 20:37:19 · 780 阅读 · 0 评论 -
java.lang.IllegalStateException: getWriter() has already been called for this response
java.lang.IllegalStateException: getWriter() has already been called for this response在执行下述代码时报错,OutputStream out = getResponse().getOutputStream();原因为代码中有打开的Response.getWriter(),未关闭,因调用点较多,不好一一原创 2014-04-18 14:15:25 · 574 阅读 · 0 评论 -
CKFinder图片中文名称乱码问题
问题:出现乱码的问题主要是因为前后台编码不一致造成。解决方法:CKFinder默认编码方式为“UTF-8”,所以要求程序默认编码为“utf-8”,如果不是,需要将上传图片时的名称手动进行编码。一般情况下,项目的编码都应该是“UTF-8”,以java项目为例,tomcat的配置文件server.xml中应设置编码方式,例如:<Connector port="80" p原创 2015-02-12 11:48:45 · 1508 阅读 · 0 评论 -
struts2和CKFinder的整合(java版)
原因:默认web.xml配置 struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* 站点所有请求都要经过struts2过滤器原创 2015-02-12 14:29:50 · 813 阅读 · 0 评论 -
java验证手机号码是否合法
公司开发新功能需要验证手机号码,遂自己写了个出来,暂只支持中国大陆手机号验证。如有不妥之处,还望大家不吝赐教,感激不尽! /** * 验证是否是正确合法的手机号码 * * @param telephone * 需要验证的打手机号码 * @return 合法返回true,不合法返回false * */ p原创 2015-03-17 12:38:24 · 8451 阅读 · 0 评论 -
SpringMVC 之 HiddenHttpMethodFilter 实现原理
SpringMVC 本身是支持 PUT,DELETE 等 HTTP 请求方式的,但由于某些客户端(如:浏览器)并不支持这些,所以 Spring 提供了HiddenHttpMethodFilter这个过滤器来规避这一问题。转载 2016-11-17 17:36:03 · 3965 阅读 · 0 评论 -
java判断生日字符串是否合法
写了个判断用户输入生日字符串是否合法的方法,前提是输入字符串格式为yyyyMMdd。 public static boolean checkBirthDay(String birthday) { if (Common.empty(birthday)) { return false; } if (birthday.l原创 2015-03-17 20:22:15 · 3796 阅读 · 1 评论