![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 78
hellosc01
喂,你知道吗,有时候,自由意志就是你能主动选择最小概率的路。
展开
-
BigDecimal详解及注意事项
BigDecimal详解原创 2022-12-29 13:31:45 · 1387 阅读 · 0 评论 -
Java Stream类常见用法
Java Stream类常见用法原创 2022-08-31 12:05:21 · 2947 阅读 · 0 评论 -
Java内部类
目录0 简介1 成员内部类2 局部内部类3 匿名内部类4 静态内部类5 内部类的优点6 局部内部类和匿名内部类访问局部变量时,为什么变量必须加上final?0 简介Java内部类包括四种:成员内部类、局部内部类、匿名内部类和静态内部类。1 成员内部类成员内部类位于另一个类的内部,其可以无条件访问外部类的所有成员属性和成员方法(包括private成员和static成员)。class Outer { private double a = 0; public static int b原创 2021-12-10 19:54:34 · 356 阅读 · 0 评论 -
为什么有了synchronized,还需要volatile?
目录1 简述2 sychronized的问题3 volatile的附加功能1 简述Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurrent包等;2 sychronized的问题3 volatile的附加功能...原创 2021-06-22 14:13:49 · 2224 阅读 · 0 评论 -
volatile关键字详解
1 简介Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurrent包等;2 volatile的用法volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量,无法修饰方法及代码块;volatile的用法比较简单,只需要在声明一个可能被多线程同时访原创 2021-06-22 09:13:05 · 249 阅读 · 0 评论 -
synchronized关键字详解
目录1 简介2 synchronized的用法3 synchronized的实现原理4 synchronized与原子性5 synchronized与可见性6 synchronized与有序性1 简介Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurrent包等;synchronized关键字在需要原子性、可见性和有序性这三种特性的时候都可以作为其中一种解决方案,看起来是“万能”原创 2021-06-21 19:55:59 · 154 阅读 · 0 评论 -
位运算中<<、>>、>>>的区别
<< 表示左移,不分正负数,低位补0;>> 表示右移,若该数为正,高位补0;若该数为负,高位补1;>>> 表示无符号右移,也称逻辑右移,不分正负数,高位补0;原创 2020-11-26 11:26:46 · 590 阅读 · 0 评论 -
Java字符串和数字/日期相互转换
目录1 数字转换成字符串2 字符串转换成数字1 数字转换成字符串String s = String.valueOf(a);String s = Integer.toString(a);String s = a + “”;注:其他数据类型类似。2 字符串转换成数字转整型:int i = Integer.parseInt(s);转浮点型:double d = Double.parseDouble(s);注:其他数据类型类似。...原创 2021-05-25 17:50:09 · 1539 阅读 · 0 评论 -
Java中List和Array互相转换
目录1 List to Array1.1 toArray()方法,可以转为Object型Array,有弊端1.2 更推荐toArray(new 指定Array类型{})方法1.3 List转基本类型Array只能先定义Array再循环赋值2 Array to List2.1 Arrays.asList(array),有弊端2.2 推荐结合ArrayList/LinkedList的构造方法:new ArrayList<>(Arrays.asList(array))2.3 还可以运用Collecti原创 2021-04-11 12:09:50 · 3902 阅读 · 0 评论 -
Java中的锁
0 概述Java中的锁主要用于保障多并发线程情况下数据的一致性;在多线程编程中为了保障数据的一致性,通常需要在使用对象或方法前加锁,这时如果有另一个线程也需要使用该对象或方法,就会进入阻塞队列,等待锁释放后,该线程才有机会再次获取锁进行操作;如此就保障了在同一时刻只有一个线程持有对象的锁并修改对象,从而保障了数据的安全;1 乐观锁与悲观锁乐观锁以乐观的思想处理数据,在读数据时认为别人不会修改该数据,所以不会上锁;在写数据时会判断在此期间有没有其他人更新该数据,如果没有更新,则加锁并执行写操作原创 2021-03-24 15:39:03 · 138 阅读 · 0 评论 -
LinkedHashMap、WeakHashMap和ConcurrentHashMap
目录1 LinkedHashMap1.1 存储结构1.2 afterNodeAccess()1.3 afterNodeInsertion()1.4 LRU 缓存2 WeakHashMap2.1 存储结构2.2 ConcurrentCache3 ConcurrentHashMap3.1 存储结构3.2 size 操作3.31 LinkedHashMap1.1 存储结构继承自 HashMap,因此具有和 HashMap 一样的快速查找特性;public class LinkedHashMap<原创 2021-03-17 10:48:47 · 488 阅读 · 0 评论 -
HashMap和HashSet的区别
1 概述HashMapHashSet实现了Map接口实现了Set接口存储键值对存储对象调用put()添加元素调用add()添加元素使用键(Key)计算hashcode使用成员对象计算hashcode,如果两对象hashcode相同,则调用equals()来判断对象的内容是否相同,如果内容相同,返回true,否则falseHashMap较HashSet快HashSet较HashMap慢2 为什么说HashMap比HashSet快?HashMap原创 2021-03-16 15:24:34 · 305 阅读 · 0 评论 -
HashMap底层原理解析
1 存储结构内部包含了一个 Entry 类型的数组 table。transient Entry[] table;Entry包含四个字段,分别是键(K)、值(V)、键的哈希值(hash),以及下一个结点的引用(next);static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node原创 2021-03-16 14:43:22 · 93 阅读 · 0 评论 -
Java中浅克隆和深克隆之异同
1 概述浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址;深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址;异同点:深浅克隆都会在堆中新分配一块区域;区别在于对象属性引用的对象是否需要进行克隆(递归性的)。示例pos:当前对象的地址;son:son属性所指向的地址;name:对象的name属性。...原创 2021-02-27 16:10:22 · 1096 阅读 · 1 评论 -
Java构造方法详述
目录1 作用和特点1.1 作用1.2 特点2 注意事项3 加载机制4 案例4.1 隐式/显式调用父类无参构造4.2 显式调用父类有参构造4.3 父类有有参构造,无无参构造1 作用和特点1.1 作用给对象中的成员进行初始化。1.2 特点方法名与类名相同;没有返回值类型,连void都没有;2 注意事项如果没有给出构造方法,系统将自动提供一个无参构造方法;如果给出了构造方法,系统将不再提供默认的无参构造方法,这时如果还想使用无参构造方法,就必须自己给出,建议永远给出无参构造方法;因为当父原创 2021-02-23 13:55:13 · 88 阅读 · 1 评论 -
Java基本类型、包装类型及缓存池(常量池)
1 8种基本类型四类八种位数数据表示范围整型byte8整型short8整型int8整型long8浮点型float8浮点型double8字符型char8布尔型boolean1原创 2020-12-15 18:05:30 · 940 阅读 · 1 评论 -
Java笔记:注解
1 注解概述Annontation 是 Java5 开始引入的新特征,中文名称叫注解;注解是插入到代码中的一种注释或者说是一种元数据;这些注解信息可以在编译期使用编译工具进行处理,也可以在运行期使用 Java 反射机制进行处理;2 注解的用处生成文档。这是最常见的,也是java 最早提供的注解。常用的有@param @return 等;跟踪代码依赖性,实现替代配置文件功能。如Spring中@Autowired;在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆原创 2020-12-11 17:21:32 · 209 阅读 · 0 评论 -
Java笔记:泛型、限定通配符与非限定通配符
1 泛型在集合中存储对象并在使用前进行类型转换是多么的不方便。泛型防止了那种情况的发生。 它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。不使用泛型/** * 这样做的一个不好的是Box里面现在只能装入String类型的元素,今后如果我们需要装入Integer等其他类型的元素, * 还必须要另外重写一个Box,代码得不到复用,使用泛型可以很好的解决这个问题。 */public class Box { priva原创 2020-12-10 17:00:01 · 1487 阅读 · 0 评论 -
Java与C++的区别、JRE与JDK的区别(清晰简洁)
目录1 Java与C++2 JRE 与 JDK1 Java与C++Java是纯粹面向对象语言,所有对象继承自java.lang.Object,C++为了兼容C既支持面向对象也支持面向过程;Java通过虚拟机实现跨平台特性,C++依赖于特定平台;Java没有指针,它的引用可以理解为安全指针,而C++具有和C一样的指针;Java支持自动垃圾回收,C++需要手动回收;Java不支持多重继承,只能通过实现多个接口来达到相同目的,C++支持多重继承;Java不支持操作符重载,虽然可以对两个String原创 2020-11-23 10:23:14 · 397 阅读 · 0 评论 -
Java容器概览(Collection和Map)
1 概述容器主要包括Collection和Map两种,Collection是存储对象的集合,Map是存储键值对(两个对象)的映射表。2 Collection2.1 ListArrayList:基于动态数组实现,支持随机访问;Vector:和ArrayList类似,但它是线程安全的;LinkedList:基于双向链表实现,只能顺序访问,但可以快速地链表中插入和删除元素。不仅如此,LinkedList还可以用作栈、队列和双向队列;2.2 SetTreeSet:基于红黑树实现,支持有序性操原创 2020-11-22 14:49:26 · 190 阅读 · 0 评论 -
Java优先队列/堆(PriorityQueue)中3种重写compare的方法
1 创建类2 匿名内部类3 lambda表达式原创 2020-11-21 12:43:29 · 3496 阅读 · 0 评论 -
Java实例化对象时的初始化顺序
目录1 无继承2 有继承1 无继承静态变量和静态语句块优先于实例变量和普通语句块;静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序,实例变量和普通语句块同样如此;// 静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序public static String staticField = "静态变量";static { System.out.println("静态语句块");}public String field = "实例变量";{ System.原创 2020-11-18 17:44:55 · 165 阅读 · 0 评论 -
Java接口(interface)与抽象类(abstract class)之异同
1 相同点都不能被实例化;接口的实现类和抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化;都不一定包含抽象方法;抽象方法没有方法体,以;结尾。2 不同点实现接口的关键字为implements,继承抽象类的关键字为extends,一个类可以实现多个接口,但一个类只能继承一个抽象类。所以使用接口可以间接实现多继承;接口强调特定功能的实现(has-a),而抽象类强调所属关系(is-a);接口成员变量默认被public static final修饰,必须赋初值,不能被修改;抽象类中成原创 2020-11-15 16:04:41 · 141 阅读 · 0 评论 -
Project——Module——Package
原创 2020-11-14 16:33:22 · 280 阅读 · 0 评论 -
Java类加载/类初始化、Java反射概念详解及代码演示
1类加载器1.1 类的加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化三步来实现对这个类进行初始化。加载:将class文件读入内存,并为之创建一个Class对象。连接1 验证:是否有正确的内部结构,并和其他类协调一致2 准备: 负责为类的静态成员分配内存,并设置默认初始化值3 解析 :将类的二进制数据中的符号引用替换为直接引用初始化new 对象简单的说就是:把.class文件加载到内存里,并把这个.class文件封装成一个Class类型的对象。原创 2020-11-14 16:24:49 · 221 阅读 · 0 评论 -
Java实现TCP通信程序
TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server)。两端通信时步骤:服务端程序先启动,等待客户端的连接。客户端请求连接服务端,连接成功才能通信。服务端不可以主动连接客户端。在Java中,提供了两个类用于实现TCP通信程序:服务端:java.net.ServerSocket 类。创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接。客户端:java.net.Socket 类。创建Socket对象,向服务端发出连原创 2020-11-07 10:23:05 · 2806 阅读 · 0 评论 -
hash与hashcode详解
1. hash是一种函数,一般翻译为散列,是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是hashcode(散列值/哈希码); 2. 这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值; 3. 简单地说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。原创 2020-11-04 11:17:02 · 3884 阅读 · 1 评论 -
简述Java打印流
目录1 概述2 PrintStream类2.1 构造方法2.2 改变打印流向1 概述平时我们在控制台打印输出,是调用print方法和println方法完成的,这两个方法都来自于java.io.PrintStream类,该类能够方便地打印各种数据类型的值,是一种便捷的输出方式。2 PrintStream类2.1 构造方法public PrintStream(String fileName): 使用指定的文件名创建一个新的打印流。构造举例,代码如下:PrintStream ps = new P原创 2020-11-02 15:38:51 · 131 阅读 · 0 评论 -
Java笔记:序列化、反序列化、ObjectOutputStream类、ObjectInputStream类
目录1 概述2 ObjectOutputStream类2.1 构造方法2.2 序列化条件2.3 写出对象方法3 ObjectInputStream类3.1 构造方法3.2 读入对象方法3.3 反序列化异常及处理4 练习:序列化集合4.1 案例分析4.2 案例实现1 概述Java 提供了一种对象序列化的机制。用一个字节序列可以表示一个对象,该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息。字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息。反之,该字节序列还可以从文件中读取回来,原创 2020-11-02 10:08:26 · 267 阅读 · 0 评论 -
Java笔记:字符编码、字符集、InputStreamReader类以及OutputStreamWriter类详解
目录1 字符编码和字符集1.1 字符编码1.2 字符集1.2.1 ASCII字符集1.2.2 ISO-8859-1字符集1.2.3 GBxxx字符集1.2.4 Unicode字符集2 编码引出的问题3 InputStreamReader类(字节流到字符流的桥梁)3.1 构造方法3.2 指定编码读取4 OutputStreamWriter类(字符流到字节流的桥梁)4.1 构造方法4.2 指定编码写出4.3 转换流理解图解5 练习:转换文件编码5.1 案例分析5.2 案例实现1 字符编码和字符集1.1 字符原创 2020-10-31 22:27:38 · 783 阅读 · 0 评论 -
Java缓冲流介绍、实现及应用
缓冲流,也叫高效流,是对4个基本的FileXxx 流的增强,所以也是4个流,按照数据类型分类:字节缓冲流:BufferedInputStream,BufferedOutputStream字符缓冲流:BufferedReader,BufferedWriter缓冲流的基本原理,是在创建流对象时,会创建一个内置的默认大小的缓冲区数组,通过缓冲区读写,减少系统IO次数,从而提高读写的效率。原创 2020-10-31 09:05:08 · 591 阅读 · 0 评论 -
Java笔记:字符流Reader/Writer详解
目录0 为什么使用字符流1 字符输入流Reader1.1 FileReader类1.1.1 创建输入流对象1.1.2 读入字符数据2 字符输出流Writer2.1 FileWriter类2.1.1 创建输出流对象2.1.2 写出字符数据关闭和刷新写出其他数据0 为什么使用字符流当使用字节流读取文本文件时,可能会有一个小问题。就是当遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供了字符流类,以字符为单位读写数据,专门用于处理文本文件。1 字符输入流Re原创 2020-10-27 21:46:56 · 2042 阅读 · 0 评论 -
Java笔记:字节流InputStream/OutputStream详解
目录1 一切皆为字节2 字节输出流OutputStream2.1 FileOutputStream类2.1.1 创建输出流对象2.1.2 写出字节数据2.1.3 数据追加续写2.1.4 写出换行3 字节输入流【InputStream】2.5 FileInputStream类构造方法读取字节数据4 字节流练习:图片复制复制原理图解案例实现1 一切皆为字节一切文件数据(文本、图片、视频等)在存储时,都是以二进制的形式保存,都是一个个字节;传输时同样如此;因此,字节流可以传输任意类型文件数据;在操作流原创 2020-10-26 21:38:57 · 1413 阅读 · 0 评论 -
简述Java中的Deque<E>(双端队列)接口
目录1 定义2 特性3 常用方法3 栈操作4 队列操作5 两个主要实现类1 定义Interface Deque<E>:支持两端元素插入和移除的线性集合。2 特性既具有队列FIFO(先进先出)特点又具有栈LIFO(后进先出)特点,既是队列又是栈。3 常用方法public void addFirst(E e):向队头插入元素public void addLast(E e):向队尾插入元素public E removeFirst():检索并移除队头元素public E remove原创 2020-10-25 21:29:42 · 326 阅读 · 0 评论 -
Java笔记:IO及IO的分类
1 IO概述2 IO分类2.1 根据数据流向2.2 根据数据类型3 IO的流向说明图解4 顶级父类们1 IO概述I: input输入流,读取数据,流向内存O: output输出流,写出数据,流出内存Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。2 IO分类2.1 根据数据流向根据数据的流向分为:输入流和输出流。输入流 :把数据从其他设备上读取到内存中的流。输出流 :把数据从内存 中写出到其他设备上的流。2.2 根据数据类型根据数据的类型分为原创 2020-10-24 21:01:42 · 208 阅读 · 0 评论 -
详述Java中的File类:文件和目录的创建、查找和删除
1 概述2 构造方法3 常用方法3.1 获取方法3.2 判断方法3.3 创建、删除方法3.4 遍历方法1 概述java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。2 构造方法public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实原创 2020-10-20 20:32:24 · 551 阅读 · 0 评论 -
Java笔记:Comparator接口以及Comparator和Comparable两个接口的区别
1 Comparator接口1.1 Comparable的局限1.2 Comparator的引入2 Comparator和Comparable的区别2.1 概述2.2 举例2.2.1 Comparable方式2.2.2 Comparator方式1 Comparator接口1.1 Comparable的局限举例说明:public class CollectionsDemo { public static void main(String[] args) { Ar原创 2020-10-19 15:22:20 · 152 阅读 · 0 评论 -
Array与Arrays和Collection与Collections的区别
目录1 Array2 Arrays3 Collection4 Collections1 Array数组类,Java最基本的一种存储结构;提供动态创建和访问数组元素的方法;元素类型必须相同;容量固定且无法动态改变;无法判断实际存储多少元素,length只是告诉我们Array的容量。2 Arrays数组操作类、静态类,专门用来操作Array;提供了搜索、排序、复制等静态方法。3 Collection各种集合的父接口;继承接口的主要有List和Set。4 Collection原创 2020-10-19 13:54:11 · 363 阅读 · 0 评论 -
Java笔记:Collections集合操作类和Arrays数组操作类
1 概述2 常用功能(方法)3 代码演示1 概述java.utils.Collections是集合工具类,用来对集合进行操作。2 常用功能(方法)public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素。public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。public static <T> void sort(List<T> list):将集合中原创 2020-10-19 11:34:57 · 233 阅读 · 1 评论 -
java中常见内存占用:基本类型、引用类型、对象、数组
1 基本数据类型数据类型占用字节数byte1boolean1char2short2int4float4long8double82 引用一个引用(机器地址)占8个字节。例如:Date date = new Date();则date这个变量占8个字节的内存。3 对象创建一个对象,如new Date(),除了Date对象内部存储的数据(年月日等信息)占用内存,该对象本身也有内存开销,为16个字节,用来保存对象的头信息。原创 2020-10-18 22:03:18 · 1136 阅读 · 0 评论