![](https://img-blog.csdnimg.cn/20201224090121116.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java核心技术
Java核心技术
邋遢的流浪剑客
成长中的基础架构攻城狮
展开
-
Java泛型详解:泛型类、泛型方法使用
转自:https://www.cnblogs.com/jpfss/p/9928747.html一、泛型类定义及使用public class Point<T> { private T x; private T y; public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() {转载 2020-07-22 20:42:00 · 1687 阅读 · 0 评论 -
List如何一边遍历,一边删除
1、foreach抛出ConcurrentModificationException List<String> strList = new ArrayList<>(); strList.add("Java"); strList.add("Docker"); strList.add("SpringCloud"); for (String str : strList) { if ("J原创 2020-06-13 18:39:30 · 3065 阅读 · 0 评论 -
Java中集合相关知识点复习
一、List1、ArrayListArrayList是一种变长的集合类,基于定长数组实现,使用默认构造方法初始化出来的容量是10(1.7之后都是延迟初始化,即第一次调用add方法添加元素的时候才将elementData容量初始化为10)ArrayList允许空值和重复元素,当往ArrayList中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。ArrayList...原创 2020-05-03 09:18:58 · 1553 阅读 · 0 评论 -
JDK9 Reactive Stream
1、概念基于发布订阅者模式处理规范(机制),在JDK中真正叫法是FlowAPI2、背压(backpress)背压指的发布者和订阅者之间的互动订阅者可以告诉发布者自己需要多少数据,可以调节数据流量,不会导致发布者发布数据过多导致数据浪费或压垮订阅者3、Reactive Stream主要接口java.util.concurrent.Flow类中定义的接口:1)、Publisher&l...原创 2020-04-18 14:34:26 · 493 阅读 · 0 评论 -
Java9、10、11特性总结
一、Java91、接⼝私有⽅法JDK8新增了静态⽅法和默认⽅法,但是不⽀持私有⽅法JDK9中新增了私有⽅法public interface OrderPay { void pay(); default void defaultPay() { privateMethod(); } //接⼝的私有⽅法可以在JDK9中使⽤ privat...原创 2020-04-16 09:04:09 · 577 阅读 · 0 评论 -
Java7、Java8特性总结
一、Java71、try-with-resourcesJDK7之前的写法: String path = "/Users/hanxiantao/Desktop/hello.txt"; OutputStream out = null; try { out = new FileOutputStream(path); ...原创 2020-04-12 17:59:36 · 630 阅读 · 0 评论 -
Java业务开发常见错误100例笔记
一、多线程相关1、ThreadLocalThreadLocal适用于变量在线程间隔离,而在方法或类间共享的场景程序运行在Tomcat中,执行程序的线程是Tomcat的工作线程,而Tomcat的工作线程是基于线程池的。线程池会重用固定的几个线程,所以使用ThreadLocal来存放一些数据时,需要特别注意在代码运行完后,需要在代码的finally代码块中,显式清除ThreadLocal中的数据...原创 2020-04-03 10:30:07 · 8928 阅读 · 1 评论 -
开发中常用Java8日期和时间相关API
1、获取某天的开始时间 /** * 获取某天的开始时间 * * @param zonedDateTime * @return */ public static ZonedDateTime getDayStartDate(ZonedDateTime zonedDateTime) { return zonedDateTi...原创 2020-03-14 16:29:40 · 435 阅读 · 0 评论 -
Java中SPI机制
转自:https://www.jianshu.com/p/46b42f7f593c一、SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件整体机制图如下:Java SPI实际上是基于接口的编程+策略模式+配置文件组合实现的动态加载机制系统设计的各个抽象,往往有很多不同的实现方案...转载 2019-09-14 18:12:08 · 298 阅读 · 0 评论 -
为什么使用HashMap需要重写hashcode和equals方法?
一、散列表1、散列思想散列表用的是数组支持按照下标随机访问数据的时候,时间复杂度是O(1)的特性通过散列函数把元素的键值映射为下标,然后把数据存储在数组中对应下标的位置。当按照键值查询元素时,用同样的散列函数,将键值转化为数组下标,从对应的数组下标的位置取数据2、散列函数散列函数hash(key),其中key表示元素的键值,hash(key)的值表示经过散列函数计算得到的散列值散列函数...原创 2019-09-07 14:47:50 · 13555 阅读 · 4 评论 -
Java性能优化的45个细节
转自:https://mp.weixin.qq.com/s/AiMz62n3pMOPLfWx-0KmHQ尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:控制资源的使用,通过线程同步来控制资源的并发访问;控制实例的产生,以达到节约资源的目的;控制数据共享,在不建立直接关联的条件下...转载 2019-03-17 20:14:40 · 274 阅读 · 0 评论 -
HashMap和Hashtable的区别
HashMap和Hashtable的区别1、线程安全Hashtable是线程安全的,HashMap不是线程安全的Hashtable所有的元素操作都是synchronized修饰的,而HashMap并没有2、性能优劣Hashtable是线程安全的,每个方法都要阻塞其他线程,所以Hashtable性能较差,HashMap性能较好,使用更广如果要线程安全又要保证性能,建议使用JUC包下的Co...原创 2019-01-18 11:37:31 · 533 阅读 · 0 评论 -
解析final关键字
1、final关键字介绍final是Java中一个保留的关键字,可以声明变量、方法、类2、什么是final变量、类、方法?任何变量前被final修饰就是final变量,定义的类前被final修饰就是final类,任何方法前被final修饰就是final方法3、final类当用final修饰一个类时,表明这个类不能被继承4、final方法《Java编程思想》中的描述:使用final方法...原创 2019-02-23 18:01:22 · 297 阅读 · 0 评论 -
HashMap和ConcurrentHashMap源码分析(基于JDK1.7和1.8)
HashMap和ConcurrentHashMap源码分析1、HashMapHashMap底层是基于数组+链表组成的1)、JDK1.71.7中的结构图:HashMap中重要的成员变量: // 初始化桶大小,因为底层是数组,所以这是数组默认的大小 static final int DEFAULT_INITIAL_CAPACITY = 16; // 桶最大值 ...原创 2019-02-14 10:39:05 · 706 阅读 · 0 评论 -
解析static关键字
1、static方法static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,并且在静态方法中不能访问类的非静态成员变量和非静态成员方法2、static变量static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在...原创 2019-02-26 09:09:15 · 228 阅读 · 0 评论 -
HashMap:为什么容量总是为2的n次幂
HashMap:为什么容量总是为2的n次幂1)、HashMap是根据key的hash值决定key放到哪个桶中,通过tab[i = (n - 1) & hash]公式计算得出这里的n是HashMap的容量,因为n永远是2的次幂,所以n - 1通过二进制表示,永远都是末尾连续1的形式表示(如00001111、00000011),当(n - 1) 和hash做与运算时,会保留hash中后x位...原创 2019-03-06 10:18:46 · 5000 阅读 · 6 评论 -
Java序列化与transient关键字
Java序列化与transient关键字1)、什么是序列化?我们的对象不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术Java序列化技术正是将对象转变为一串由二进制字节组成的数组,可以通过将二进制数据保存到磁盘或者传输网络,磁盘或者网络接收者可以在对象的属类的模板上来反序列化类的对象,达到对象序列化的目的2)、怎么序列化一个对象?要序列化一个对象...原创 2019-03-07 12:14:52 · 1070 阅读 · 0 评论 -
重写equals方法
一、为什么要重写equals方法?Object类是Java中所有类的基类,Object类中的equals方法实际比较的是两个对象的内存地址是否相等。如果两个引用指向同一个对象,则equals返回true,否则返回falseObject类中equals方法定义如下: public boolean equals(Object obj) { return (this == o...原创 2019-03-17 16:24:17 · 2410 阅读 · 0 评论 -
Java中的clone克隆方法
一、Java中对象的创建在Java语言中,clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象new和clone方法的区别?程序执行new操作符时,首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域,这一步就做对象的初始化,构造方法返回后,一个...原创 2019-03-25 23:15:31 · 564 阅读 · 1 评论 -
为什么禁止把SimpleDateFormat定义为static类型的?
一、前言最近使用Sonarqube扫描代码的时候发现一个问题,使用static修饰SimpleDateFormat的实例被标记为了BugSonarqube中的提示信息如下:并不是标准Java库中的所有类都被编写为线程安全的。以多线程方式使用它们很可能在运行时导致数据问题或异常当Calendar, DateFormat, javax.xml.xpath.XPath, 或者 javax.xml...原创 2019-04-03 16:37:58 · 3389 阅读 · 0 评论 -
StringBuffer和StringBuilder的3个区别
StringBuffer和StringBuilder的3个区别StringBuffer和StringBuilder都继承了抽象的字符串父类:AbstractStringBuilder1、线程安全StringBuffer:线程安全StringBuilder:线程不安全StringBuffer的所有公开方法都是synchronized修饰的,而StringBuilder并没有String...原创 2019-01-18 11:11:59 · 602 阅读 · 0 评论