初学Java
文章平均质量分 74
自我总结的Java基础
扯淡吧 Pino曹
这个作者很懒,什么都没留下…
展开
-
synchronized锁的升级以及各个锁的状态对比
synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。而在Java6之前,synchronized属于重量级锁(悲观锁),效率低下,使用wait和notify/notifyAll来切换线程状态非常消耗系统资源。因为监视器锁(monitor)是依赖于底层的操作系统的Mutex Lock来实现的,Java的线程是映射到操作系统的原生线程之上的。而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状原创 2021-10-11 09:58:17 · 389 阅读 · 1 评论 -
HashMap初始容量为什么是2的n次幂及扩容为什么是2倍的形式
在HashMap中添加元素putVal()方法的源码中和HashMap扩容时调用resize()方法的源码中都会使用(n-1)&hash的计算方法来得到元素在集合中的位置。其中n是集合的容量,hash是添加的元素进过hash函数计算出来的hash值。至于HashMap的容量为什么是2的n次幂,这个和(n-1)&hash的计算方法有关系。符号&代表按位与计算(即位运算),计算机能够直接运算,特别高效。按位与&运算的计算方法是,只有当对应位置的数据都为1时,运算结果即为1。当H转载 2021-10-03 20:22:15 · 348 阅读 · 0 评论 -
浅谈为什么HashMap红黑树的阈值是8
在Java8及以后的版本中,HashMap引入了红黑树结构,其底层的数据结构从数组+链表变成了数组+链表/红黑树。HashMap桶中添加元素时,若链表个树超过8(且数组元素大于64),链表会转换成红黑树。那么为什么HashMap红黑树的阈值为什么是8呢?首先和hashcode碰撞次数的泊松分布有关,主要是为了寻找一种时间和空间的平衡。在负载因子0.75(HashMap默认)的情况下,单个hash槽内元素个数为8的概率小于百万分之一,大于8时转为红黑树,小于等于6时转为链表。而原作者在选择链表元素个数时选择转载 2021-10-03 18:08:31 · 2138 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之函数式接⼝、Stream流、⽅法引⽤
函数式接⼝、Stream流、⽅法引⽤1 函数式接⼝1.1 概念1.2 格式1.3 @FunctionalInterface注解1.4 ⾃定义函数式接⼝2 函数式编程2.1 Lambda的延迟执⾏性能浪费的⽇志案例体验Lambda的更优写法证明Lambda的延迟2.2 使⽤Lambda作为参数和返回值3 常⽤函数式接⼝3.1 Supplier接⼝3.2 练习:求数组元素最⼤值题⽬解答3.3 Consumer接⼝抽象⽅法:accept默认⽅法:andThen3.4 练习:格式化打印信息题⽬解答3.5 Predi原创 2021-08-15 15:03:57 · 1346 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之缓冲流、转换流、序列化流、打印流
缓冲流、转换流、序列化流、打印流1 缓冲流1.1 概述1.2 字节缓冲流构造⽅法效率测试1.3 字符缓冲流构造⽅法特有⽅法2 转换流2.1 字符编码和字符集字符编码字符集2.2 编码引出的问题2.3 InputStreamReader类构造⽅法指定编码读取2.4 OutputStreamWriter类构造⽅法指定编码写出转换流理解图解2.5 练习:转换⽂件编码案例分析案例实现3 序列化3.1 概述3.2 ObjectOutputStream类构造⽅法序列化操作1 缓冲流作为IO流的⼊⻔,今天我们要⻅识⼀原创 2021-08-13 15:13:05 · 789 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之⽂件操作、IO流
⽂件操作、IO流1 File类1.1 概述1.2 构造⽅法1.3 常⽤⽅法获取功能的⽅法绝对路径和相对路径判断功能的⽅法创建删除功能的⽅法1.4 ⽬录的遍历2 递归2.1 概述2.2 递归累加求和计算1 ~ n的和代码执⾏图解2.3 递归求阶乘2.4 递归打印多级⽬录3 综合案例3.1 ⽂件搜索3.2 ⽂件过滤器优化4 IO概述4.1 什么是IO4.2 IO的分类4.3 IO的流向说明图解5 字节流5.1 ⼀切皆为字节5.2 字节输出流【OutputStream】5.3 FileOutputStream类构原创 2021-08-12 19:26:30 · 1076 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之线程池、Lambda表达式
线程池、Lambda表达式1 等待唤醒机制1.1 线程间通信1 等待唤醒机制1.1 线程间通信概念: 多个线程在处理同⼀个资源,但是处理的动作(线程的任务)却不相同。⽐如:线程A⽤来⽣成包⼦的,线程B⽤来吃包⼦的,包⼦可以理解为同⼀资源,线程A与线程B处理的动作,⼀个是⽣产,⼀个是消费,那么线程A与线程B之间就存在线程通信问题。为什么要处理线程间通信:多个线程并发执⾏时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成⼀件任务,并且我们希望他们有规律的执⾏,那么多线程之间需要⼀原创 2021-08-07 19:45:01 · 863 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之异常、线程
异常、线程1 异常1.1 异常概念1.2 异常体系1.3 异常分类1.4 异常的产⽣过程解析2 异常的处理2.1 抛出异常throw2.2 Objects⾮空判断2.3 声明异常throws1 异常1.1 异常概念异常,就是不正常的意思。在⽣活中:医⽣说,你的身体某个部位有异常,该部位和正常相⽐有点不同,该部位的功能将受影响。在程序中的意思就是:异常 :指的是程序在执⾏过程中,出现的⾮正常的情况,最终会导致JVM的⾮正常停⽌。在Java等⾯向对象的编程语⾔中,异常本身是⼀个类,产⽣异常就是创建原创 2021-07-31 17:03:23 · 2021 阅读 · 0 评论 -
Debug追踪
使⽤IDEA的断点调试功能,查看程序的运⾏过程在有效代码⾏,点击⾏号右边的空⽩区域,设置断点,程序执⾏到断点将停⽌,我们可以⼿动来运⾏程序点击Debug运⾏模式程序停⽌在断点上不再执⾏,⽽IDEA最下⽅打开了Debug调试窗⼝Debug调试窗⼝介绍快捷键F8,代码向下执⾏⼀⾏,第九⾏执⾏完毕,执⾏到第10⾏(第10⾏还未执⾏)切换到控制台⾯板,控制台显示 请录⼊⼀个字符串: 并且等待键盘录⼊快捷键F8,程序继续向后执⾏,执⾏键盘录⼊操作,在控制台录⼊数据 aba原创 2021-07-29 20:43:28 · 338 阅读 · 1 评论 -
JavaSE个人复习式整理知识点之升级版API三(Map)
Map1 Map集合1.1 概述1.2 Map常⽤⼦类1.3 Map接⼝中的常⽤⽅法1.4 Map集合遍历键找值⽅式1.5 Entry键值对对象1.6 Map集合遍历键值对⽅式1.7 HashMap存储⾃定义类型键值1.8 LinkedHashMap1.9 Map集合练习2 补充知识点2.1 JDK9对集合添加的优化1 Map集合1.1 概述现实⽣活中,我们常会看到这样的⼀种集合:IP地址与主机名,身份证号与个⼈,系统⽤户名与系统⽤户对象等,这种⼀⼀对应的关系,就叫做映射。Java提供了专⻔的集合类⽤原创 2021-07-29 20:36:55 · 214 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之升级版API二(List、Set、数据结构、Collections)
List、Set、数据结构、Collections1 数据结构1.2 常⻅的数据结构栈队列数组链表红⿊树2 List集合2.1 List接⼝介绍2.2 List接⼝中常⽤⽅法3 List的⼦类3.1 ArrayList集合3.2 LinkedList集合4 Set接⼝4.1 HashSet集合介绍4.2 HashSet集合存储数据的结构(哈希表)4.3 HashSet存储⾃定义类型元素1 数据结构1.2 常⻅的数据结构数据存储的常⽤结构有:栈、队列、数组、链表和红⿊树。我们分别来了解⼀下:栈栈:原创 2021-07-28 23:31:31 · 505 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之升级版API一(Collection、泛型)
Collection、泛型1 Collection集合1.1 集合概述1.2 集合框架1.3 Collection 常⽤功能2 Iterator迭代器2.1 Iterator接⼝2.2 迭代器的实现原理2.3 增强for练习1:遍历数组练习2:遍历集合3 泛型3.1 泛型概述1 Collection集合1.1 集合概述在前⾯基础我们已经学习过并使⽤过集合 ArrayList ,那么集合到底是什么呢?集合:集合是java中提供的⼀种容器,可以⽤来存储多个数据。集合和数组既然都是容器,它们有啥区别原创 2021-07-26 17:11:30 · 464 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之常⽤API[⼆]以及Object类
Object类、常⽤API[⼆]1 Object类1.1 概述1.2 toString⽅法⽅法摘要覆盖重写1.3 equals⽅法⽅法摘要默认地址⽐较对象内容⽐较1.4 Objects类2 ⽇期时间类2.1 Date类概述常⽤⽅法2.2 DateFormat类构造⽅法格式规则常⽤⽅法format⽅法parse⽅法2.3 Calendar类概念获取⽅式常⽤⽅法get/set⽅法add⽅法getTime⽅法3 再谈String类3.1 常⽤API(补充)3.2 正则表达式字符集合数量词分组“()”边界匹配 "^原创 2021-07-25 22:21:46 · 160 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之面向对象四(多态、final、权限、内部类)
多态、final、权限、内部类1 多态1.1 概述引⼊定义1.2 多态的实现1.3 多态的好处1.4 引⽤类型转换向上转型向下转型为什么要转型转型的异常2 final关键字2.1概述2.2 使⽤⽅式修饰类修饰⽅法修饰变量3 权限修饰符3.1概述3.2 不同权限的访问能⼒4 内部类4.1 概述什么是内部类成员内部类访问特点4.2 匿名内部类【重点】前提格式使⽤⽅式5 引⽤类型⽤法总结5.1 class作为成员变量5.2 interface作为成员变量1 多态1.1 概述引⼊多态是继封装、继承之后,⾯向原创 2021-07-24 22:13:02 · 140 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之面向对象三(继承、super、this、抽象类、接⼝)
继承、super、this、抽象类、接⼝1 继承1.1 概述定义好处1.2 继承的格式1.3 继承后的特点 -- 成员变量成员变量不重名成员变量重名1.4 继承后的特点 -- 成员⽅法成员⽅法不重名成员⽅法重名 -- 重写(Override)重写的应⽤注意事项1.5 继承后的特点 -- 构造方法1.6 super 和 this⽗类空间优先于⼦类对象产⽣super和this的含义super和this的⽤法1.7 继承的特点2 抽象类2.1 概述由来定义2.2 abstract使⽤格式抽象⽅法抽象类抽象的使⽤2原创 2021-07-24 15:43:29 · 908 阅读 · 0 评论 -
Object 类的常见方法总结
Object 类是一个特殊的类,是所有类的父类。它主要提供了以下 11 个方法:public final native Class<?> getClass()//native方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写。public native int hashCode() //native方法,用于返回对象的哈希码,主要使用在哈希表中,比如JDK中的HashMap。public boolean equals(Object obj)//用于转载 2021-07-23 13:52:05 · 94 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之面向对象二(static关键字)以及常用API[一]
常用API[一]、static关键字1 API概述JDK包结构API使⽤步骤2 Scanner类2.1 什么是Scanner类2.2 引⽤类型使⽤步骤导包创建对象调⽤⽅法2.3 Scanner使⽤步骤查看类查看构造⽅法查看成员⽅法2.5 匿名对象概念应⽤场景3 Random类3.1 什么是Random类3.2 Random使⽤步骤查看类查看构造⽅法查看成员⽅法4 String类4.1 String类概述概述特点4.2 使⽤步骤1 API概述API(Application Programming Int原创 2021-07-20 20:27:56 · 971 阅读 · 1 评论 -
标识符与关键字
在我们敲java代码的时候的时候,需要大量地为程序、类、变量、方法等取名字,于是就有了标识符,简单来说,标识符就是一个名字。但是有一些标识符,Java 语言已经赋予了其特殊的含义,只能用于特定的地方场合,这种特殊的标识符就是关键字。因此,关键字是被赋予特殊含义的标识符。比如,在我们的日常生活中 ,“警察局”这个名字已经被赋予了特殊的含义,所以如果你开一家店,店的名字不能叫“警察局”,“警察局”就是我们日常生活中的关键字。Java 中常见的关键字...转载 2021-07-19 21:57:55 · 145 阅读 · 0 评论 -
浅谈JVM、JDK以及JRE
JVMJava 虚拟机(JVM- Java Virtual Machine)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。那么什么是字节码?采用字节码的好处是什么?在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释转载 2021-07-19 20:55:43 · 101 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之面向对象一(类与对象、封装、构造方法)
1 ⾯向对象思想1.1 ⾯向对象思想概述概述Java语⾔是⼀种⾯向对象的程序设计语⾔,⽽⾯向对象思想是⼀种程序设计思想,我们在⾯向对象思想的指引下,使⽤Java语⾔去设计、开发计算机程序。这⾥的对象泛指现实中⼀切事物,每种事物都具备⾃⼰的属性和⾏为。⾯向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、⾏为特征抽象出来,描述成计算机事件的设计思想。它区别于⾯向过程思想,强调的是通过调⽤对象的⾏为来实现功能,⽽不是⾃⼰⼀步⼀步的去操作实现。特点⾯向对象思想是⼀种更符合我原创 2021-07-18 22:41:35 · 372 阅读 · 0 评论 -
关于java中向上造型访问成员变量和成员方法的一些细节
public class TestFoo{ public static void main(String[] args) { Fo f = new Bar(); f.addFive(); System.out.println(f.a); //f.print(); //System.out.println(f.b); //System.out.println(f.getA()); }}class原创 2021-07-18 16:46:48 · 259 阅读 · 0 评论 -
Java系统排序
5 Java系统排序JDK 提供的排序方法 Arrays.sort(array)的效率要比前两篇文章所写的选择排序、冒泡排序等效率高。在做比较之前,先介绍一个方法 System.currentTimeMillis(),通过该方法可以得到格林威治时间自 1970 年 1 月 1 日凌晨 00:00:00 到当前系统时间的毫秒数(返回值为 long 类型)。 long time = System.currentTimeMillis(); System.out.println原创 2021-07-17 11:40:51 · 135 阅读 · 0 评论 -
数组排序(插入排序)
4 插入排序在开始学习插入排序之前,让我们先对 for 循环做个补充:如下是关于 for 循环结束时,i 的取值的演示代码 int i; for (i = 5; i >= 0; i--) { System.out.print(i); } System.out.println("\nfor循环结束时i=" + i); System.out.println("-----------------")原创 2021-07-17 10:35:11 · 1121 阅读 · 0 评论 -
数组排序(冒泡排序)
3 冒泡排序3.1 冒泡排序原理如果上篇文章的选择排序对于升序来讲是每次先排好较小的元素,那么本篇文章所讲的冒泡排序或许可以称之为每次先排好较大的元素。那么顾名思义,“冒泡”可以理解为在排序过程中(升序)总有一个比周围大的元素在从前往后不断蹦哒,不断地和后面比他小的元素交换位置,好比鱼在水里边游边吐泡泡。或许我们可以看个例子加深理解: int[] arr = {7, 2, 3, 8, 1}; System.out.println("未排序数组:" + Arrays原创 2021-07-17 00:47:05 · 123 阅读 · 0 评论 -
数组排序(选择排序)
1 数组排序排序是对数组施加的最常用的算法;所谓排序,是指将数组元素按照从小到大或从大到小的顺序重新排列;对于元素较多的数组,排序算法的优劣至关重要;一般情况下,通过排序过程中数组元素的交换次数来衡量排序算法的优劣;常用的排序算法有:插入排序、冒泡排序、选择排序等。2 选择排序2.1 选择排序原理(1)将数组中除第一个的其他后位元素陆续与第一个元素比较,如果该元素小于第一个元素,则对这两个元素进行交换循环上述规则,直至找出最小元素,放于数组中第一个位置(即索引0处)(2)将数组中除原创 2021-07-16 18:24:05 · 2618 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之基础语法三(续数组)
JavaSE个人复习式整理知识点之基础语法三(续数组)4 数组的常⻅操作4.1 数组越界异常 int[] array = new int[]{1, 2, 3}; System.out.println(array[3]);注: 创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运⾏后,将会抛出ArrayIndexOutOfBoundsException数组越界异常。4.2 数组空指针异常注: arr = nu原创 2021-07-15 22:24:50 · 81 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之基础语法三(方法、数组)
方法⽅法概述:就是将⼀个功能抽取出来,把代码单独定义在⼀个⼤括号内,形成⼀个单独的功能。当我们需要这个功能的时候,就可以去调⽤。这样即实现了代码的复⽤性,也解决了代码冗余的现象。 定义格式:修饰符 返回值类型 ⽅法名(参数列表) { // 代码省略... return 结果; } 示例:public static void main(String[] args) { int i = 3;...原创 2021-07-13 23:02:44 · 112 阅读 · 0 评论 -
Java课程笔记三(待整理)
Throwable -> Exception1.已检查异常 Exception 必须要处理的2.未检查异常 RuntimeException 程序失误 也叫运行时异常 ClassCastException, ConcurrentModificationException, IndexOutOfBoundsException, NullPointerException3.处理异常 自行处理 : try - catch 1.try-cat...原创 2021-07-12 20:32:11 · 62 阅读 · 0 评论 -
Java课程笔记二(待整理)
常用API:String类:字符串1.创建方式 a.直接赋值创建 b.构造方法创建2.特点: a.字符串就是字符数组包装成的对象,本质就是字符数组 b.String是final修饰的类,是不可被继承的 c.字符串一旦创建就不可修改,属于不可变的字符序列 d.String重写了toString(),equals(),hashCode()3.常量池: 1)常量池中放的都是常量(字面量/直接量)4.编码问题: 字符编码成为字节,字节解码成...原创 2021-07-12 20:29:22 · 63 阅读 · 0 评论 -
Java课程笔记一(待整理)
Collection 接口 1.创建->是一个接口 不能new自己,只能new接口的实现累 2.常用API 1)普通常用 add() - 添加 remove() - 删除 clear() - 清空 isEmpty() - 判断是否为空 contains() - 判断是否包含指定元素 size() - 集合长度Iterable ...原创 2021-07-12 20:28:12 · 84 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之基础语法二
4.逻辑控制语句 判断语句1--if:if(关系表达式){ 语句体;}执⾏流程:⾸先判断关系表达式看其结果是true还是false 如果是true就执⾏语句体如果是false就不执⾏语句体示例 :...原创 2021-07-12 20:22:18 · 116 阅读 · 0 评论 -
JavaSE个人复习式整理知识点之基础语法一
1.基础语法1.变量常量是固定不变的数据,那么在程序中可以变化的量称为变量。变量包括变量的声明及初始化。数据类型 变量名称;//创建了一个变量变量名称 = 数据值;//赋值,将右边的数据值赋予左边的变量此外也可以将二者合并为一条语句: 数据类型 变量名称 = 数据值;//在创建一个变量的同时,立刻放入数据值2.数据类型 数据类型分类Java的数据类型分为两大类: 基本数据类型:整型、浮点型、字符类型、布尔类型。 ...原创 2021-07-11 19:38:58 · 176 阅读 · 1 评论