![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 67
喜欢安静的程序猿
爱学习
展开
-
什么是serialVersionUID,为什么要使用它?
序列化运行时与每个可序列化的类关联一个版本号,称为serialVersionUID,在反序列化期间使用该版本号来验证序列化对象的发送者和接收者是否已加载了该对象的与序列化兼容的类。如果接收者为该对象加载的类serialVersionUID与相应的发送者的类不同,则反序列化将导致InvalidClassException。一个可序列化的类可以serialVersionUID通过声明一个serialVersionUID必须为static,final和type的字段来显式声明其自身long:ANY-..原创 2021-05-10 16:21:33 · 525 阅读 · 0 评论 -
如何在Java中生成特定范围内的随机整数?
如何生成int特定范围内的随机值?我已经尝试了以下方法,但是这些方法不起作用:尝试1:randomNum = minimum + (int)(Math.random() * maximum);错误:randomNum可以大于maximum。尝试2:Random rn = new Random();int n = maximum - minimum + 1;int i = rn.nextInt() % n;randomNum = minimum + i;错误:ran原创 2021-04-26 14:35:03 · 972 阅读 · 0 评论 -
为什么Java的+ =,-=,* =,/ =复合赋值运算符不需要强制转换?
直到今天,我还以为例如:i += j;只是以下方面的捷径:i = i + j;但是,如果我们尝试这样做:int i = 5;long j = 8;然后i = i + j;将不会编译,但i += j;会编译良好。这是否意味着实际上i += j;是类似这样的捷径i = (type of i) (i + j)?解决方案:与这些问题一样,JLS保留了答案。在这种情况下,第1.5.26.2节“复合赋值运算符”。摘录:形式的复合赋值表达式E1op=E2...原创 2021-04-20 10:29:58 · 116 阅读 · 0 评论 -
从数组创建ArrayList
我有一个像这样初始化的数组:Element[] array = {new Element(1), new Element(2), new Element(3)};我想将此数组转换为ArrayList类的对象。ArrayList<Element> arraylist = ???;解决方案:new ArrayList<>(Arrays.asList(array));本文首发于java黑洞网,csdn同步更新...原创 2021-04-16 15:23:00 · 682 阅读 · 0 评论 -
在Java中避免NullPointerException
我object != null要避免很多NullPointerException。有什么替代方法:if (someobject != null) { someobject.doCalc();}解决方案:在我看来,这似乎是一个相当普遍的问题,初级和中级开发人员往往会在某个时候遇到这些问题:他们要么不知道,要么不信任他们所参与的合同,并且防御性地检查了null。另外,在编写自己的代码时,他们倾向于依靠返回空值来表示某些内容,因此要求调用者检查空值。换句话说,在两种情况下会.原创 2021-04-14 14:33:51 · 198 阅读 · 0 评论 -
如何在Java中将InputStream读取/转换为String?
如果有一个java.io.InputStream对象,应该如何处理该对象并产生一个String?假设我有一个InputStream包含文本数据的文件,并且想将其转换String为,例如,我可以将其写入日志文件。InputStream将并将其转换为的最简单方法是String什么?public String convertStreamToString(InputStream is) { // ???}做到这一点的一种好方法是使用Apache commonsIOUtils将ap.原创 2021-04-13 16:34:12 · 500 阅读 · 0 评论 -
Java是“按引用传递”还是“按值传递”?
我一直认为Java使用传递引用。但是,我看过几篇博客文章,声称不是(博客文章中说Java使用值传递)。我不认为我能理解他们的区别。有什么解释?解决方案Java总是按值传递。不幸的是,我们根本不处理任何对象,而是处理称为引用(当然是通过值传递)的对象句柄。选择的术语和语义很容易使许多初学者感到困惑。它是这样的:public static void main(String[] args) { Dog aDog = new Dog("Max"); Dog ol..原创 2021-04-12 14:07:09 · 60 阅读 · 0 评论 -
类成员变量的初始化
1-1类成员变量初始化的分类类成员变量的初始化可简单分为两类:非静态成员变量的初始化(以下简称“普通初始化”)和静态成员变量的初始化(“静态初始化”)。1-2与初始化相关的规律构造函数实际上也是静态方法; 首次创建类对象、访问类的静态成员(变量或方法)会引发类加载; 类加载时会触发静态初始化; 普通初始化会在任何非静态方法(但包括构造函数)被调用前完成; 静态初始化会在任何方法被调用前完成; 总结4、5点有:调用除构造函数外静态方法只会引发静态初始化,而不会引发普通初始化。...原创 2021-04-06 15:46:02 · 2657 阅读 · 0 评论 -
Jdk动态代理 底层源码分析
前言java动态代理主要有2种,Jdk动态代理、Cglib动态代理,本文主要讲解Jdk动态代理的使用、运行机制、以及源码分析。当spring没有手动开启Cglib动态代理,即:<aop:aspectj-autoproxy proxy-target-class="true"/>或@EnableAspectJAutoProxy(proxyTargetClass = true),默认使用的就是Jdk动态代理。动态代理的应用范围很广,例如:日志、事务管理、缓存等。本文将模拟@Cacheable,即缓原创 2021-03-29 19:43:50 · 190 阅读 · 0 评论 -
Java多线程
1. 线程概述1.1 线程和进程进程是处于运行过程中的程序,并且具有一定的独立功能 并发性:同一个时刻只能有一条指令执行,但多个进程指令被快速轮换执行 并行:多条指令在多个处理器上同时执行 线程是进程的执行单元1.2 多线程的优势进程之间不能共享内存,但线程之间非常容易 系统创建进程时需要为该进程重新分配系统资源,但创建线程则代价小得多,因此使用多线程效率更高 Java语言内置了多线程功能2. 线程创建与启动2.1 继承Threadpublic class Firs.原创 2021-03-24 13:35:54 · 65 阅读 · 0 评论 -
JDK8新特性之Lambda表达式和四大函数接口
在Java8中,加入了Lambda(Lambda expression),在使用它以前我们先聊聊为什么要加入Lamdba,使用它对于编程上有什么好处一、Lamdba的作用1.在我们需要把一些功能传递给某些方法时,在 Java 8 以前,我们就需要去写匿名内部类。引入lambda表达式后,你可以在一个类中简便的定义参数和方法,替代大部分匿名内部类和功能接口,使得代码更加优雅,Lambda提供了一个参数列表和只用这些参数的功能体,也被称为闭包。二、使用Lambda表达式要知道的规范1.一个La.原创 2021-03-09 16:56:25 · 93 阅读 · 0 评论 -
七种方案!探讨Redis分布式锁的正确使用姿势
最近也收到很多后端同学的提问,为什么Go的web框架速度还不如Java?为什么许多原本的 Java 项目都试图用 go 进行重写开源?Java会不会因为容器的兴起而没落?Java这个20多年的后端常青树难道真的要走下坡路了?橙子邀请了淘系技术部的同学对以上问题进行解答,也欢迎大家一起交流。Q:为什么Go的web框架速度还不如Java?**风弈:**华山论剑,让我们索性把各框架的性能分析跑一下再说话。各种框架的应用场景不同导致其优化侧重点不同,下面我们展开详细分析。http server 概述原创 2021-03-08 12:53:24 · 198 阅读 · 0 评论 -
Java并发——Java与多线程
并发处理的广泛应用是Amdahl定律代替摩尔定律成为计算机性能发展源动力的根本原因,也是人 类压榨计算机运算能力的最有力武器。 主流的操作系统都提供了线程实现,Java语言则提供了在不同硬件和操作系统平台下对线程操作的统一处理,每个已经调用过start()方法且还未结束的java.lang.Thread类的实例就代表着一个线程。Thread类与大部分的Java类库API有着显著差别,它的所有关键方法都被声明为Native。在 Java类库API中,一个Native方法往往就意味着这个方法没有使...原创 2021-03-07 22:15:14 · 160 阅读 · 0 评论 -
别再这么写代码了,这几个方法不香吗?
JDK8 应该是 Java 中最坚挺一个版本,这个版本新增很多特性,让我们开发起来多了很多便利。不过最近 Review 项目代码的时候发现,虽然很多项目工程已经使用了 JDK8,但是工程代码却很少使用到 JDK8 新特性、新方法。如果单从代码正确性上来说,老方式写法写当然没有什么问题,那唯一的缺点其实就是代码行数比较多,比较繁琐。那同样的需求,使用 JDK8 新方法,其实几行代码就可以搞定,这样代码就会变得非常简洁。今天就以三个比较常见的场景为例,教你几招,使用 JDK8Map新增的方法简.原创 2021-03-05 12:50:35 · 102 阅读 · 0 评论