随笔分类 - java-base-new
java基础和JDK9,10,11,12,13,14,15的新特性
摘要:简介 2021年9月JDK17发布了,JDK17是最新的一个LTS版本。所谓LTS版本就是可以得到至少八年产品支持的版本。从2014年的JDK8,到2018年的JDK11,再到2021年的JDK17。 同时Oracle也调整了LTS版本的发布年限,从之前的三年调整到现在的二年,也就是说下一个LTS版
阅读全文
摘要:简介 在2021年3月16日,JDK的迎来了它的一个新版本JDK16,虽然JDK16不是LTS版本,但是作为下一个LTS版本JDK17的先行版本,JDK16为我们带来了17个方面的提升,包括了新的语言特性、新的工具、内存管理的提升等方面。 所以一起来看看,JDK16到底为我们提供了些什么新的特性。
阅读全文
摘要:简介 在JDK8中,引入了三个非常有用的时间相关的API:Duration,Period和ChronoUnit。 他们都是用来对时间进行统计的,本文将会详细讲解一下这三个API的使用。 Duration Duration主要用来衡量秒级和纳秒级的时间,使用于时间精度要求比较高的情况。 先来看看Dur
阅读全文
摘要:简介 使用过JMH的同学一定会惊叹它的神奇。JMH作为一个优秀的Benchmark框架带给了我们无数的欢乐。作为一个有极客精神的程序员,那么有没有想过去自己实现一个Benchmark框架呢? 在实现Benchmark框架的时候有需要注意些什么问题呢?快来一起看看吧。 八条军规 这里叫军规实际上不合适
阅读全文
摘要:简介 你知道序列化可以使用代理吗?你知道序列化的安全性吗?每个java程序员都听说过序列化,要存储对象需要序列化,要在网络上传输对象要序列化,看起来很简单的序列化其实里面还隐藏着很多小秘密,今天本文将会为大家一一揭秘。 更多精彩内容且看: 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,L
阅读全文
摘要:简介 CAS的全称是compare and swap,它是java同步类的基础,java.util.concurrent中的同步类基本上都是使用CAS来实现其原子性的。 CAS的原理其实很简单,为了保证在多线程环境下我们的更新是符合预期的,或者说一个线程在更新某个对象的时候,没有其他的线程对该对象进
阅读全文
摘要:简介 java是强类型的编程语言,每个java中使用到的变量都需要定义它的类型,否则会编译失败。强类型语言的好处就是可以尽可能的在编译期间就发现代码中可能出现的问题,从而减少在运行时出现问题的可能性。 相对的,强类型语言的缺点就是不那么的灵活多变,写起来比较冗余。 JDK8之前,java是不支持类型
阅读全文
摘要:[toc] 简介 我们通常讲到闭包,一般都是指在javascript的环境中。闭包是JS中一个非常重要的也非常常用的概念。闭包产生的原因就是变量的作用域范围不同。一般来说函数内部的定义的变量只有函数内部可见。如果我们想要在函数外部操作这个变量就需要用到闭包了。 更多精彩内容且看: "区块链从入门到放
阅读全文
摘要:[toc] 标记接口,注解和注解处理器的前世今生 简介 相信大部分的开发者都用过注解,尤其是对使用过Spring的开发者来说,注解是现代Spring中不可获取的一部分。Spring从最开始的xml配置到后面的注解配置,不论是从编程习惯还是项目的构建,都对我们程序员产生了非常重要的影响。 除了使用Sp
阅读全文
摘要:[toc] 简介 在java程序中,我们通过日志来定位和发现项目中可能出现的问题。在现代java项目中,我们使用log4j或者slf4j,Logback等日志记录框架来处理日志问题。 JVM是java程序运行的基础,JVM中各种事件比如:GC,class loading,JPMS,heap,thre
阅读全文
摘要:[toc] JDK9的新特性:JPMS模块化 简介 JDK9引入了一个新的特性叫做JPMS(Java Platform Module System),也可以叫做Project Jigsaw。模块化的本质就是将一个大型的项目拆分成为一个一个的模块,每个模块都是独立的单元,并且不同的模块之间可以互相引用
阅读全文
摘要:[toc] 简介 String的底层存储是什么?相信大部分人都会说是数组。如果要是再问一句,那么是以什么数组来存储呢?相信不同的人有不同的答案。 在JDK9之前,String的底层存储结构是char[],一个char需要占用两个字节的存储单位。 据说是JDK的开发人员经过调研了成千上万的应用程序的h
阅读全文
摘要:[toc] 简介 匿名类相信大家都用过了,学过JDK8中的lambda表达式之后,可以发现有些匿名类是可以用lambda表达式来替代的,能够被替代的类叫做funcational interface。 具体的有关lambda表达式和匿名类的介绍,大家可以查阅我之前写的文章。这里就不多讲了。 本文主要介
阅读全文
摘要:[toc] 简介 在 "JDK10的新特性:本地变量类型var" 中我们讲到了为什么使用var和怎么使用var。 今天我们来深入的考虑一下var和泛型,多个接口实现的问题。 实现多个接口 在JDK的实现和我们日常的工作中,很多时候都需要实现多个接口,我们举常用的两个例子ArrayList和CopyO
阅读全文
摘要:[toc] 简介 java以面向对象的特性显著于世并得到了蓬勃的发展。在语言的发展过程中,为了让java语言更加简洁和方便使用,JDK也在不断的进行改进。 今天本文将要介绍一下JDK10中引入的本地变量类型var。 为什么我们需要var 类型推断是很多编程语言都具有的特性,编译器可以在我们不指定具体
阅读全文
摘要:注释大家都写过,应该都懂。注释就是给人看的,不是给机器看的,自然也就无法执行。 但是今天就有一个例外,快让我们看一下吧。 如果是下面一段代码,大家期望的输出是什么? ~~~java public class escapesUsage { public static void main(String[
阅读全文
摘要:[toc] JDK11的新特性:新的HTTP API 简介 JDK11之前,java的HTTP功能很弱,只提供了HttpURLConnection来进行HTTP连接,并且使用起来非常复杂。所以一般大家都是用第三方的HTTP client(Apache HttpComponents 或者 OkHttp
阅读全文
摘要:[toc] JDK12的新特性:CompactNumberFormat 简介 JDK12引入了新的格式化数字的类叫做CompactNumberFormat。主要方便我们对很长的数字进行简写。比如1000可以简写为1K或者1 thousand。 本文将会讲解CompactNumberFormat的基本
阅读全文
摘要:JDK12为java.util.stream.Collectors添加了一个新的teeing方法,怎么翻译呢?看到很多人都把它翻译成“发球台”,我不禁潸然泪下,哪里有那么复杂,tee就是T。它的作用就像是一个T型,数据从两头进入,然后从一头流出。teeing的作用也就在此。
> 更多内容请访问[www.flydean.com](www.flydean.com)
# talk is cheap, show me the code
我最喜欢的就是一言不合上代码,文字的描述总是让人有点摸不着头脑,程序员还是要用程序说话。有了程序就有了逻辑,有了逻辑一切都有了。
各大网站上的例子都喜欢举maxBy和minBy的例子,我这里偏不,下面举一个统计学生平均分数和总分数的例子,希望大家能够喜欢
阅读全文
摘要:AppCDS的全称是Application Class-Data Sharing。主要是用来在不同的JVM中共享Class-Data信息,从而提升应用程序的启动速度。
通常来说,如果要执行class字节码,JVM需要执行下面的一些步骤:给定一个类的名字,JVM需要从磁盘上面找到这个文件,加载,并验证字节码,最后将它加载进来。
如果JVM启动的时候需要加载成百上千个class,那么需要的就不是一个小数目了。
对于打包好的jar包来说,只要jar的内容不变,那么jar包中的类的数据始终是相同的。JVM在启动时候每次都会运行相同的加载步骤。
阅读全文