
java新特性
文章平均质量分 92
java基础和新特性
flydean程序那些事
懂程序更懂你!微信公众号:程序那些事 个人主页:www.flydean.com 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在程序那些事!
展开
-
JDK的第三个LTS版本JDK17来了
文章目录简介JDK17中的新特性语言上的新特性核心库的优化支持新的平台预览特性其他改动总结简介2021年9月JDK17发布了,JDK17是最新的一个LTS版本。所谓LTS版本就是可以得到至少八年产品支持的版本。从2014年的JDK8,到2018年的JDK11,再到2021年的JDK17。同时Oracle也调整了LTS版本的发布年限,从之前的三年调整到现在的二年,也就是说下一个LTS版本将会是JDK21,哇喔!那么如果不是LTS版本呢? 非LTS版本只会得到六个月的产品支持。所以大家还是使用LTS版本原创 2021-11-15 13:50:29 · 4559 阅读 · 0 评论 -
JDK16的新特性
文章目录简介JDK16的新特性语言方面的提升内存管理方面的提升Unix-Domain Socket ChannelWarning For Value-based Classes封装内部的JDK包C++ 14语言特性预览语言新特性总结简介在2021年3月16日,JDK的迎来了它的一个新版本JDK16,虽然JDK16不是LTS版本,但是作为下一个LTS版本JDK17的先行版本,JDK16为我们带来了17个方面的提升,包括了新的语言特性、新的工具、内存管理的提升等方面。所以一起来看看,JDK16到底为我们提原创 2021-11-11 15:05:07 · 3241 阅读 · 2 评论 -
JDK8中的新时间API:Duration Period和ChronoUnit介绍
在JDK8中,引入了三个非常有用的时间相关的API:Duration,Period和ChronoUnit。他们都是用来对时间进行统计的,本文将会详细讲解一下这三个API的使用。原创 2020-11-05 10:24:03 · 19141 阅读 · 3 评论 -
JDK15真的来了,一起来看看它的新特性
一年两次的JDK最新版本JDK15在2020年9月15日正式发布了,这次的JDK15给我们带了隐藏类,EdDSA,模式匹配,Records,封闭类和Text Block等诸多新特性。原创 2020-09-16 21:30:07 · 21125 阅读 · 19 评论 -
如果你想写自己的Benchmark框架
使用过JMH的同学一定会惊叹它的神奇。JMH作为一个优秀的Benchmark框架带给了我们无数的欢乐。作为一个有极客精神的程序员,那么有没有想过去自己实现一个Benchmark框架呢?在实现Benchmark框架的时候有需要注意些什么问题呢?快来一起看看吧。原创 2020-07-11 11:03:13 · 12456 阅读 · 5 评论 -
你不知道的java对象序列化的秘密
你知道序列化可以使用代理吗?你知道序列化的安全性吗?每个java程序员都听说过序列化,要存储对象需要序列化,要在网络上传输对象要序列化,看起来很简单的序列化其实里面还隐藏着很多小秘密,今天本文将会为大家一一揭秘。原创 2020-06-03 06:16:00 · 13955 阅读 · 6 评论 -
ABA问题的本质及其解决办法
CAS的全称是compare and swap,它是java同步类的基础,java.util.concurrent中的同步类基本上都是使用CAS来实现其原子性的。CAS的原理其实很简单,为了保证在多线程环境下我们的更新是符合预期的,或者说一个线程在更新某个对象的时候,没有其他的线程对该对象进行修改。在线程更新某个对象(或值)之前,先保存更新前的值,然后在实际更新的时候传入之前保存的值,进行比较,如果一致的话就进行更新,否则失败。原创 2020-06-01 07:00:17 · 8568 阅读 · 5 评论 -
Java中的类型推断和lambda表达式
java是强类型的编程语言,每个java中使用到的变量都需要定义它的类型,否则会编译失败。强类型语言的好处就是可以尽可能的在编译期间就发现代码中可能出现的问题,从而减少在运行时出现问题的可能性。相对的,强类型语言的缺点就是不那么的灵活多变,写起来比较冗余。JDK8之前,java是不支持类型推断的,在JDK8中,引入了lambda表达式,从此类型推断产生了。本文将会讲解类型推断在lambda表达式中的最佳实践和在使用中应该注意的事项。原创 2020-05-26 06:49:39 · 8291 阅读 · 5 评论 -
Lambda表达式和闭包Closure
我们通常讲到闭包,一般都是指在javascript的环境中。闭包是JS中一个非常重要的也非常常用的概念。闭包产生的原因就是变量的作用域范围不同。一般来说函数内部的定义的变量只有函数内部可见。如果我们想要在函数外部操作这个变量就需要用到闭包了。原创 2020-05-25 06:28:07 · 9040 阅读 · 7 评论 -
小师妹学JavaIO之:文件编码和字符集Unicode
小师妹一时兴起,使用了一项从来都没用过的新技能,没想却出现了一个无法解决的问题。把大象装进冰箱到底有几步?乱码的问题又是怎么解决的?快来跟F师兄一起看看吧。原创 2020-05-24 06:57:17 · 8207 阅读 · 3 评论 -
标记接口,注解和注解处理器的前世今生
相信大部分的开发者都用过注解,尤其是对使用过Spring的开发者来说,注解是现代Spring中不可获取的一部分。Spring从最开始的xml配置到后面的注解配置,不论是从编程习惯还是项目的构建,都对我们程序员产生了非常重要的影响。 除了使用Spring自带的注解之外,我们还可以自定义注解。然后通过AOP来对注解进行拦截从而处理相应的业务逻辑。除了Spring之外,其实JDK本身自带注解,本文将会深入探讨注解的起源和两种不同的使用方式。原创 2020-05-24 06:45:13 · 8398 阅读 · 6 评论 -
JDK9的新特性:JVM的xlog
在java程序中,我们通过日志来定位和发现项目中可能出现的问题。在现代java项目中,我们使用log4j或者slf4j,Logback等日志记录框架来处理日志问题。JVM是java程序运行的基础,JVM中各种事件比如:GC,class loading,JPMS,heap,thread等等其实都可以有日志来记录。通过这些日志,我们可以监控JVM中的事件,并可以依次来对java应用程序进行调优。在JDK9中引入的Xlog日志服务就是为这个目的而创建的。通过xlog,JDK将JVM中的各种事件统一起来原创 2020-05-23 07:01:12 · 8734 阅读 · 5 评论 -
JDK9的新特性:JPMS模块化
JDK9引入了一个新的特性叫做JPMS(Java Platform Module System),也可以叫做Project Jigsaw。模块化的本质就是将一个大型的项目拆分成为一个一个的模块,每个模块都是独立的单元,并且不同的模块之间可以互相引用和调用。在module中会有元数据来描述该模块的信息和该模块与其他模块之间的关系。这些模块组合起来,构成了最后的运行程序。听起来是不是和gradle或者maven中的模块很像?通过组件化,我们可以根据功能来区分具体的模块,从而保持模块内的高聚合,模块之原创 2020-05-22 06:50:41 · 8928 阅读 · 3 评论 -
JDK9的新特性:String压缩和字符编码
文章目录简介底层实现总结简介String的底层存储是什么?相信大部分人都会说是数组。如果要是再问一句,那么是以什么数组来存储呢?相信不同的人有不同的答案。在JDK9之前,String的底层存储结构是char[],一个char需要占用两个字节的存储单位。据说是JDK的开发人员经过调研了成千上万的应用程序的heap dump信息,然后得出了一个结论:大部分的String都是以Latin-1字符编码来表示的,只需要一个字节存储就够了,两个字节完全是浪费。据说他们用了大数据+人工智能,得出的结论由不得我们原创 2020-05-21 06:33:49 · 9106 阅读 · 2 评论 -
JDK10的新特性:var和匿名类
文章目录简介匿名类中自定义变量lambda表达式中的匿名类总结简介匿名类相信大家都用过了,学过JDK8中的lambda表达式之后,可以发现有些匿名类是可以用lambda表达式来替代的,能够被替代的类叫做funcational interface。具体的有关lambda表达式和匿名类的介绍,大家可以查阅我之前写的文章。这里就不多讲了。本文主要介绍var和匿名类之间的一些平时没有注意到的问题。更多内容请访问www.flydean.com匿名类中自定义变量我们看一个经常使用的Runnable匿名原创 2020-05-19 06:50:09 · 8947 阅读 · 4 评论 -
JDK10的新特性:var泛型和多个接口实现
文章目录简介实现多个接口使用多个接口使用var总结简介在JDK10的新特性:本地变量类型var中我们讲到了为什么使用var和怎么使用var。今天我们来深入的考虑一下var和泛型,多个接口实现的问题。实现多个接口在JDK的实现和我们日常的工作中,很多时候都需要实现多个接口,我们举常用的两个例子ArrayList和CopyOnWriteArrayList。先看下他们的定义:public class ArrayList<E> extends AbstractList<E>原创 2020-05-18 06:50:36 · 8968 阅读 · 2 评论 -
JDK10的新特性:本地变量类型var
java以面向对象的特性显著于世并得到了蓬勃的发展。在语言的发展过程中,为了让java语言更加简洁和方便使用,JDK也在不断的进行改进。今天本文将要介绍一下JDK10中引入的本地变量类型var。为什么我们需要var类型推断是很多编程语言都具有的特性,编译器可以在我们不指定具体变量类型的情况下推断出该变量的实际类型。类型推断的出现,可以让程序员的代码更加灵活,利于维护和编写。其实我们一直都有使用到类型推断。原创 2020-05-17 07:27:02 · 8811 阅读 · 2 评论 -
什么?注释里面的代码居然能够执行
注释大家都写过,应该都懂。注释就是给人看的,不是给机器看的,自然也就无法执行。但是今天就有一个例外,快让我们看一下吧。如果是下面一段代码,大家期望的输出是什么?public class escapesUsage { public static void main(String[] args) { // \u000d System.out.println("www.flydean.com"); }}main方法中的System.out.println被注释掉了。我原创 2020-05-16 07:52:42 · 9684 阅读 · 13 评论 -
JDK11的新特性:新的HTTP API
JDK11之前,java的HTTP功能很弱,只提供了HttpURLConnection来进行HTTP连接,并且使用起来非常复杂。所以一般大家都是用第三方的HTTP client(Apache HttpComponents 或者 OkHttp)来进行HTTP请求。一切在JDK11的时候完全变了,在java.net.http包,最新的HttpClient, HttpRequest 和 HttpResponse完全可以满足你的需求。原创 2020-05-14 06:42:45 · 9865 阅读 · 2 评论 -
JDK12的新特性:CompactNumberFormat
JDK12引入了新的格式化数字的类叫做CompactNumberFormat。主要方便我们对很长的数字进行简写。比如1000可以简写为1K或者1 thousand。本文将会讲解CompactNumberFormat的基本构成和使用方法,最后在实际的例子中结束文章的讲解。原创 2020-05-13 07:02:31 · 8871 阅读 · 1 评论 -
JDK12的新特性:teeing collectors
文章目录简介talk is cheap, show me the codeTeeing方法深度剖析Characteristics总结JDK12的新特性:teeing collectors简介JDK12为java.util.stream.Collectors添加了一个新的teeing方法,怎么翻译呢?看到很多人都把它翻译成“发球台”,我不禁潸然泪下,哪里有那么复杂,tee就是T。它的作用就像是一个T型,数据从两头进入,然后从一头流出。teeing的作用也就在此。更多内容请访问www.flydean.原创 2020-05-13 06:54:49 · 22784 阅读 · 1 评论 -
JDK14的新特性:JFR,JMC和JFR事件流
Java Flight Recorder(JFR)是JVM的诊断和性能分析工具。它可以收集有关JVM以及在其上运行的Java应用程序的数据。JFR是集成到JVM中的,所以JFR对JVM的性能影响非常小,我们可以放心的使用它。一般来说,在使用默认配置的时候,性能影响要小于1%。JFR的历史很久远了。早在Oracle2008年收购BEA的时候就有了。JFR一般和JMC(Java Mission Control)协同工作。JFR是一个基于事件的低开销的分析引擎,具有高性能的后端,可以以二进制格式编写事原创 2020-05-12 06:58:39 · 9120 阅读 · 1 评论 -
java深入理解浅拷贝和深拷贝
拷贝对象是java中经常会遇到的问题。java中存在两种类型,基础类型和引用类型。java的赋值都是传值的,对于基础类型来说,会拷贝具体的内容,但是对于引用对象来说,存储的这个值只是指向实际对象的地址,拷贝也只会拷贝引用地址。因为引用对象的存在,所以经常会出现和预期不一样的情况。本文将会深入的探讨一下在拷贝对象中会出现的浅拷贝和深拷贝的情况原创 2020-05-11 06:46:53 · 8328 阅读 · 1 评论 -
jcmd:JDK14中的调试神器
jcmd是JDK自带的调试工具,具有非常强大的功能。jcmd是JDK7中正式引入的,有了jcmd,完全可以替换很多常用的其他工具,比如jstak和jmap。jcmd可以将具体的诊断命令发送给JVM。为了安全起见,使用jcmd的用户必须跟运行的java程序具有同样的用户和用户组。jcmd的调试命令有很多种,每一种调试命令又有自己的参数。本文将会结合具体的例子详细讲解jcmd的使用。原创 2020-05-11 06:39:08 · 10974 阅读 · 5 评论 -
你真的了解java class name吗?
在面向对象的世界,Class是java的基础。java.lang.Class实际上是继承自java.lang.Object。class有一个方法叫做getName,该方法会返回(class, interface, array class, primitive type,或者 void)的Class名字。如果你经常调试JVM的话,会看到下面这样奇怪的内容:jcmd 1234 GC.class_histogram这些奇怪的内容都是class name,下面我们就来看看他们都表示什么含义。class原创 2020-05-10 06:45:01 · 9252 阅读 · 1 评论 -
JDK14中的java tools简介
在还没有IDE的时代,高手们还是通过记事本来编程。那时候能够写程序的都是牛人。能把程序写得好的更是牛人中的牛人。秃头大叔的程序员形象就是在那个时候建立起来的。还记得十几年前的那一个春天,微风不动,太阳都羞红了脸。因为那时候的我还在一个javac,一个java的编译,运行着java程序。虽然效率低下,但是看着我跑起来的一个又一个hello world,心里充满了欢喜。惊喜过后便是失落,java实在太难用了太复杂了,我还是回去写C语言吧。原创 2020-05-10 06:30:55 · 9403 阅读 · 1 评论 -
JDK 14的新特性:switch表达式
文章目录简介写在前面连写caseswitch返回值yield总结简介switch的新特性可是源远流长,早在JDK 12就以预览功能被引入了,最终在JDK 14成为了正式版本的功能:JEP 361: Switch Expressions (Standard)。其实Switch新增的功能有两个,一个就是可以连写case,一个就是switch可以带返回值了。写在前面就在我兴致勃勃的想要创建一个以switch命名的package的时候,突然间发现在IDEA中居然创建不java类了。经过我的再三尝试,反复原创 2020-05-09 06:31:10 · 9454 阅读 · 1 评论 -
JDK 14的新特性:文本块Text Blocks
文章目录举个例子Indentation编排Escaping转义formatted格式化总结说起来,Text Blocks是在JDK13中以第一次预览版本引入的。现在在JDK14中是第二次预览版本 JEP 368: Text Blocks。在我们日常的工作中,有时候需要用到一大段的字符串,这些字符串需要换行,需要排版,需要转义。在一个文本编辑器中,这当然是非常容易的事情。但是在java代码中,就是一个噩梦了。虽然IDE可以自动帮我们加上换行甚至可以对字符串进行拼接。但在java程序眼中,添加的诸多额外的原创 2020-05-09 06:25:23 · 10489 阅读 · 1 评论 -
java中的内部类内部接口详解
文章目录简介内部类静态内部类非静态内部类静态方法内部类非静态方法的内部类匿名类内部接口总结简介一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因,java并不介意在一个文件中写多个类和多个接口,这就有了我们今天要讲的内部类和内部接口。内部类先讲内部类,内部类就是在类中定义的类。类中的类可以看做是类的一个属性,一个属性可以是static也...原创 2020-05-08 06:24:42 · 10604 阅读 · 5 评论 -
一文弄懂String的所有小秘密
文章目录简介String是不可变的传值还是传引用substring() 导致的内存泄露总结一文弄懂String的所有小秘密简介String是java中非常常用的一个对象类型。可以说java中使用最多的就是String了。那么String到底有哪些秘密呢?接下来本文将会一一讲解。String是不可变的String是不可变的,官方的说法叫做immutable或者constant。Strin...原创 2020-05-08 06:25:35 · 9150 阅读 · 2 评论 -
深入理解java的泛型
文章目录简介泛型和协变泛型在使用中会遇到的问题类型擦除要注意的事项总结深入理解java的泛型简介泛型是JDK 5引入的概念,泛型的引入主要是为了保证java中类型的安全性,有点像C++中的模板。但是Java为了保证向下兼容性,它的泛型全部都是在编译期间实现的。编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种就叫做类型擦除。编译器在编译的过程中执行类型检查来保证类型安全,但是...原创 2020-05-07 07:31:51 · 9295 阅读 · 2 评论 -
java中的类型擦除type erasure
文章目录简介举个例子原因解决办法总结java中的类型擦除type erasure简介泛型是java从JDK 5开始引入的新特性,泛型的引入可以让我们在代码编译的时候就强制检查传入的类型,从而提升了程序的健壮度。泛型可以用在类和接口上,在集合类中非常常见。本文将会讲解泛型导致的类型擦除。举个例子我们先举一个最简单的例子:@Slf4jpublic class TypeErase {...原创 2020-05-07 07:11:56 · 8812 阅读 · 1 评论 -
一文读懂java中的Reference和引用类型
java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型。java为引用类型专门定义了一个类叫做Reference。Reference是跟java垃圾回收机制息息相关的类,通过探讨Reference的实现可以更加深入的理解java的垃圾回收是怎么工作的。本文先从java中的四种引用类型开始,一步一步揭开Reference的面纱。java中的四种引用类型分别是:强引用,软引用,弱引用和虚引用原创 2020-05-04 07:03:51 · 11112 阅读 · 1 评论 -
JDK14的新特性:Lombok的终结者record
文章目录简介新的Record类型探讨Record的秘密record扩展总结JDK 14的新特性:Lombok的终结者record简介自从面向对象产生之后,程序界就开始了新的变化,先是C发展到了C++,后面java横空出世,大有一统江湖的趋势。面向对象凭借其结构化的特点和在大型项目中的优势,一路蓬勃发展到今。面向对象不是不好,但是太繁琐。比如我们要定义一个简单的存储数据的结构,比如说Use...原创 2020-04-30 06:48:56 · 10355 阅读 · 1 评论 -
JDK 14的新特性:更加好用的NullPointerExceptions
JDK 14的新特性:更加好用的NullPointerExceptions让99%的java程序员都头痛的异常就是NullPointerExceptions了。NullPointerExceptions简称NPE,它是运行时异常的一种,也是java程序中最最容易出现的异常。出现了NullPointerExceptions之后我们怎么处理呢?一般情况下就是看日志,看一下到底哪一行出错了。如果这...原创 2020-04-28 07:33:26 · 9779 阅读 · 0 评论 -
JDK 14的新特性:instanceof模式匹配
JDK14在2020年的3月正式发布了。可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks仍然是预览特性。本文要讲的就是JDK14的一个预览特性instanceof的pattern matching。 也就是说在instanceof中可以使用模式匹配了。怎么理解呢?我们先举个历史版本中使用instanceof的例子。假如我们是动物园的管理员,动物园里面有Girraffe和Hippo两种动物原创 2020-04-27 07:36:41 · 9405 阅读 · 0 评论 -
JDK 15 JAVA 15的新特性展望
伴随着2020的寒冬和新冠病毒的肆虐,JAVA迎来了久未已久的JAVA 14。自从2017年JAVA 9发布之后,JAVA的发布版本跟上了敏捷开发的步伐,小步快跑,Java平台发布节奏已从每3年以上的主要版本转变为每6个月发布一次功能。现在,每年的3月和9月都会发布新的版本功能。三月已过,九月还远吗?在JAVA 14中,推出了swith的最终版本,并且支持了NVM。今天本文将会展望一下JAVA 15中会带给我们的新特性原创 2020-04-27 07:27:11 · 16209 阅读 · 0 评论 -
JDK14的新特性
文章目录虽然JDK13在今年的9月17号才发布,但是丝毫不会影响到下一个版本JDK14的开发工作。听说官方定的新功能马上就要官宣了,我们这里不妨来提前推断一下。在9月17号的发布中,Oracle提到了switch表达式的功能预计会在JDK14中最终确定。在我的之前的文章中我已经提到了,在JDK12和JDK13中switch表达式都是作为一个实验性的语法来推出的,经过三个版本的迭代,switch...原创 2019-12-16 21:58:31 · 13763 阅读 · 0 评论 -
JDK11的重要新特性
文章目录JDK11发布啦Oracle不再提供JRE和Server JRE下载删除部署工具JavaFX不再包含在JDK中删除Java EE和CORBA模块JDK11发布啦JDK11 在2018年9月25发布。它是一个LTS版本。这就意味着这,我们会从JDK8直接升级到JDK11。那么JDK11有些什么变化呢?就我看来,JDK11最大的变化就是删除。Oracle不再提供JRE和Server J...原创 2019-11-07 09:04:44 · 11874 阅读 · 0 评论 -
JDK12的五大重要新特性
文章目录JDK12的五大重要新特性引入JVM常量API扩展了switch语句支持Unicode 11.0为日本Reiwa Era提供了方形字符支持NumberFormat增加了对以紧凑格式格式化数字的支持JDK12的五大重要新特性Java12在March 19, 2019发布了。在2017年发布Java 9之后,Java平台发布节奏已从每3年以上的主要版本转变为每6个月发布一次功能。现在,每...原创 2019-11-07 08:59:52 · 12210 阅读 · 0 评论