Java基础
文章平均质量分 96
Java基础知识,包括一些重要的JDK源码学习
晓之木初
船到桥头自然直,前提是你努力过!
展开
-
java异常与处理
1. Java的Error与Exception① 总体架构② 错误与异常的区别Error:Error是指在正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序(比如jvm自身)处于非正常的、不可恢复的状态。如OutOfMemoryError、StackOverFlowError等。Error类及其子类的实例,代表了JVM本身的错误,但是这些错误不能被程序员通过代码处理,除...原创 2019-10-06 19:31:00 · 176 阅读 · 0 评论 -
Java的Annotation接口
Java Annotation接口的介绍,以及如何按照规定implements注解原创 2023-02-21 00:35:17 · 373 阅读 · 0 评论 -
Java的访问控制权限、构造函数、类初始化顺序、重写与重载
1. Java的访问控制权限① 访问控制权限总体描述Java 中有三个访问权限修饰符:private、protected 以及 public,如果不加访问修饰符,表示包级可见。有资料将其称为default。级别从高到低排序:public、protected、default、private,他们可以修饰类、类中的成员变量和方法。访问控制权限总结如下:访问控制权限同一个类同一...原创 2019-10-06 19:34:07 · 1711 阅读 · 2 评论 -
Java多线程创建的方式
1. Java的线程状态转换① 六种状态初始(New): 新创建了一个线程对象,但还没有调用start()方法。运行(Runnable): Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为运行。Ready状态:线程对象对创建后,其他线程(比如main线程)调用了该线程的start()方法。该线程处于Runnable状态,位于可运行线程池中。它会等待被线程...原创 2019-10-06 19:32:04 · 139 阅读 · 0 评论 -
操作系统之死锁
1.原创 2019-10-06 19:36:03 · 4847 阅读 · 0 评论 -
LinkedList学习(基于JDK1.8)
1. 概述LinkedList大多数时候被归类为List,但是更多的时候是被用于实现队列本人就经常这样去定义一个队列,在有幸面试别人时,还问别人如何去new一个队列Queue<Integer> queue = new LinkedList<>();因为,不懂为什么几乎能找到的资料都是这样定义队列的,希望面试者能给自己讲讲 ????面试别人是相互学习的过程除此之外,自己还在学习LinkedList的过程中发现,相比直接使用Stack类实现栈,更建议通过原创 2021-10-05 16:59:24 · 1156 阅读 · 0 评论 -
Vector简单学习(JDK1.8)
1. 概述说到Vector,可能参加过面试,背过八股文的都知道Vector是ArrayList的、线程安全的替代类具体来说,相对ArrayList,Vector使用synchronized关键字,实现了线程同步、保证了线程安全但是,具体聊到Vector的细节,就不是很清楚了还有,c++中也有Vector,具体有什么异同也不知道 ????本文将以ArrayList为基础,有对比地学习Vector1.1 类注释Vector的类注释,翻译如下:Vector是动态数组,支持随机访问,支持扩容和原创 2021-10-04 11:52:30 · 365 阅读 · 0 评论 -
ArrayList学习(基于JDK 1.8)
1. ArrayList概述回忆一下,遇到元素个数不确定时,就会使用ArrayList,而非数组1.1 ArrayList的特性同样的,还是通过阅读类注释了解ArrayList的特性ArrayList的类注释,提供了以下信息ArrayList实现了List接口,允许元素为nullArrayList是动态的list实现,提供了用于操作数组大小的方法容量,指ArrayList中存储元素的数组大小;size,指ArrayList中的元素个数向ArrayList中添加元素,其容量会原创 2021-10-03 20:55:18 · 499 阅读 · 0 评论 -
LinkedHashMap简单学习(基于JDK 1.8)
1. 前言1.1 絮絮叨叨第一次真正意义上地接触LinkedHashMap,来自工作中的一个需求:SQL查询计划的生成,依赖于Hive的元数据原始的做法是,通过try-with-resource语句,每次访问元数据都新建一个client并立即回收这样的client连接属于短连接,如果每次建立、释放连接的时间占比很高,短连接的做法并不可行因此,想使用长连接,例如连接池,来改造访问逻辑,提高元数据的访问效率既然使用连接池,那就需要及时关闭长时间空间的连接,避免占用资源因此,如何实现空闲连原创 2021-09-30 00:52:29 · 828 阅读 · 0 评论 -
HashMap学习(二)(基于JDK 1.8)
3. 查找方法3.1 get方法回忆之前学习TreeMap时,get()方法的实现:通过getEntry()获取到key对应的entry,然后再返回entry中的valueHashMap中的 get() 方法也是照葫芦画瓢:返回的值为null,可能是map中不存在key的映射,也可能是映射的值本身就是null要想判断map中是否存在key的映射,还是需要调用containsKey()方法public V get(Object key) { Node<K,V> e;原创 2021-09-25 21:55:26 · 211 阅读 · 0 评论 -
HashMap学习(一)(基于JDK 1.8)
HashMap的结构:数组 + 链表,数组 + 链表 + 红黑树,何时转为红黑树、何时转回链表拉链法类图、成员变量、构造函数常见方法:get、put、remove、containsKey、扩容常见面试题(hashCode和equals的关系)...原创 2021-09-23 23:00:41 · 873 阅读 · 2 评论 -
TreeMap学习(基于JDK 1.8)
1. 概述JDK 1.8开始,HashMap中冲突的entry数大于8,会将链表转为红黑树,以减少查询耗时在学习红黑树的过程中,了解到TReeMap使用红黑树存储entry为了加深对红黑树的理解,基于JDK 1.8源码,学习TreeMap说实话,本人好像从未使用过TreeMap ????1.1 TreeMap与HashMap的异同相同点作为map,要求不能包含重复的key,每个key至多映射到一个value;写入相同的key,value将被自动覆盖非线程安全,可以通过工具方法Colle原创 2021-09-20 20:25:43 · 445 阅读 · 0 评论 -
红黑树详解
1. 概述1.1 红黑树的引入有了二叉搜索树,为什么还需要平衡二叉树?在学习二叉搜索树、平衡二叉树时,我们不止一次提到,二叉搜索树容易退化成一条链这时,查找的时间复杂度从O(log2N)O(log_2N)O(log2N)也将退化成O(N)O(N)O(N)引入对左右子树高度差有限制的平衡二叉树,保证查找操作的最坏时间复杂度也为O(log2N)O(log_2N)O(log2N)有了平衡二叉树,为什么还需要红黑树?AVL的左右子树高度差不能超过1,每次进行插入/删除操作时,几乎都需要通过旋原创 2021-09-12 20:23:18 · 106759 阅读 · 30 评论 -
平衡二叉树(AVL)
1. 概述1.1 定义平衡二叉树,全称为平衡二叉搜索树它是由苏联数学家Adelson-Velsky 和 Landis提出来的,因此平衡二叉树又叫AVL树平衡二叉树的定义是一种递归定义,要求每个节点都具有以下特性:可以是一棵空树左子树和右子树高度之差的绝对值不超过1(左右子树的高度差可以为0、1和 -1)左子树和右子树均为平衡二叉树为什么平衡二叉树是二叉搜索树?之前,在学习二叉搜索树时,增删该查的效率最坏为O(n)O(n)O(n)。此时,二叉树退化成一条链若二叉搜索树尽可能的平衡原创 2021-09-05 17:28:40 · 14852 阅读 · 5 评论 -
二叉搜索树
1. 二叉搜索树1.1 二叉搜索树二叉树,就是最多有两个叶子节点的树满二叉树: 除叶子节点外,其他节点都具有两个子节点(二叉树的自子节点都是满的)完全二叉树: h层的二叉树,h-1层是满二叉树,最后一层的叶子节点连续集中在左侧二叉搜索树: 左子节点的值 <<< 父节点的值,右子节点的值 >>> 父节点的值,这样一棵二叉树叫做二叉搜索树二叉搜索树,又称二叉查找树、二叉排序树通过父节点与子节点的大小关系,在查找目标值时,可以不断缩小范围,类原创 2021-09-03 01:07:04 · 742 阅读 · 0 评论 -
Java泛型(二)
1. Java的泛型通配符泛型通配符可以使用A-Z的任意一个字符,不影响泛型的效果,但会影响理解。class GenericClass2<A> implements GenericInterface<A>{ @Override public A next() { return null; }}通常使用的通配符包括T、K、V、E和?,它们有一些约定俗成的含义:?表示不确定的 Java 类型。T (type) 表示具体的一原创 2021-08-22 20:52:13 · 318 阅读 · 0 评论 -
Java泛型(一)
1. Java泛型概述1.1 泛型引入前 —— Object实现参数任意化1. Java泛型概述1.1 Object实现参数任意化考虑自己实现一个容器类,可以支持对不同类型数据的增删改查。JDK 1.5之前,由于不支持泛型,所以需要使用Object创建数组作为容器。获取item时,需要显式地进行强制类型转换。class MyList { public static final int LENGTH = 10; private Object[] list = new Obj原创 2021-08-22 02:22:21 · 1117 阅读 · 2 评论 -
Java基础(三)
发射、异常附上之前的博客Java的反射Java反射整理-2021.01.021.1 反射概述什么是反射?程序运行时,对于任意一个类,动态地获取其所有属性和方法;对于任意一个对象,动态地访问其所有属性或方法这种动态获取信息、动态调用方法的机制,在Java中被叫做反射为什么是反射?(自己的理解)反射的两大支柱之一,Class类,实例化后的Class对象对应一个真实的Java类,包含了该类的属性和方法信息。.原创 2021-08-15 19:55:03 · 427 阅读 · 0 评论 -
Java基础(二)
1. 访问控制权限2. 构造函数1. 访问控制权限Java的四种访问控制权限Java权限修饰符,可见关键字的为public、protected、private,实际上当省略权限修饰符时,也对应一种权限这种权限被称为default权限,或包访问权限。也就是说,被default权限修饰的类、类中的成员变量/方法,只能被同一包中的其他类访问四种访问控制权限的限定范围如下访问控制权限同一个类同一包中的其他类不同包中的子类不同包中的其他类publicYes.原创 2021-08-04 12:55:40 · 236 阅读 · 0 评论 -
Java基础(一)
1. boolean类型占几个字节?单独使用boolean类型,由于jvm中没有boolean专用的字节码指令,为了方便寻址,使用int数据类型存储boolean。此时,boolean类型占用4 byte对boolean数组访问与修改,将使用byte数组的baload、bastore指令进行操作。此时,boolean类型占用1 byte2. 一个字符占用多少字节?如果单纯的说java中的char,占用多少字节?回答: 2 byte,使用unicode编码如果问你,一个字符串的长度是多少?不原创 2021-08-01 20:11:54 · 373 阅读 · 0 评论