Java 基础
文章平均质量分 85
Java 基础
低吟不作语
这是最坏的时代,也是最好的时代
展开
-
Java IO 流详解
流是一个抽象的概念,代表了数据的无结构化传递。流的本质是数据在不同设备之间的传输。在 Java 中,数据的读取和写入都是以流的方式进行的在 Java 中,根据数据流向的不同,可以将流分为输入(Input)流和输出(Output)流。根据单位的不同,可以将流分为字节流和字符流。根据等级的不同,可以将流分为节点流和处理流。原创 2024-08-10 19:21:20 · 940 阅读 · 0 评论 -
Java HashMap 详解
HashMap 由数组和链表实现对数据的存储,HashMap 里面实现一个静态内部类 Entry,包含 Key、Value 和对 key 的 hashcode 值进行 hash 运算后得到的 Hash 值,它还具有 Next 指针,可以连接下一个 Entry 实体,以此来解决 Hash 冲突的问题。因为 1.7 扩容时,元素会被重新移动到新的数组,而使用头插法会使链表发生反转,比如原本是 A-B-C 的链表,扩容之后就变成 C-B-A 了,在多线程环境下,会导致链表成环的问题。先判断是否需要扩容,再插入。原创 2024-02-29 14:56:34 · 660 阅读 · 0 评论 -
Java 四种引用类型(强引用、软引用、弱引用、虚引用)
/ person 就是指向 Person 实例“张三”的引用Person person = new Person("张三");在 JDK1.2 以前,Java 里的引用是很传统的定义:如果 reference 类型的数据中存储的数值代表的是另外一块内存的起始地址,就称该 reference 数据是代表某块内存、某个对象的引用。原创 2023-11-15 15:15:47 · 290 阅读 · 0 评论 -
Java 注解详解
本文部分摘自 On Java 8基本语法注解是 Java 5 所引入的众多语言变化之一,是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用,包含在 java.lang.annotation 包中注解的语法十分简单,只要在现有语法中添加 @ 符号即可,java.lang 包提供了如下五种注解:@Override表示当前的方法定义将覆盖基类的方法,如果你不小心把方法签名拼错了,编译器就会发出错误..原创 2020-11-26 13:56:55 · 234 阅读 · 0 评论 -
Java 枚举 enum 详解
本文部分摘自 On Java 8枚举类型Java5 中添加了一个 enum 关键字,通过 enum 关键字,我们可以将一组拥有具名的值的有限集合创建为一种新的类型,这些具名的值可以作为常规的程序组件使用,例如:public enum Spiciness { NOT, MILD, MEDIUM, HOT, FLAMING}这里创建了一个名为 Spiciness 的枚举类型,它有 5 个值。由于枚举类型的实例是常量,因此按照命名惯例,它们都用大写字母表示(如果名称中含有多个单词,使..原创 2020-11-25 12:11:53 · 1110 阅读 · 0 评论 -
Java 泛型详解
本文部分摘自 On Java 8概述在 Java5 以前,普通的类和方法只能使用特定的类型:基本数据类型或类类型,如果编写的代码需要应用于多种类型,这种严苛的限制对代码的束缚就会很大Java5 的一个重大变化就是引入泛型,泛型实现了参数化类型,使得你编写的组件(通常是集合)可以适用于多种类型。泛型的初衷是通过解耦类或方法与所使用的类型之间的约束,使得类或方法具备最宽泛的表达力。然而很快你就会发现,Java 中的泛型并没有你想的那么完美,甚至存在一些令人迷惑的实现泛型类促成泛型出现的最主要..原创 2020-11-22 15:52:02 · 308 阅读 · 1 评论 -
Java 类型信息详解和反射机制
本文部分摘自 On Java 8RTTIRTTI(RunTime Type Information)运行时类型信息,能够在程序运行时发现和使用类型信息,把我们从只能在编译期知晓类型信息并操作的局限中解脱出来传统的多态机制正是 RTTI 的基本使用:假设有一个基类 Shape 和它的三个子类 Circle、Square、Triangle,现在要把 Circle、Square、Triangle 对象放入 List<Shape> 中,在运行时,先把放入其中的所有对象都当作 Object ..原创 2020-11-18 14:32:01 · 189 阅读 · 0 评论 -
Java7 新特性 —— java.nio.file 文件操作
本文部分摘自 On Java 8自 Java7 开始,Java 终于简化了文件读写的基本操作,新增了 java.nio.file 库,通过与 Java8 新增的 stream 结合可以使得文件操作变得更加优雅文件和目录路径java.nio.file.Paths 类包含一个重载方法 static.get(),可以接受一系列 String 字符串或一个统一资源标识符 URI 作为参数,并且转换返回一个 Paths 对象。使用 Paths 对象可以很轻松地生成路径的某一部分:Path path1..原创 2020-11-17 15:17:50 · 1767 阅读 · 0 评论 -
Java8 新特性 —— Stream 流式编程
本文部分摘自 On Java 8流概述集合优化了对象的存储,大多数情况下,我们将对象存储在集合是为了处理他们。使用流可以帮助我们处理对象,无需迭代集合中的元素,即可直接提取和操作元素,并添加了很多便利的操作,例如查找、过滤、分组、排序等一系列操作。流的一个核心好处是:它使得程序更加短小并且易于理解,当结合 Lambda 表达式和方法引用时,会让人感觉自成一体。总而言之,流就是一种高效且易于使用的处理数据的方式。观察下面的例子:public class Randoms { ..原创 2020-11-14 18:47:11 · 4468 阅读 · 2 评论 -
Java8 新特性 —— 函数式编程
本文部分摘录自 On Java 8概述通常,传递给方法的数据不同,结果也不同。同样的,如果我们希望方法被调用时的行为不同,该怎么做呢?结论是:只要能将代码传递给方法,那么就可以控制方法的行为。说得再具体点,过去我们总是创建包含所需行为的对象,然后将对象传递给想要控制的方法,一般使用匿名内部类来实现。假设现在有这么一个需求:有一个员工信息列表,根据年龄过滤出符合条件的员工信息// 过滤出大于35岁的员工public List<Employee> filterEmployee(Li..原创 2020-11-13 13:48:11 · 218 阅读 · 0 评论 -
Java 内部类详解
内部类一个定义在另一个类中的类,叫作内部类1. 概述内部类允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可见性,这么看来,内部类就像是一种代码隐藏机制:将类置于其他类的内部,从而隐藏名字与组织代码的模式。2. 创建内部类创建内部类的方式就如同你想的一样,把类的定义置于外部类里面public class Outer { // 其他一些成员声明 ... public class Inner { // 其他一些成员声明 .原创 2020-10-25 00:26:54 · 332 阅读 · 0 评论 -
Java Comparable 和 Comparator 接口详解
本文基于 JDK8 分析ComparableComparable 接口位于 java.lang 包下,Comparable 接口下有一个 compareTo 方法,称为自然比较方法。一个类只要实现了这个接口,意味着该类支持自然排序所谓自然排序,就是按默认规则组成的排序,例如 1234 就是自然排序,因为 2 就是比 1 大,这是默认规定的。类比到 Comparable,我们在 compareTo 中定义自己需要的默认比较规则,以后如果用到 Collections.sort 和 Arrays.s..原创 2020-09-25 14:23:08 · 880 阅读 · 0 评论 -
Java Set 常用集合 HashSet、LinkedHashSet、TreeSet
Java 中的 Set 是非常常用的数据类型。Set 是无序的 Collection,Java Set 有三个常用的实现类,分别是:HashSet、LinkedHashSet、TreeSet本文基于 JDK8 分析HashSetHashSet 继承自 AbstractSet,实现了 Set 接口。底层基于 HashMap 实现,是一个不允许有重复元素的无序集合。允许 null 元素,非线程安全。HashSet 还实现了 Cloneable、Serializable 接口,所以 Has..原创 2020-09-24 19:25:23 · 551 阅读 · 0 评论 -
Java List 常用集合 ArrayList、LinkedList、Vector
Java 中的 List 是非常常用的数据类型。List 是有序的 Collection,Java List 一共有三个实现类,分别是:ArrayList、Vector、LinkedList本文分析基于 JDK8ArrayListArrayList 继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化,初始容量为 10,允许值为 null,有序,非线程安全,擅长随机访问ArrayList 还实现了 RandomAccess、Cloneable、..原创 2020-09-23 13:13:36 · 407 阅读 · 0 评论 -
Java 面向对象概述
本文部分摘自 On Java 8面向对象编程在提及面向对象时,不得不提到另一个概念:抽象。编程的最终目的是为了解决某个问题,问题的复杂度直接取决于抽象的类型和质量。早期的汇编语言通过对底层机器作轻微抽象,到后来的 C 语言又是对汇编语言的抽象。尽管如此,它们的抽象原理依然要求我们着重考虑计算机的底层结构,而非问题本身面向对象编程(Object-Oriented Programming OOP)是一种编程思维方式和编码架构。不同于传统的面向过程编程,面向对象编程把问题空间(实际要解决的问题)中的..原创 2020-12-24 17:02:50 · 157 阅读 · 3 评论