![](https://img-blog.csdnimg.cn/20210603150405525.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java基础
java基础相关知识
珠峰下的沙砾
IT永无止境
展开
-
并发之AbstractOwnableSynchronizer同步器
深入浅出java原创 2023-09-26 10:38:32 · 119 阅读 · 0 评论 -
线程池中的线程工厂
线程池中的线程工厂原创 2022-07-03 01:08:35 · 2867 阅读 · 0 评论 -
线程池的拒绝策略
线程池的拒绝策略原创 2022-07-03 00:25:53 · 117 阅读 · 0 评论 -
回味集合(十三)之HashTable
祝大家新年快乐,虎年大吉;HashTable的继承体系Dictionary 是JDK1.0出的一个接口,Dictionary 类是任何类的抽象父类,例如 Hashtable,它将键映射到值。每个键和每个值都是一个对象。在任何一个 Dictionary 对象中,每个键最多与一个值相关联。给定一个字典和一个键,可以查找相关的元素。任何非空对象都可以用作键和值。通常,此类的实现应使用 equals 方法来确定两个键是否相同。感觉是Map(JDK 1.2)接口的前世,定义了一些简单的集合操作方法:pu原创 2022-02-03 19:37:22 · 788 阅读 · 0 评论 -
队列之BlockingQueue
一个另外支持操作队列的方式,在检索时等待队列变为非空元素,或等待队列中的空间变的可用存储一个元素。BlockingQueue有四种形式处理不能立即满足,但可以满足的操作满足于未来的某一个时刻:抛出异常返回一个特殊值(null或false)阻塞当前线程,直到操作成功阻塞并给定的最大时间限制BlockingQueue不接受null元素。否则抛出NullPointerException(add,put,offer方法)BlockingQueue可能是容量有限的。在任何给定的当它有一个remain原创 2021-09-25 16:14:12 · 138 阅读 · 0 评论 -
队列之AbstractQueue
理解AbstractQueue(抽象队列)继承了AbstractCollection同时实现了Queue接口,定义了队列基础的一些重要的方法。源码public abstract class AbstractQueue<E> extends AbstractCollection<E> implements Queue<E> { /** * Constructor for use by subclasses. */原创 2021-09-23 23:04:55 · 373 阅读 · 0 评论 -
java对象
今天本想学习学习一下Thread类的join方法原理,于是就去网上找了相关的资料。在读ORACLE学习文档时,有一句话让我对java对象产生了很大的好奇心:翻译过来就是:Java 中的每个对象都与一个监视器相关联,线程可以锁定或解锁监视器。java对象是如何组成的?都有哪些组成部分?带着这些问题又去网上查询了一下,对java对象又有了新的认识。java对象的组成结构在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填原创 2021-06-10 15:29:05 · 60 阅读 · 0 评论 -
优先级队列-PriorityQueue
源码public class PriorityQueue<E> extends AbstractQueue<E> implements java.io.Serializable { // 序列化id private static final long serialVersionUID = -7720805057305804111L; // 默认初始化大小 11 private static final int DEFAULT_INITIAL_原创 2021-06-07 17:15:39 · 166 阅读 · 2 评论 -
重新认识异常之整体结构
异常分类编译异常运行异常逻辑异常异常继承结构:Error: 严重异常错误 不可用用程序修改(一般发生于JVM中的异常)Exception: 即逻辑异常,运行异常,java编译器不会检查,程序本身可以处理的异常,可以捕获异常进行处理非运行时异常:即编译异常,仅可能在程序中处理非受查异常:java编译器不会进行检查受查异常:java编译器会进行检查异常处理捕获异常 try{ // 可以发生异常的代码 }catch(可能出现的异常类型 e1){ //原创 2021-04-08 14:10:27 · 55 阅读 · 0 评论 -
回味集合(十二)HashMap中的put方法
说完了resize方法在说put方法就很好理解了,我们直接看看源码吧:源码hashmap中的put方法public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } -----------------------------------------------------------计算哈希值 static final int hash(Object key) {原创 2021-03-24 23:22:38 · 174 阅读 · 0 评论 -
回味集合(十一)HashMap中的resize()方法
简介说起HashMap想必大家都不陌生,在平时开发时应对有映射关系的数据时就会使用HashMap来保存数据之间的关系,通过key获取对应的value,在我们向HashMap中不停put时,有没有想过HashMap是如何存在数据的呢?如何解决哈希冲突的呢,当链表过长时如何解决的呢?带着这些问题我们一起学习HashMap吧,下面是HashMap用于扩容的方法我们一起来看看吧。源码// 当哈希表中已经存在数据时,再向hashmap中put数据时,哈希表已经达到扩容的要求(哈希表长度>哈希表长度*负载因原创 2021-03-24 15:13:20 · 223 阅读 · 1 评论 -
java7的hsahmap扩容死锁过程与环链形成分析:
扩容:void resize(int newCapacity){ Entry [] oldTavle = table; int oldCapacity = oldTable.length; if(oldCapacity == MAXIMUM_CAPACITY){ threshold = Integer.MAX_VALUE; return;...原创 2020-04-08 17:30:09 · 225 阅读 · 0 评论 -
回味集合(十)HashMap中的成员变量
在学习HashMap源码之前,先看看HashMap中的成员变量是非常重要的,有助于我们后面查看源码时的理解,HashMap中的成员变量如下:// 默认初始容量(数组默认初始化大小)static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 16// 最大容量static final int MAXIMUM_CAPACITY = 1 << 30; //// 默认的负载因子(在对map进行扩容时需要负载因子进行计算)stat原创 2021-03-22 23:39:50 · 247 阅读 · 0 评论 -
回味集合(九)Map接口
源码package java.util;public interface Map<K,V> { // 返回map中的键值对个数 int size(); // 判断map中是否包含键值对 boolean isEmpty(); // 判断map是否存在指定的key boolean containsKey(Object key); // 判断map是否存在指定的value boolean containsValue(Object原创 2021-03-22 23:11:01 · 94 阅读 · 1 评论 -
回味集合(八)Queue接口
简介Queue队列是一种先进先出数据结构,Queue是一个接口源码public interface Queue<E> extends Collection<E> { // 如果可能的话,立即将指定的元素插入此队列,而不会违反容量限制;如果成功,则返回true, // 如果当前没有可用空间,则抛出IllegalStateException。 boolean add(E e); // 如果可能,立即将指定的元素插入此队列而不违反容量限制。 当使原创 2021-03-22 11:21:54 · 217 阅读 · 4 评论 -
回味集合(七)Iterator与ListIterator
迭代器迭代器(也是一种设计模式)是一个对象,他的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构,此外迭代器通常被称为轻量级对象,创建他的代价小。在java中有两个熟悉的迭代器Iterator和ListIteratorIterator源码public interface Iterator<E> { // 检查序列中是否还有下一个元素 boolean hasNext(); // 获取序列中的下一个元素 E next()原创 2021-03-19 00:16:24 · 59 阅读 · 2 评论 -
回味集合(六)Set接口
上次说了Collection其中的一个子类List机器三个子类,今天就看看Collection的另一个子类Set接口,先看看源码中有哪些方法:源码public interface Set<E> extends Collection<E> { // Query Operations /** * *返回集合中元素的个数 */ int size(); /** * *判断集合是否为空 */原创 2021-03-17 23:05:00 · 73 阅读 · 0 评论 -
System.arraycopy
源码 /** * Copies an array from the specified source array, beginning at the * specified position, to the specified position of the destination array. * A subsequence of array components are copied from the source * array referenced by &原创 2021-03-01 10:16:50 · 229 阅读 · 2 评论 -
说说String类型
回想起当初说String类型是不可变的,字符串"abd"就是"abd",但是我一直有个错误的想法就是如下:例如:String str = "abd";我还是以为str不能在改变,只能是abd既然说String那就先翻翻部分源码----->public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is原创 2021-02-05 14:46:21 · 136 阅读 · 5 评论 -
Comparable(自然排序)与Comparator(比较器)
1.个人理解当相对引用类型的进行排序时,我们可以使用Collections.sort(List<T> list)或Collections.sort(List<T> list,Comparator<? super T> c)和(Arrays.sort)对对象集进行排序,但在排序之前要制定排序的规则,这时就需要使用Comparable与Comparator接口实现排序规则。Comparable(自然排序):Comparable属于一个内部排序,一个对象想要拥有排序的原创 2020-12-05 18:42:13 · 257 阅读 · 0 评论 -
源码说ThreadLocal
学习Java中常用的开源框架,Mybatis、Hibernate中设计到线程通过数据库连接对象Connection,对其数据进行操作,都会使用ThreadLocal类来保证Java多线程程序访问和数据库数据的一致性问题。就想深入了解一下ThreadLocal类是怎样确保线程安全的!详解如下:说起ThreadLocal之前我想带大家先去看看Thread中的两个变量方便后面的理解。Thread类publicclass Thread implements Runnable { /* ThreadLoc原创 2020-06-24 10:42:58 · 176 阅读 · 0 评论 -
回味集合(五)LinkedList的add方法
说起LinkedList我们先说说他的底层实现,LinkedList底层实现使用的双向链表,方便于数据的增加和删除,在对数据进行查询时是非常不方便的,需要一个一个的变量非常影响效率,所以在大量进行增删操作时可以使用LinkedList。add方法在说add方法之前我们先看一个Node结点类(内部类),以免后面不知道Node是什么: private static class Node<E> { //存储当前结点的数据 E item; //记录下一原创 2020-06-20 12:29:19 · 1831 阅读 · 0 评论 -
回味集合(四)Vector的add方法
在List子类中Vector算是一个比较特别的一个,我们可以看看的源码: public synchronized boolean add(E e) { modCount++; //elementCount + 1表示当前数组最后一个元素的位置的下一个位置 ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = e; return true;原创 2020-06-16 18:13:06 · 1282 阅读 · 0 评论 -
回味集合(三)ArrayList的add方法
啥也不说了,直接撸源码:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable从上述代码中我们可以看出继承了AbstractList即List接口,实现了RandomAccess,Cloneable两个接口,其中RandomAccess接口中没有任何方法,他只是一个标识,说明实原创 2020-06-15 13:10:21 · 1254 阅读 · 0 评论 -
回味集合(二) Collection
接着上次的继续,在集合框架的大家族中我们说完了集合的祖宗Iterator,接下来我们看看他的“孩子”—Collection。 public interface Collection<E> extends Iterable<E> 可以看出来Collection也是一个接口,他继承的Iterator接口在Iterator的基础上又扩展的一些功能:1. int size();2. boolean isEmpty();3. boolean contains(Object o)原创 2020-06-14 09:13:48 · 132 阅读 · 0 评论 -
回味集合(一)Iterator
啥也别说先欣赏一下"美图"。从上图中我们会发现Iterator是大集合的祖宗,那我们就先看一下Iterator吧。 public interface Iterator<E> Iterator是一个接口,中文名叫迭代器。定义的功能是对各种数据集合的迭代。我们来逐步分析它。其内部方法:1.boolean hasNext();2.E next();3.default void remove() { throw new UnsupportedOperationExcep.原创 2020-06-12 00:03:00 · 120 阅读 · 0 评论 -
异常捕获如何捕获信息e.getmessage()
首先调用runtimeException构造器,传递message然后信息赋值到这里然后这里就有了数值由于是父类,所以Exception调用的时候getMessage()的时候,就会捕获这个信息...原创 2019-05-08 21:23:24 · 2199 阅读 · 0 评论 -
IO(二)
字符流1.字符输入流java.io.Reader:字符输入流,是字符输入流最顶层的父类,定义了一些共性的成员方法,是一个抽象类。共性成员方法:int reader(); 读取单个字符并返回int reader(char [] c); 一次读取多个字符,将字符读入数组void close(); 关闭该流并释放与之相关的所有资源2.文件字符输入流java.io.FileReade...原创 2019-05-19 14:51:41 · 81 阅读 · 0 评论 -
IO(一)
IO流概述1.什么是IO我们把数据的传输,可以看作是一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出output,即流向内存是输入流,流出内存是输出流。java中I/O操作主要是指使用java.io包下的内容,进行输入,输出操作,输入也可以叫做读取数据,输出也可以叫做写出数据。2.IO的分类根据数据的流向分为:输入流和输出流。输入流:把数据从其他设备上读取到...原创 2019-05-17 10:14:48 · 143 阅读 · 0 评论 -
File类(二)
判断功能public boolean exists(); 此File表示文件或目录是否实际存在public boolean isDirectyry(); 此File表示的是否是目录public boolean isFile(); 此File表示的是否是文件注意:public boolean isDirectyry(); 用于判断构造方法中给定的路径是否以文件夹结尾public ...原创 2019-05-14 10:00:42 · 157 阅读 · 0 评论 -
File类(一)
初识File类属于 java.io.file类文件和目录路径名称的抽象表示形式Java把电脑中的文件和文件夹(目录)封装为了一个File类,我们可以使用File类对文件和文件夹进行操作。我们可以使用File类的方法:1.创建一个文件或文件夹2.删除一个文件或文件夹3.获取一个文件或文件夹4.判断文件或文件夹是否存在5.对文件夹进行遍历6.获取文件大小File类是一个与系统...原创 2019-05-13 12:01:41 · 212 阅读 · 0 评论 -
异常学习(补充)
finally的特点被finally控制的语句体一定会执行特殊情况:在执行到finally之前jvn退出了(System.exit(0))finally的作用用于释放资源,在IO流操作和数据库操作中会见到finally相关的面试题final,finally和finalize的区别final:最终的意思,可以修饰类,成员变量,成员方法修饰类:类不能被继承修饰变量:变量是常...原创 2019-09-23 21:11:20 · 102 阅读 · 0 评论 -
异常学习
1.Throwable类是java语言中所有错误或异常的超类,它有两个子类:Error(严重问题)我们不处理,这种问题一般都是很重要的,比如内存溢出Exception (问题)2.异常可分为(Exception):编译异常:不是RuntimeException的异常 必须进行处理,因为你不处理,编译就不能通过。运行异常: RuntimeException这种问题我们也...原创 2019-09-20 21:55:32 · 208 阅读 · 0 评论