Java基础
文章平均质量分 92
此专栏,主要介绍 Java基础相关知识,将包含有 Java集合、Java并发、JavaIO、JVM、Java网络、Java新特性等内容。
栗筝i
海到无边天作岸,山登绝顶我为峰。期待更好的自己
展开
-
【Java 新特性系列】Java 8 Optional 类完全指南
Java 8 引入的Optional类,是一个可以包含或不包含非空值的容器对象。它的目的是为了提供一种更优雅的方式来处理可能为null的值,从而避免直接使用null值可能引发的。使用Optional类可以显著改善代码的可读性和健壮性。防止:使用Optional可以明确地要求用户在使用变量之前处理null情况;增强代码可读性:通过使用Optional的方法,代码的可读性和意图更加明确;Optional类型在 Java 8 的流(Stream)操作中被广泛使用,提供了更复杂的条件查询和变换功能。原创 2024-06-08 13:07:57 · 1797 阅读 · 28 评论 -
掌控数据流:深入解析 Java Stream 编程
Stream 流是 Java8 提供的新功能,它允许你以一种声明的方式处理数据集合(通过查询表达式)。它可以表达复杂的过滤、映射、归约等数据处理操作。简而言之,流不是数据结构,而是关于算法和计算的。它们可以让你重新思考数据处理的方式。Stream 流是对集合(Collection)对象功能的增强,与 Lambda 表达式结合,可以提高编程效率、简洁性和程序可读性。使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。原创 2024-06-07 08:48:50 · 3703 阅读 · 75 评论 -
告别冗长代码:Java Lambda 表达式如何简化你的编程
Java(SE)8 于 2014 年 3 月发布,引入了多个改进特性,其中 Lambda 表达式(Lambda expression,也可称为闭包(Closure))是最受欢迎的新特性之一。Lambda 表达式允允许把函数作为一个方法的参数,允许在方法中传递代码块,从而实现更加灵活的编程方式。Lambda 表达式可以简化代码,减少样板代码的出现,并且使代码更加易读和易于维护。Lambda 表达式允许我们通过表达式来代替功能接口。原创 2024-06-07 08:46:55 · 6647 阅读 · 141 评论 -
编码 5 分钟,命名 2 小时?Java 开发者都需要的一份终极命名规范指南!
简洁清爽的代码风格是大多数工程师的追求。在工作中,作者就常常因为起名字而纠结,夸张点可以说是编程 5 分钟,命名 2 小时,所以今天我总结了一份 Java 开发者都需要的一份终极命名规范指南!!每个公司都有不同的标准,目的是为了保持统一,减少沟通成本,提升团队研发效能。本文结合阿里巴巴开发规范及作者的工作经验,对 Java 领域的相关命名进行整理和总结,供大家参考。希望能为大家在命名时提供一些思路和指导。原创 2024-06-04 08:00:00 · 1929 阅读 · 118 评论 -
Java 面试题:String、StringBuffer、StringBuilder 有什么区别?
几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关工具如拼接类的使用,对写出高质量代码是非常有帮助的。关于这个问题,我前面的回答是一个通常的概要性回答,至少你要知道 String 是 Immutable 的,字符串操作不当可能会产生大量临时字符串,以及线程安全方面的区别。原创 2024-05-30 09:41:52 · 2580 阅读 · 57 评论 -
Java新特性:Optional类
Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。Optional 提供了很多方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。Java 8 引入 Optional 类,用来解决 NullPointerException。 Optional 代替 if…else 解决空指针问题,使代码更加简洁。原创 2023-07-19 10:00:00 · 3759 阅读 · 42 评论 -
关于Apache-Commons-Lang3中元组的使用
在日常工作中,有时候我们并不清楚有这些工具类的存在,造成在开发过程中重新实现导致时间浪费,且开发的代码质量不佳。而 apache 其实已经提供了系列的工具包给我们使用,只是大多数人,平时没有注意到。接下来我们从使用最多的 org.apache.commons.lang3 这个 jar 包开始,了解 apache 为我们提供了怎样的方便体验!原创 2023-07-12 14:00:00 · 1760 阅读 · 20 评论 -
Java新特性:Stream流式编程
Stream 流是 Java8 提供的新功能,是对集合对象功能的增强,能对集合对象进行各种非常便利、高效的聚合操作,或大批量数据操作。Stream 流以一种声明性方式处理数据集合,它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用fork/join并行方式来拆分任务和加速处理过程。Stream 流是从支持数据处理操作的源生成的元素序列,源可以是数组、文件、集合、函数。流不是集合元素,它不是数据结构并不保存数据,它的主要目的在于计算原创 2023-07-10 14:30:00 · 1994 阅读 · 40 评论 -
Java新特性:Lambda表达式
Lambda 表达式(Lambda expression),也可称为闭包(Closure),是 Java(SE)8 中一个重要的新特性。Lambda 表达式允许我们通过表达式来代替功能接口。Lambda 表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)Lambda 表达式可以看作是一个匿名函数,基于数学中的 λ 演算得名。原创 2023-07-09 14:25:43 · 2865 阅读 · 53 评论 -
JavaIO流:NIO梳理
NIO 也叫 Non-Blocking IO 是同步非阻塞的 IO 模型。线程发起 IO 请求后,立即返回。同步指的是必须等待 IO 缓冲区内的数据就绪,而非阻塞指的是,用户线程不原地等待 IO 缓冲区,可以先做一些其他操作,但是要定时轮询检查 IO 缓冲区数据是否就绪。本篇内容包括:Java NIO 介绍、Java NIO 核心组件、NIO 代码示例。原创 2022-11-25 10:36:19 · 2559 阅读 · 3 评论 -
JavaIO流:BIO梳理
BIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器)。本篇内容包括:Java BIO 介绍、Java BIO 工作机制、BIO 案例。原创 2022-11-24 20:59:12 · 2127 阅读 · 6 评论 -
JavaIO流:模型
IO 的字面意思是读/写数据,IO 模型是读/写数据的方式。常用到的读/写数据方式有:同步阻塞 IO、同步非阻塞 IO、IO 多路复用、信号驱动、异步 IO本篇内容包括:Java IO 与 IO 模型、五种 IO 模型、三种 Java IO 模型。原创 2022-11-24 11:00:45 · 2357 阅读 · 3 评论 -
JavaIO流:案例
java.io 包下需要掌握的流有 16 个,本篇内容包括:java.io包下需要掌握的流、Java IO 案例。原创 2022-11-23 17:18:18 · 1955 阅读 · 6 评论 -
JavaIO流:概述
在接触 IO 流前,无论是 变量的声明、数组的创建,又或者是复杂的并发设计还是 Jvm 的性能调优,我们更多的还是和内存打交道。但我们知道计算机组成包括运算器,控制器,存储器,输入设备,输出设备。也就是不仅仅只有内存和 CPU,所以程序设计语言必须要提供程序与外部设备交互的方式,这就是 IO 框架的由来。我们需要和外部设备进行数据的交互。本篇内容包括:关于 IO 流、关于 Java IO 流、Java IO 层次体系结构原创 2022-11-23 13:03:03 · 2501 阅读 · 6 评论 -
Zookeeper:实现“通知协调”的 Demo
应用配置集中到节点上,应用启动时主动获取,并在节点上注册一个 watcher,每次配置更新都会通知到应用。数据发布/订阅(Publish/Subscribe)系统,即所谓的配置中心,顾名思义就是发布者将数据发布到 ZooKeeper 的一个或一系列节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。本篇内容包括:Demo 概述、代码实现、测试结果原创 2022-11-21 17:06:06 · 2480 阅读 · 8 评论 -
JavaWeb:Servlet的应用及接口介绍
广义的 Servlet 泛指在服务器上运行的 Java 程序,但是这个 Java 程序,并不能独立运行(因为 Servlet 没有 main 方法),需要部署在相应的 Servlet 容器中,比如 Tomcat 和 Jetty。Servlet 主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。 本篇内容包括:Serlvet 相关概念、Servlet 的应用、*javax.servlet* 包下主要的类和接口 以及 *javax.servlet.http* 包下主要的类和接口原创 2022-11-18 17:48:58 · 2751 阅读 · 4 评论 -
JavaWeb:JavaWeb技术架构演进
Java Web,是用 Java 技术来解决相关web互联网领域的技术栈。web 包括:web 服务端和 web 客户端两部分。Java 在客户端的应用有 Java Applet,不过使用得很少,Java 在服务器端的应用非常的丰富,比如 Servlet,JSP、第三方框架等等。Java 技术对 Web 领域的发展注入了强大的动力。本篇内容包括:JavaWeb 简介、JavaWeb 技术架构演进的各个阶段,即 JavaWeb-Servlet 阶段,JavaWeb-MVC 阶段(SSM/SSH)以及 Ja原创 2022-11-18 10:33:56 · 3913 阅读 · 2 评论 -
Java基础:Java异常机制
异常是程序运行过程中出现的错误。Java 把异常当作对象来处理,把异常信息封装成了一个类,并定义一个基类java.lang.Throwable作为所有异常的超类。Throwable : 它是所有错误与异常的超类(祖宗类),有两个子类 Error 和 Exception。本篇主要记录内容包括:异常介绍、抛出异常、声明异常、捕获异常原创 2022-11-17 17:48:38 · 4359 阅读 · 3 评论 -
Java基础:Java抽象接口
在Java中,一个没有方法体的方法应该定义为抽象方法,而如果一个类中含有抽象方法,则该类必须定义为一个抽象类。接口是功能的集合,同样可看做是一种特殊的数据类型,是比抽象类更为抽象的类,接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计本篇主要记录内容包括:抽象类、接口、抽象类和接口的差异、接口的新特性——默认方法和静态方法、 标记接口等相关内容原创 2022-11-17 11:58:10 · 3794 阅读 · 3 评论 -
Java基础:Java面向对象
面向过程的优点是性能比面向对象高,不需要面向对象的实例化;缺点是不容易维护、复用和扩展。面向对象的优点是具有封装、继承、多态的特性,因而容易维护、复用和扩展,可以设计出低耦合的系统;缺点是由于需要实例化对象,因此性能比面向过程低。本篇主要记录内容包括:面向对象的概念、封装、继承、多态原创 2022-11-16 18:03:03 · 2876 阅读 · 3 评论 -
Java基础:Java类与对象
面向对象程序设计(简称OOP)是当今主流的程序设计范型,它已经取代了20世纪70年代的“结构化”过程化程序设计开发技术。Java是完全面向对象的,必须熟悉OOP才能够编写Java程序。面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。本篇主要记录内容包括:面向对象程序设计概述、静态域与静态方法、构造器、内部类。原创 2022-11-16 07:11:24 · 3004 阅读 · 6 评论 -
Java基础:Java流程控制
块(即复合语句)是指由一对大括号括起来的若干条简单的 Java 语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。但是,不能在嵌套的两个块中声明同名的变量。使用块(有时称为复合语句)可以在Java程序结构中原本只能放置一条(简单)语句的地方放置多条语句。本篇主要记录内容包括:块作用域、分支结构、循环语句与、中断控制流程语句原创 2022-11-15 17:47:09 · 3229 阅读 · 6 评论 -
Java基础:Java数字类型
Java 中包含多种运算符:算数运算符、关系运算符、逻辑运算符、位运算符。在 Math 类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。要生成一个随机数,可以使用 Random 对象。本篇主要记录内容包括:运算符、数学工具类原创 2022-11-15 08:59:26 · 3402 阅读 · 2 评论 -
Java基础:Java数据类型
Java 是一种强类型语言,这就意味着必须为每一个变量声明一种类型。在 Java 中基本数据类型共有 8 种,包括 4 种整型、2 种浮点型、1 种用于表现 Unicode 编码的字符单元的字符类型 char 和一种用于表示真值的 boolean 类型本篇主要记录内容包括:基础数据类型、对象包装器、字符串、数组原创 2022-11-14 19:02:22 · 3452 阅读 · 2 评论 -
Java基础:Java基本概念
与大多数程序设计语言一样,Java中的注释也不会出现在可执行程序中。因此,可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码会膨胀。变量的本质上就是代表一个可操作的「存储空间」,空间的位置是确定的,但是里面放置什么值是不确定。我们可以通过变量名来访问对应的「存储空间」,从而操作这个「存储空间」存储的值。本篇主要记录内容包括:Java 注释、声明变量、变量的初始化、常量及枚举类型变量。原创 2022-11-14 10:19:09 · 2969 阅读 · 9 评论 -
Java入门指南:环境配置
期望通过本文,你能对 Java 有一个全方位的理解,为你的 Java 学习之旅垒砌坚实的基石。让我们共同踏上这个旅程吧!万事知其然,要知其所以然。在 Java 语言内部也被划分为了不同的 体系、环境和版本,我们本篇就来了解一下,他们之间有怎样的区别,并动手安装和配置不同平台的 Java 环境,并通过实现用例的方式来体会 Java 编译和执行的过程!!!原创 2022-11-13 17:48:40 · 4093 阅读 · 8 评论 -
Java入门指南:基础概述
Java 是由 Sun 公司的 James Gosling 团队于 1991 年研发的一门面向对象的编程语言。最初命名为 Oak,于 1995 年更名为 Java 并开始推广。随着互联网的崛起,Java 逐渐成为最重要的 Web 应用开发语言之一。Java 是一门面向对象的高级编程语言,它吸收了 C 语言的优点,同时摒弃了 C 语言中难以理解的多继承、指针等概念,使得 Java 语言既功能强大又简单易用。原创 2022-11-13 11:42:06 · 4671 阅读 · 0 评论 -
深入理解Java虚拟机:Jvm性能调优
本篇内容包括:Jvm 性能调优简介;根据需求目标进行 Jvm 调优规划(即 调优的目标、调优的步骤);Jvm 调优参数、命令、工具;以及 Java 中的内存泄露问题的详解...原创 2022-11-06 16:55:34 · 3479 阅读 · 22 评论 -
深入理解Java虚拟机:Java垃圾回收器
本篇内容包括:7 种 Jvm 垃圾回收器的介绍、对比 以及 对应的 Jvm 参数设置,这 7 种包括了:Serial、ParNew 以及 Parallel Scavenge 三种新生代回收器 和 :Serial Old、Parallel Old 以及 CMS 三种老年代回收器,此外还有一个 G1 回收器是 Java 目前比较前沿的成果...原创 2022-11-06 10:33:23 · 3296 阅读 · 4 评论 -
深入理解Java虚拟机:Java垃圾回收机制
本篇内容包括:JAVA 垃圾回收机制概述、有哪些内存需要回收、如何回收(标记-清除、标记-整理(标记-清除-压缩)、复制(标记-复制-清除)、分代收集等算法) 以及 何时进行垃圾回收等内容!原创 2022-11-05 16:50:11 · 3153 阅读 · 3 评论 -
深入理解Java虚拟机:Java运行内存结构
本篇内容包括:JAVA 运行内存结构,即 程序计数器、Java 虚拟机栈、本地方法栈 、Java堆、方法区、运行时常量池 以及 直接内存等相关内容!原创 2022-11-05 09:45:03 · 4070 阅读 · 10 评论 -
深入理解Java虚拟机:Java类的加载机制
本篇内容包括:Java 类的加载机制(Jvm 结构组成、Java 类的加载)、类的生命周期(加载-验证-准备-解析-初始化-使用-卸载)、类加载器 以及 双亲委派模型。原创 2022-11-04 15:13:07 · 4006 阅读 · 17 评论 -
彻底理解Java并发:Java并发原子类
本篇内容包括:原子类概述、原子类分类(Atomic 基本类型原子类、Array 数组类型原子类、Atomic\Reference 引用类型原子类、Atomic\FieldUpdater 原子更新属性、Adder 加法器、Accumulator 积累器)、原子类 Demo 等内容!原创 2022-10-31 16:41:42 · 3354 阅读 · 18 评论 -
彻底理解Java并发:Java并发工具类
本篇内容包括:Java 并发工具类的介绍、使用方式与 Demo,包括了 CountDownLatch(线程计数器)、CyclicBarrier(回环栅栏)、Semaphore(信号量) 以及 Exchanger(交换器)等内容!原创 2022-10-31 11:48:11 · 3594 阅读 · 4 评论 -
彻底理解Java并发:AQS抽象队列同步器
本篇内容包括:抽象队列同步器(抽象队列同步器、同步状态的处理)以及FIFO队列的设计——AQS灵魂(Node 节点的设计、共享资源的竞争、共享资源的释放)等内容。原创 2022-10-30 17:39:29 · 3577 阅读 · 5 评论 -
彻底理解Java并发:ReentrantLock锁
本篇内容包括:为什么使用 Lock、Lock 锁注意事项、ReentrantLock 和 synchronized 对比、ReentrantLock (加锁、解锁、公平锁与非公平锁、ReentrantLock 如何实现可重入)等内容。原创 2022-10-30 13:27:51 · 4160 阅读 · 7 评论 -
彻底理解Java并发:synchronized关键字
本篇内容包括:Synchronized 关键字简介、synchronized 的修饰对象、对象的内存布局(64位)、Synchronized 锁升级过程等内容。原创 2022-10-29 20:38:17 · 4174 阅读 · 2 评论 -
彻底理解Java并发:volatile关键字
本篇内容包括:volatile 关键字简介、volatile 保证可见性(包括:关乎不可见性问题描述、JMM内存模型和不可见性的解决方案)以及 volatile 其他特性(包括:volatile 不保证原子性、volatile 原子性的保证操作、volatile 禁止指令重排、内存屏障和 happens-before 规则)原创 2022-10-29 11:21:55 · 4392 阅读 · 4 评论 -
彻底理解Java并发:ThreadLocal详解
本篇内容包括:ThreadLocal 简介、ThreadLocal 的使用(创建、方法、Demo)、ThreadLocal 原理、ThreadLocal 内存泄漏问题&使用时的注意事项以及其他 Thread 相关知识点(关于 ThreadLocal和Synchronized的区别、关于 ThreadLocalMap 中的 Hash 冲突处理)等内容。原创 2022-10-28 17:40:09 · 4171 阅读 · 9 评论 -
彻底理解Java并发:乐观锁与CAS
本篇内容包括:悲观锁与乐观锁的概述、CAS(Compare And Swap)比较并交换的介绍、非阻塞算法与ABA问题,以及对 Java 中 CAS 的实现解读(AtomicInteger 对 CAS 的实现,Unsafe 类简介)。原创 2022-10-28 13:07:06 · 4176 阅读 · 4 评论