Java基础
文章平均质量分 71
忧郁的叮当猫
路虽远,行则将至;书虽难,学则必成。
展开
-
java 判断两个Date相差的天数
java 判断两个Date相差的天数原创 2023-01-19 10:34:57 · 381 阅读 · 0 评论 -
通过反射获取每个属性,对所有属性进行统一的处理
通过反射获取每个属性,对所有属性进行统一的处理原创 2023-01-19 10:33:07 · 114 阅读 · 0 评论 -
JAVA判断时间格式为 “YYYY-MM-DD“
上面这段代码可以对日期的有效性进行检查,对不合法的字符串日期还会进行自动的计算使其合法。比如“2022-13-02”就会被自动计算为Wed Jan 02 00:00:00 CST 2023。加上formatter.setLenient(false);可以让程序严格校验,不合法的日期格式不自动转换。原创 2023-01-18 11:34:05 · 5557 阅读 · 0 评论 -
Stream流的常用方法
Stream流的使用流操作是Java8提供一个重要新特性,它允许开发人员以声明性方式处理集合,其核心类库主要改进了对集合类的 API和新增Stream操作。Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中,能 让代码更加简洁,极大地简化了集合的处理操作,提高了开发的效率和生产力。转载 2022-01-20 17:50:03 · 13032 阅读 · 1 评论 -
如何使用三个线程顺序打印“A“,“B“,“C“
需要使用lock的Condition接口来实现三个线程顺序打印* Lock * condition.await(); * condition.signal(); * condition.signalAll(); * 和wait(), notify(), notifyALl() 功能差不多 * 区别 notify唤醒 * signal唤醒某一把锁 * */class ShareData{ //为何用Lock Lock可以设置多把锁和多把钥匙 可原创 2021-11-23 10:00:57 · 976 阅读 · 1 评论 -
为什么HashTable不能存null键和null值,而HashMap却可以?
首先明确一点:HashMap可以存放一个键是null,多个值是null 的对象,而Hashtable则不可以存放键为null,或者是值为null的对象为什么HashTable不能存null键和null值?原因:当value值为null时主动抛出空指针异常 因为key值会进行哈希计算,如果为null的话,无法调用该方法,还是会抛出空指针异常Hashtable的put方法源码如下:public synchronized V put(K key, V value) {原创 2021-11-23 09:45:57 · 7696 阅读 · 0 评论 -
Arrays.asList()方法解析
该方法是将数组转化成List集合的方法。Integer[] integers = new Integer[] {1, 2, 3};List<Integer> integerList = Arrays.asList(integers)注意:(1)该方法适用于对象型数据的数组(String、Integer...)(2)该方法不建议使用于基本数据类型的数组(byte,short,int,long,float,double,boolean), 因为这样输出的是一个...转载 2021-09-23 14:36:39 · 295 阅读 · 0 评论 -
HashMap的put方法的具体流程?
当我们put的时候,首先计算 key的hash值,这里调用了 hash方法,hash方法实际是让key.hashCode()与key.hashCode()>>>16进行异或操作,高16bit补0,一个数和0异或不变,所以 hash 函数大概的作用就是:高16bit不变,低16bit和高16bit做了一个异或,目的是减少碰撞。按照函数注释,因为bucket数组大小是2的幂,计算下标index = (table.length - 1) & hash,如果不做 hash 处理,相当于..转载 2021-08-30 17:34:20 · 6382 阅读 · 8 评论 -
ArrrayList底层元素删除原理
先看例子比如我们要把“周八”这个人从数组中删除,如图:我们只能循环数组,找到“周八“的下标5,由于数组没有提供删除方法,我们只能把下标为5的位置赋值为null(造成了数组空洞),“周八”这个Person对象已经没有引用指向它了,JVM的垃圾回收机制会在适当的时候回收它。但数组的长度还是10。下次当我们再循环查找某人时,稍不注意就会报空指针异常,虽然我们可以写非空去判断,但还是不太友好,我们把null后面的所有元素引用复制一下,往前拷贝一份,把null这个空给填上,如下图复制后:n翻译 2021-08-30 15:46:43 · 1160 阅读 · 1 评论 -
使用增强for遍历集合时,删除元素是如何抛出异常的?
看如下代码: public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); for (String name : list) {转载 2021-08-30 11:16:46 · 399 阅读 · 1 评论 -
什么是装箱?什么是拆箱?
深入剖析Java中的装箱和拆箱爱开发2018-01-18点击上方“爱开发”,置顶公众号技术文章第一时间送达!bug没地儿问? 公众号内回复“加群”,邀你加入微信技术学习群,共同学习!自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。以下是本文的目录大纲: 什么是装箱?什么是拆箱? 装箱和拆箱是如何实现的 面试中相关.转载 2021-08-18 09:53:06 · 6577 阅读 · 0 评论 -
为什么我们不用Executors默认创建线程池的方法,而直接自己手动去调用ThreadPoolExecutor去创建线程池?
引用阿里巴巴Java开发手册上的一句话【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样 的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。说明:Executors 返回的线程池对象的弊端如下:1)FixedThreadPool 和 SingleThreadPool: 允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。2)CachedThreadPool和 Schedu翻译 2021-08-17 15:27:50 · 1802 阅读 · 0 评论 -
四种构建线程池的区别及特点?
四种构建线程池的区别及特点?1. newCachedThreadPool 特点:newCachedThreadPool创建一个可缓存线程池,如果当前线程池的长度超过了处理的需要时,它可以灵活的回收空闲的线程,当需要增加时, 它可以灵活的添加新的线程,而不会对池的长度作任何限制 缺点:他虽然可以无线的新建线程,但是容易造成堆外内存溢出,因为它的最大值是在初始化的时候设置为 Integer.MAX_VALUE,一般来说机器都没那么大内存给它不断使用。当然知道可能出问题的点,就可以去重写一个方转载 2021-08-17 11:35:32 · 3349 阅读 · 0 评论 -
JDBC连接数据库的步骤
1.加载JDBC驱动 使用java反射机制中的方法forName()进行加载Class.forName(“com.mysql.jdbc.Driver”);2.建立数据库连接驱动管理类DriverManager使用特定的驱动程序,通过getConnection(Stringusr)方法建与某个特定数据库的连接。每个JDBC驱动都对应一个URL地址用于自我标识jdbc:mysql://localhost:3306/mysql;连接MySQL:Connectio...原创 2021-08-16 11:52:42 · 2629 阅读 · 0 评论 -
Java集合详解以及底层源码分析和部分面试题
目录集合ArrayListArraylist源码分析VectorLinkedListLinkedList源码解析LinkedList.add()方法Arraylist和Linkedlist的区别Set集合HashSet 【重点】Map集合HashMap 【重点】为什么扩容两倍?为什么加载因子是0.75?0.5或者1不行吗?为啥HashMap中初始化大小为什么是16呢?Collections工具类总结集合对象的容器,实现了对对象常用的原创 2021-05-19 14:26:45 · 350 阅读 · 4 评论 -
在浏览器地址栏输入一个 URL 后回车,背后发生了什么
在浏览器地址栏输入一个 URL 后回车,背后发生了什么1. 解析 URL浏览器做的第一步就是解析 URL 得到里面的参数,将域名和需要请求的资源分离开来,从而了解需要请求的是哪个服务器,请求的是服务器上什么资源等等2. 浏览器封装 HTTP 请求报文对 URL 进行解析之后,浏览器确定了目标服务器和文件名,接下来就需要根据这些消息封装成一个 HTTP 请求报文发送出去。解释一下封装,这是一个贯穿整个计算机网络的概念。就是说发送端在层与层之间传输数据时,每经过一层必定会被打上一个该层所属的首转载 2021-05-19 15:54:01 · 920 阅读 · 0 评论 -
JVM入门简记
JVM简记JVM是在操作系统之上的,接口调用本地方法一.类加载器的双委派机制类加载器作用:加载Class文件类是模板,对象是具体的1.虚拟机自带的加载器2.启动类(根)加载器3.扩展类加载器4.应用程序加载器双亲委派机制:保证安全的运行一个类之前,先向上找,优先使用上层的APP(应用程序加载器)----->EXC(扩展加载器)---->BOOTStrap根加载器(最终执行)//如果没有,去扩展加载器//如果没有,去应用程序加载器/*1.类加载器收到类加载原创 2021-05-19 15:51:21 · 893 阅读 · 0 评论 -
Java基础之多线程篇
1.线程概述进程: 进程是计算机中的程序关于某数据集合上的一次运行活动, 是操作系统进行资源分配与调度的基本单位。 可以把进程简单的理解为正在操作系统中运行的一个程序。线程: 线程是进程的一个执行单元, 一个线程就是进程中一个单一顺序的控制流, 线程是进程的一个执行分支。 进程是线程的容器,一个进程至少有一个进程。 一个进程中也可以有多个线程。在操作系统中是以进程为单位分配资源,如虚拟空间,文件描述符等。每个线程都有各自的线程栈、自己原创 2021-05-19 15:44:16 · 1006 阅读 · 5 评论 -
Java基础 IO流笔记
I/O 框架流的概念内存与存储设备之间传输数据的通道流的分类按方向【重点】 输入流:将<存储设备>中的内容读到<内存>中 输出流:将<内存>中的内容写到<存储设备>中 按单位 字节流:以字节为单位,可以读写所有数据 字符流:以字符为单位,只能读写文本数据 按功能 节点流:具有实际传输数据的读写功能 过滤流:在节点流的基础之上增强功能 字节流字节流的父类(抽象类)..原创 2021-05-19 14:36:09 · 879 阅读 · 2 评论