java
各种Java问题的分类,各种异常了,各种小问题了,等等吧,涉及到Java的都给分到这个类里面
请叫我大师兄_
请叫我大师兄
展开
-
Java UnsatisfiedLinkError问题
在java程序中有个地方会调用native方法,这个native方法是自定义的,最后就是个.so文件,给放到服务器上,然后,Java调用他,jvm启动的时候,会load一下这个自定义的lib,然后就可以调用这个native方法了,然而,对原来的方法进行重构之后,发现报了这个UnsatisfiedLinkError问题,经调查和实测,有如下结果。解决:将调用native方法的Java类的package,改成和so里文件头命名空间一样,也就是还改成重构之前的package,然后就能正常link了。原创 2023-01-05 15:19:13 · 5527 阅读 · 2 评论 -
idea com.intellij.junit4.JUnit4TestRunnerUtil$5 overrides final method getRunner.()Lorg/junit/runner
idea 报错:com.intellij.junit4.JUnit4TestRunnerUtil$5 overrides final method getRunner.()Lorg/junit/runner/Runner;问题的原因是:intellij idea的junit和org的junit不兼容。解决方案:换junit版本,在pom.xml中明确引入下面的依赖原创 2022-12-07 16:07:54 · 2756 阅读 · 0 评论 -
log4j2.xml 配置详解
使用log4j2打印log日志,然后,在jvm的启动参数中,在不同的启动脚本里面设置不同的log的目录地址,log的文件名称,log的级别。下面是一个简单的log4j2.xml的例子。log4j2.xml中的${sys:x.root.logger},相当于System.getProperty("x.root.logger");在启动脚本中指定log4j2的配置文件,指定日志级别,指定日志文件名称,指定日志目录。下面是从其他地方弄过来的一个很完整的、很细的一个例子。系统获取脚本中-D设置的key对应的值。原创 2022-09-23 16:26:59 · 13083 阅读 · 2 评论 -
timeZone为什么是Asia/Shanghai,而不是Asia/Beijing
所以目前还没有Asia/beijing。当年在分配时区(timeZone)的时候,还是在1949年之前,那时候,上海的洋人比较多,北京地位还不行呢。中国的时区为什么是Asia/Shanghai,而不是Asia/Beijing?喀什(Asia/Kashgar) 昆仑时区GMT+5:30。哈尔滨 ( Asia/Harbin) 长白时区GMT+8:30。重庆(Asia/Chongqing) 陇蜀时区GMT+7。乌鲁木齐(Asia/Urumqi) 新藏时区GMT+6。原创 2022-08-24 10:46:26 · 12404 阅读 · 0 评论 -
ZipException:invalid entry compressed size (expected 24709 but got 24714 bytes)
ZipException:invalid entry compressed size (expected 24709 but got 24714 bytes)改成:desJar.putNextEntry(new ZipEntry(entry.getName()));原来报错的方式是这么写的:desJar.putNextEntry(entry);在使用ZipEntry操作jar包的时候,出了异常。不要直接使用原来的对象,自己new个新的接着。...原创 2022-08-17 14:42:00 · 1488 阅读 · 0 评论 -
java 代码执行jar包的合并、解压、压缩的操作
java 代码执行jar包的合并、解压、压缩的操作,java 代码进行操,拆jar、解压jar,把n个jar给合并了。原创 2022-08-08 10:28:30 · 1188 阅读 · 0 评论 -
Java之CloneNotSupportedException
Java之CloneNotSupportedException某,个model类,没有实现Cloneable,但是在clone方法里面写了super.clone,Object 的 clone 方法,虽然都有,哎,但是,不让你super,除非,你实现接口。原创 2022-08-05 14:57:48 · 978 阅读 · 0 评论 -
java Linux命令合并多个jar包生成新jar
java 在Linux环境下使用命令合并多个jar包为一个。以及后面跟的参数的详细解释原创 2022-07-15 09:51:07 · 635 阅读 · 0 评论 -
ObjectIdentifier() -- data isn‘t an object ID (tag = 48)
java.io.IOException: ObjectIdentifier() -- data isn't an object ID (tag = 48)原创 2022-06-13 14:05:58 · 8770 阅读 · 0 评论 -
运行的线程忽然没了,但是没有任何异常日志打印.Throwable和Exception的区别需要了解一下
问题是这样的,弄了个类,实现runnable接口,然后,就刷刷刷的初始化了n个线程,然后通过ThreadPoolExecutor提交到线程池中运行,期望是这个run一直不停的执行,起初一切都很正常。然后就遇到了问题。分两个阶段。第一个阶段:初级阶段。线程的run方法在执行的,因为种种原因,出现了异常,然后,这个线程就直接GG了,导致当初提交的n个线程中出现异常的就没了,导致了问题,虽然出问题了,但是,起码还能在日志中看到错误信息,有迹可循,慢慢的排查问题,完善代码,尽量降低他异常的概率,接近于零吧。原创 2022-05-27 18:49:05 · 2302 阅读 · 0 评论 -
Java jdk 8 带 T的时间字符串的格式化问题
Java 8 带 T的时间字符串的格式化问题,比如给的字符串的时间是 "2021-10-01T04:37:34,703",给转成秒或者毫秒。原创 2022-01-13 16:44:17 · 2133 阅读 · 2 评论 -
Java 如何获取泛型T的T.class当参数
先说需求,本意是想在父类里面实现一些最基础的方法,然后子类只需要简单的继承,然后就可以有大部分方法可以使用了。我这儿实际就是一个crud的接口,然后给这个接口来个base实现,除非特殊需求,简单继承这个base实现就能实现model的crud。但是呢,find all方法内部需要一个使用另外一个方法,这个方法必须的传入T.class 当参数。看接口和他的base实现public interface CrudRepository<T> { Iterable<T> find原创 2021-10-29 15:22:15 · 3858 阅读 · 0 评论 -
java: You aren‘t using a compiler supported by lombok, so lombok will not work and has been disabled
本来项目运行好好的,但是不知道怎么回事儿,啥也没干,运行一个测试方法,死活就是运行不过。然后,就是lombook不管事儿了。也解释不了为什么,使用的是gradle工具来关联jar包的。compile 'org.projectlombok:lombok:1.18.20'不管我是reload 依赖,重新build项目,都不好使。然后就一直运行不成功。网上找了一圈,说是把版本降级,...原创 2021-10-22 13:46:46 · 1326 阅读 · 0 评论 -
Java8 LocalDateTime 转时间戳 秒、毫秒
时间转秒和毫秒 private static final ZoneId ZONE_ID = ZoneOffset.systemDefault(); /** * 8小时的秒数 */ private static final int OFFSET = 8 * 60 * 60; /** * LocalDateTime -> 秒 * * @param localDateTime localDateTime *原创 2021-09-29 15:50:16 · 14778 阅读 · 0 评论 -
String类为什么是final类型?
String类为什么是final类型?首先,先得清楚 final 这个关键字。final的出现就是为了为了不想改变,而不想改变的理由有两点:设计(安全)或者效率。final 修饰的类是不被能继承的,所以 final 修饰的类是不能被篡改的。了解了这一点,我们再看看问题:从设计安全上讲确保它们不会在子类中改变语义。String类是final类,这意味着不允许任何人定义String的子类。换言之,如果有一个String的引用,它引用的一定是一个String对象,而不可能是其他类的对象。Str原创 2021-05-14 14:42:24 · 4628 阅读 · 0 评论 -
Java signed unsigned long 无符号数和有符号数之间的转换测试
Java 中的long类型是64位,即64个二进制位在一起来表示一个数,但是64个bit位中,最顶上1个bit是标志位,用来表示正负数的,所以,他能表示的最大的正数,就是63个1,带上最高位是0,然而其他的平台是可以把64位全部用来表示数字的。没有把最高位当作标记位来用。怎么把这个无符号的数字变成Java能表示的long呢? @Test public void Max() { System.out.println(Long.MAX_VALUE); Syst原创 2021-04-28 14:25:58 · 3551 阅读 · 0 评论 -
Java hashmap一个简单的for循环,竟然都可以给写成死循环,真佩服写这代码的人。
本意是在循环hashmap的时候,根据条件,把符合条件的kv键值对给删除掉。下面是错误代码,哎,就这个代码,竟然能陷入死循环。我也佩服,竟然能出现死循环,不得不佩服,道路千万条,代码不规范,错误就奇葩的一匹。原创 2021-04-23 10:02:44 · 697 阅读 · 0 评论 -
java 8 集合方法 list 和 map 的 removeIf()的示例
作用:删除集合中符合条件的成员,empty集合也可以,但是null就炸啦。直接看代码和运行结果 /** * 删除集合中符合条件的成员,empty集合也可以,但是null就炸啦。 */ private static void removeIfTest() { List list = Lists.newArrayList("1","12","13","原创 2018-01-24 19:44:26 · 27042 阅读 · 4 评论 -
Java代码实现计算2个日期时间相差几年几月几天,用的jdk1.8
用Java代码计算2个时间之间相差了几年几个月几天,返回结果是字符串的形式。下面是实现代码,测试代码,测试结果截图,代码分享链接。原创 2021-04-13 14:26:36 · 2562 阅读 · 2 评论 -
Java 中的伪共享详解
1. 什么是伪共享CPU 缓存系统中是以缓存行(cache line)为单位存储的。目前主流的 CPU Cache 的 Cache Line 大小都是 64 Bytes。在多线程情况下,如果需要修改“共享同一个缓存行的变量”,就会无意中影响彼此的性能,这就是伪共享(False Sharing)。2. 缓存行由于共享变量在 CPU 缓存中的存储是以缓存行为单位,一个缓存行可以存储多个变量(存满当前缓存行的字节数);而CPU对缓存的修改又是以缓存行为最小单位的,那么就会出现上诉的伪共享问题。Ca转载 2021-04-01 14:35:28 · 318 阅读 · 1 评论 -
IntelliJ IDEA mac系统 jprofiler 插件安装
首先要使用这个 jprofiler 工具,他是分客户端和服务端的。以前不知道,以为这东西就像一个应用程序一样,安装了,就能使用了。实际上不是的,假如我们要在本地调试我们自己的代码,那就的安装服务端和客户端。客户端很好说,一般你安装的都是客户端,就像我们安装了mysql数据库客户端一样,这个安装了,你要使用他,就必须得有个mysql数据库让你链接才行。所以,这个jprofiler也是需要个服务端让你...原创 2019-04-09 16:48:02 · 5391 阅读 · 0 评论 -
集群、分布式、微服务、区别
集群、分布式、微服务、区别单机结构 一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上就好了。整个项目所有的服务都由这台服务器提供。这就是单机结构。 那么,单机结构有啥缺点呢?单机的处理能力毕竟是有限的,当你的业务增长到一定程度的时候,单机的硬件资源将无法满足你的业务需求。此时便出现了集群模式。集群结构 单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一个“集群”。集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提原创 2021-02-08 17:48:21 · 368 阅读 · 3 评论 -
sm2 sm3 sm4 加密解密 Java实现
SM4.0(原名SMS4.0)是中华人民共和国政府采用的一种分组密码标准,由国家密码管理局于2012年3月21日发布。相关标准为“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。Java实例代码,参见下面的github连接,下载下来,引入jar包,直接run可以的。国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位使用的依赖 // https://mvnrepository.com/artifact原创 2020-09-04 17:20:06 · 8012 阅读 · 1 评论 -
treemap 和 hashmap的效率比较
区别:1,hashmap是无序的,treemap是有序的,整个key是按照自然顺序来的。2,hashmap可以put一个null当key ,treemap却不支持。3,底层结构不一样,一个是数组➕红黑树,一个直接就是红黑树。但是hashmap是最最最常用的map集合,不考虑顺序的时候,他是首选,假如你希望有点顺序的话,想使用一下treemap,但是整个treemap和整个hashmap的效率到底差别多少,不太确定,万一整个treemap效率很低,那就影响程序性能了,那就不好了。测试一下,有个底。简单原创 2020-09-02 16:39:56 · 3521 阅读 · 0 评论 -
fastjson com.alibaba.fastjson.JSONException: unclosed string : 十
使用fastjson在转换的时候,com.alibaba.fastjson.JSONException: unclosed string : 十 at com.alibaba.fastjson.parser.JSONLexerBase.scanString(JSONLexerBase.java:1001) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:485) ...原创 2020-08-20 14:12:45 · 16839 阅读 · 0 评论 -
Java 解析xml 使用SAXReader获取所有标签的key和value的代码实例
Java中使用SAXReader获取xml信息中所有标签的key和value,若是有二级或者继续嵌套,也可以递归获取的代码实例。原创 2020-07-26 17:52:44 · 3002 阅读 · 0 评论 -
Runtime.getRuntime().addShutdownHook()
解决 the application appears to have started a thread ... but failed to stop it,this is very likely to create a memory leak.这个警告RunTime.getRunTime().addShutdownHook的作用就是在JVM销毁前执行的一个线程.当然这个线程依然要自己写.有时候我们用到的程序不一定总是在JVM里面驻守,可能调用完就不用了,释放资源.利用这个性质,如果我们之前定义.原创 2020-07-16 13:51:17 · 1209 阅读 · 0 评论 -
{@link}与@see的简单使用以及区别--如何写好Java代码注释。
写代码的时候,有时候,你需要写一些注释,把内容相互关联起来,方便自己或别人看的时候,可以直接找到你关联的代码类或者啥的。这个时候,{@link}与@see,这2个javadoc注解就派上用场了,不管他具体有什么功能,咱就只管一个,他可以链接代码,让注释看的更清楚易懂。方便你我他。@see 标签允许用户引用其他类的文档。具体使用方式如下:@see classname@see原创 2017-03-01 19:58:24 · 88442 阅读 · 23 评论 -
Java IPv6 转 long 数组的实现
IP6是128位的长度,一个long是64位的长度,2个long正好够一个IP6的长度位数。代码如下: /** * 将 IPv6 地址转为 long 数组,只支持冒分十六进制表示法 */ public static long[] ip2Longs(String ipString) { if (ipString == null || ipS...原创 2020-03-26 10:07:56 · 1113 阅读 · 0 评论 -
Java http get 请求传 cookie 值的访问接口
一般get请求传参数,都是URL后面直接?key=value&key2=value2 。。。。使用 org.apache.http.impl.client.HttpClients 这么滴就可以实现get请求传递参数啦但是现在需求是要往请求的header里面传cookie。怎么Java代码实现?关键代码 CloseableHttpClient httpCl...原创 2019-12-18 13:44:31 · 3126 阅读 · 0 评论 -
fatal error 文档中根元素后面的标记必须格式正确
在打包的时候,出了下面的问题,查了一下,说是xml文件中的标签不对应。。怎么处理呢,找到报错的文件,然后拿出来,看看他的html标签是不是一一对应的。可以看到,果然是这个标签乱了。...原创 2019-11-25 11:16:28 · 4201 阅读 · 0 评论 -
Lombok 的@Builder 注解在使用的,会覆盖model自己的无参数构造函数,导致一些bug。
Lombok 的@Builder 注解在使用的,会覆盖model自己的无参数构造函数,导致一些bug。比如Spring项目,在controller里面解析前端传递的数据为对应Java bean model对象的时候,这个无参数构造函数是很重要的。这个时候,假如你不小心,在对应的model里面使用了@Builder注解,那么,他的无参数构造函数就没了。导致,在解析数据的时候,Spring...原创 2019-11-19 17:48:25 · 3322 阅读 · 0 评论 -
java之克隆一个对象(此对象包含list引用)-clone()
在java克隆的时候,所要克隆的对象包含比较复杂的数据结构如:list集合等一些复杂的引用的时候,该怎么克隆。深克隆,浅克隆的实现和理解。原创 2015-11-09 16:09:15 · 10611 阅读 · 3 评论 -
HTML关于post和get的区别以及缓存问题的理解
get和post区别以及缓存问题的理解原创 2016-01-07 22:01:49 · 10324 阅读 · 0 评论 -
Java中的内部类和匿名类-----(java复习)
内部类的定义是:定义在另一个类内部的类。 存在它的原因是: 1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。即内部类实例对包含它的哪个类的实例来说,是特权的。 2.对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如何,那怕是public,除了包容类,其他类都无法使用它。 3.匿名内部类可以很方便的定义回调。 4.使用内部类转载 2016-03-24 16:17:30 · 2012 阅读 · 0 评论 -
java测试代码段执行时间
因为遇到效率问题,要看看具体是哪段代码在浪费时间,所有需要下面的2句代码。long a=System.currentTimeMillis();//这里放需要测试执行时间的代码段。System.out.println("\r 执行耗时 : "+(System.currentTimeMillis()-a)/1000f+" 秒 ");然后就可以在打log的地方看到对应执行时间原创 2016-04-20 15:23:00 · 7019 阅读 · 0 评论 -
JAVA中重写equals()方法的同时要重写hashcode()方法
object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true;注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。如下:(1)当obj1.equals(obj2)为true时,obj转载 2016-06-01 15:17:28 · 2875 阅读 · 0 评论 -
建立一个对象模型的时候,为什么要重写hashCode与equals方法
为了阐明其作用,我们先来假设有如下一个Person类。class Person { public Person(String name, int age) { this.name = name; this.age = age; } private String name; private int age; public转载 2016-06-01 15:30:31 · 3146 阅读 · 0 评论 -
Java:重写equals()和hashCode()
以下内容总结自《Effective Java》。1.何时需要重写equals()当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。2.设计equals()[1]使用instanceof操作符检查“实参是否为正确的类型”。[2]对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值。[2.1]对于非float和double类型的原语类型域,使用==比较;转载 2016-06-01 15:14:28 · 3675 阅读 · 0 评论 -
遍历Map的四种方法
重点是注意理解这里的对应类型key和value的对应类型要根据自己的写然后推荐使用第三种,效率高,而且,key和value都可以得到。想用就用,不用不管就行。Map.Entry天天遍历的都是list,遇到个map,我竟然不知道怎么遍历了。哎。不要笑话。public static void main(String[] args) { Map ma转载 2016-06-30 16:29:03 · 3068 阅读 · 0 评论