
JavaSE
文章平均质量分 72
JavaSE部分探索学习
世界尽头与你
一个懂安全的开发者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java8新特性之Stream API
Java8 新增了包,它和之前的流大同小异。之前接触最多的是资源流,比如,通过流把文件从一个地方输入到另一个地方,它只是内容搬运工,对文件内容不做任何CRUD。Stream依然不存储数据,不同的是它可以检索和逻辑处理集合数据、包括筛选、排序、统计、计数等。可以想象成是 Sql 语句。它的源数据可以是CollectionArray等。由于它的方法参数都是函数式接口类型,所以一般和 Lambda 配合使用。原创 2023-01-29 22:09:04 · 402 阅读 · 0 评论 -
Java8新特性,Lambda 表达式史上最详细讲解
Lambda表达式,也称为闭包,是 Java 8 中最大和最令人期待的语言改变。它允许我们将函数当成参数传递给某个方法,或者把代码本身当作数据处理,函数式开发者非常熟悉这些概念。很多JVM平台上的语言(Groovy、Scala等)从诞生之日就支持Lambda表达式,但是 Java 开发者没有选择,只能使用匿名内部类代替Lambda表达式。使用 Lambda 表达式可以使代码变的更加简洁紧凑。让 Java 也能支持简单的函数式编程或Lambda可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。原创 2022-08-25 16:10:03 · 1372 阅读 · 0 评论 -
Java正则表达式进阶
{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。比如一个文本以abc开始,接着为xyz,紧跟着abc,对应的正则表达式可以为“例如,在字符串"oooo"中,"o+?“只匹配单个"o”,而"o+“匹配所有"o”。在验证输入的字符串是否满足条件使用,只是验证是否满足规范。反向引用非常方便,因为它允许重复一个模式(”,也可以使用反向引用重写正则表达式,“),无需再重写一遍。表示第三组,以此类推。原创 2022-08-24 16:59:53 · 421 阅读 · 0 评论 -
一文学会Java正则表达式
在了解正则表达式之前,我们先看几个非常常见的问题:如何判断字符串是否是有效的电话号码?例如:010-1234567,123ABC456,13510001000等;如何判断字符串是否是有效的电子邮件地址?例如:test@example.com,test#example等;如何判断字符串是否是有效的时间?例如:12:34,09:60,99:99等。一种直观的想法是通过程序判断,这种方法需要为每种用例创建规则,然后用代码实现。为每一种判断逻辑编写代码实在是太繁琐了。有没有更简单的方法?有!原创 2022-08-24 10:51:43 · 337 阅读 · 0 评论 -
Java反射机制解读
反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息。加载类后,在堆中就产生了一个class类型的对象,这个对象包含了类的完整结构的信息,通过这个对象得到类的结构。原创 2022-08-14 21:43:24 · 813 阅读 · 0 评论 -
一文学会Java网络编程
网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。TCP:TCP(英语:Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,TCP 层是位于 IP 层之上,应用层之下的中间层。TCP保障了两个应用程序之间的可靠通信。原创 2022-08-07 22:10:13 · 282 阅读 · 0 评论 -
Java IO流进阶操作
这两个一次只读取一个字节的方法的时候。由于字节缓冲流内部有缓冲区(字节数组),因此,字节缓冲流会先将读取到的字节存放在缓存区,大幅减少 IO 次数,提高读取效率。而处理流(包装流)包装节点流,即可以消除不用节点流的实现差异,也可以提供更方便的方法来完成输入输出操作。字节流和字节缓冲流的性能差别主要体现在我们使用两者的时候都是调用。键值对之间不能有空格,值不需要使用双引号包裹!对于一些不经常改变的配置数据,我们可以采用。节点流是底层流/低级流,直接和数据源相连。请注意:配置文件的格式(键值对)原创 2022-08-05 16:59:44 · 216 阅读 · 0 评论 -
Java I/O流使用导航
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来的。案例三:判断指定目录是否存在,不存在就创建目录。案例一:判断指定目标是否存在,如果存在就删除。下图是一个描述输入流和输出流的类层次图。案例二:判断目录是否存在,如果存在即删除。原创 2022-08-04 16:50:41 · 198 阅读 · 0 评论 -
Java多线程深度修炼
使用了synchronized标识之后,所标识的内容就会加入互斥锁🔒在任意时刻,只能有一个线程访问该对象。多个线程都占用了对方的锁资源,但不肯相让,导致了死锁🔒,死锁🔒是多线程开发的大忌!虽然子线程存在1000此的循环输出,但是其为守护线程,主线程退出后,其自动销毁。线程是一个动态执行的过程,它也有一个从产生到死亡的过程。下图显示了一个线程完整的生命周期。线程分为用户线程和守护线程。例如:(在方法上面加锁🔒)注意,这时的锁依然是在。原创 2022-08-01 10:38:14 · 194 阅读 · 0 评论 -
使用Java多线程模拟一个售票系统
在多线程编程中,一些敏感数据不允许被多个线程同时访问,此时就可以使用同步访问技术,保证数据在同一时刻只能有一个线程访问,以保证数据的完整性。有时候,我们需要不同的线程可以相互控制对方的运行。操作时,另一个窗口已经进行售票状态,跳过了。TTT线程会运行5秒,随后由主线程通知退出。那么,为什么会发生这种情况呢?结果分析:(完美解决超卖问题)仍然会有超卖现象发生!原创 2022-07-31 15:25:30 · 6554 阅读 · 0 评论 -
2022年了,你还不会Java多线程吗?
Java 给多线程编程提供了内置的支持。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。这里定义和线程相关的另一个术语 - 进程:一个进程包括由操作系统分配的内存空间,包含一个或多个线程。一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的。原创 2022-07-31 11:42:13 · 308 阅读 · 0 评论 -
一文学懂Java泛型
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。假定我们有这样一个需求:写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,该如何实现?答案是可以使用 Java 泛型。使用 Java 泛型的概念,我们可以写一个泛型方法来对一个对象数组排序。然后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。原创 2022-07-29 21:38:44 · 327 阅读 · 0 评论 -
Java集合类史上最细讲解 - TreeSet,TreeMap篇
TreeSet实现了Set接口,与HashSet不同的时,他是有序集合,底层是一个TreeMapTreeSet可以在初始化对象的时候传入一个接口对象,并对属性进行赋值---我们可以通过内部类的形式传入一个比较器,借助字符串的compareTo方法对TreeSet的排序进行自定义@Override});和TreeSet一样,TreeMap也可以传入你个匿名内部类,实现自定义排序的效果@Override});原创 2022-07-29 10:05:38 · 782 阅读 · 0 评论 -
Java集合类史上最细讲解 - HashTable,Properties篇
HashTable的键和值都不能为空,否则会抛出一个异常使用方法基本与HashMap一致HashTable是线程安全的,HashMap是线程不安全的。原创 2022-07-26 22:15:13 · 439 阅读 · 0 评论 -
Java集合类史上最细讲解 - HashMap篇
接下来,通过hash值计算table的某个位置有没有数据存在,如果没有的话,新建一个Node节点,挂在table数组上。方法:(不要慌,详细的代码解读可以参见HashSet篇,接下来我们来debug看一下具体的代码执行过程)步入步入,到达比较hash值的部分,由于新增的对象的hash值和第一个一致且key值相等,则执行。继续步入,直到第二个元素添加完成,关键来了,开始添加第三个元素。首先,会进行初始化加载因子,加载因子的值为0.75。方法,通过一通计算hash值,传入参数进入。k,v是一个Node实现了。原创 2022-07-26 18:23:58 · 281 阅读 · 0 评论 -
Java集合类史上最细讲解 - Map篇
对于Set,底层其实依然是一个Map,但是Set选择不使用Value,也就是Set的Value值始终是一个常量Map中的Key和Value可以是任何类型的数据,会封装到对象中Map中的Key不能重复,但是Value可以重复,当有相同的Key时,等价与替换操作。原创 2022-07-26 16:50:50 · 466 阅读 · 0 评论 -
Java集合类史上最细讲解 - LinkedHashSet篇
是HashSet的子类,底层是一个,维护了一个数组 + 双向链表和HashSet不同的是,双向链表可以维护元素的次序,这使得元素看起来是以插入顺序保存的同样的,也不允许添加重复元素。原创 2022-07-22 16:26:57 · 901 阅读 · 0 评论 -
Java集合类史上最细讲解 - HashSet篇
根据key得到hash,去计算该key应该存放到table表的那个索引位置,并把这个位置对象赋值给p,如果p为null的话,表示该索引位置还没有存放过任何的数据,就在。这个是存放Map Node节点的数组,如果你精通数据结构邻接表,对这个数组应该很熟悉,tab里面的存储结构是这样的:(下图仅作示例),则返回0值,否则返回hash算法的结果(此算法可以极大的防止冲突的发生💥)会依次和该链表的每一个节点进行比较,有重复的直接。不保证存放元素的顺序和取出的顺序一致,这取决于hash后,再确定索引的结果。原创 2022-07-22 12:04:17 · 1228 阅读 · 0 评论 -
Java集合类史上最细讲解 - List篇
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。Java的设计者在这里获取了链表头节点的地址,以备后续进行删除,随后检查了一个头节点为空的异常,在。的变量出现,它的作用就是记录当前集合被修改的次数。原理操作和上面类似,只不过它初始的容量为指定的容量,需要扩容时扩容为原容量的1.5倍。先获取一下头节点后面的节点的地址,保存下来,然后将头节点的数据和。的增加和删除的操作效率更高,而查找和修改的操作效率较低。原创 2022-07-21 18:24:00 · 1879 阅读 · 0 评论 -
Java时间相关类详解
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。算两个日期间隔多少天,计算间隔多少年,多少月:(这个真的实用,强推!Java8之前,获取特定一个日期很麻烦,比如获取本月最后一天,第一天。是一个抽象类不能像Date类直接通过new创建。Java 8中,日期和时间被明确划分为。来表示带时区的时间。获取一个date类型时间的毫秒数。本身并不支持国际化,需要借助。原创 2022-07-20 00:09:13 · 606 阅读 · 1 评论 -
Java 大数处理方案指南
如果这个大整数与另一个大整数other相等,返回0;如果这个大整数小于另一个大整数other,返回负数;方法不仅仅会比较值的大小(value)还会比较精度(scale),而。这两个类可以处理包含任意长度数字序列的数值。方法的时候尽量使用 3 个参数版本,并且。(无法除尽出现无限循环小数的时候),其中。:(推荐使用的大数值比较方法!该类实现了超高精度的浮点数运算。这里需要注意的是,在我们使用。类实现了任意精度的整数运算,方法比较的时候会忽略精度。网上有一个使用人数比较多的。实现了任意精度的浮点数运算。原创 2022-07-19 23:15:40 · 1954 阅读 · 0 评论 -
Java String、StringBuffer和StringBuilder的区别
当对字符串进行修改的时候,需要使用和类。和 String 类不同的是,和类的对象能够被多次的修改,并且不产生新的未使用对象。这极大的节省了资源的使用的本质依然是char数组(或者byte数组,要看JDK的版本)但是和String不同的是,该数组不是final类型的🍢但是和String类一样,类本身也是final类型,代表它不能被继承!一个可变的字符序列,此类提供一个与兼容的API,但不保证同步(不是线程安全的),用在字符串缓冲区被单个线程使用的时候,如果可能建议优先使用该类,因为在大多数的时候,它比要快。原创 2022-07-19 18:43:37 · 556 阅读 · 0 评论 -
Java异常你了解吗?
在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。所有异常都必须是Throwable的子类。如果希望写一个编译性异常类,则需要继承Exception类。如果你想写一个运行时异常类,那么需要继承类。/*** 自定义异常*//*** 自定义异常*/if (!throw new AgeException("您还未成年!");原创 2022-07-18 19:21:21 · 274 阅读 · 0 评论 -
一文学会JavaSE阶段常用注解
不是程序本身,不是必要的,可以对程序做出解释,可以被其他程序读取格式:以。原创 2022-07-17 20:20:45 · 307 阅读 · 0 评论 -
Java枚举类
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。关键字来定义,各个常量使用逗号。Java 枚举类使用。原创 2022-07-17 19:06:03 · 978 阅读 · 0 评论 -
Java程序员分水岭,内部类详解
内部类的分类:定义在外部类局部的位置(比如方法内):定义在外部类成员位置上原创 2022-07-17 14:06:10 · 1763 阅读 · 0 评论 -
一文真正学懂Java接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。原创 2022-07-16 22:10:11 · 552 阅读 · 0 评论 -
详解Java final关键字
【代码】详解Java final关键字。原创 2022-07-15 20:38:55 · 340 阅读 · 0 评论 -
Java神秘的抽象类,模板设计模式
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。一个类不能同时被abstract和final修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。抽象类可以包含抽象方法和非抽象方法。抽象类一般会被继承,由其子类实现具体的抽象方法。原创 2022-07-16 12:59:44 · 438 阅读 · 0 评论 -
Java设计模式之单例设计模式的妙用
毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美地解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。单例模式可以确保系统中某个类只有一个实例,该类自行实例化并向整个系统提供这个实例的公共访问点,除了该公共访问点,不能通过其他途径访问该实例。方法时才会创建对象,并且保证对象单一,实现单例。原创 2022-07-15 18:26:23 · 487 阅读 · 0 评论 -
Java代码块的使用
代码块的基本语法内容:在执行构造方法时,会首先加载代码块里面的内容代码块调用的顺序优先于构造方法原创 2022-07-15 17:36:10 · 438 阅读 · 0 评论 -
Java类变量与类方法
static修饰符,用来修饰类方法和类变量static关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量。局部变量不能被声明为static变量静态变量使用得比较少,但静态常量却使用得比较多static关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。静态方法从参数列表得到数据,然后计算这些数据对类变量和方法的访问可以直接使用和的方式访问// 我是一个类常量。原创 2022-07-15 13:02:09 · 711 阅读 · 0 评论 -
Java Object类详解
但是,其他数据类型类会重写equals方法,比如String类的重写:(判断两个字符串的值是否相等)可以清晰的看到,object类里的equals方法是判断对象的地址是否相同(是不是同一个对象)方法,子类可以重写该方法,做一些释放资源的操作。是object类的一个方法,只能判断引用类型。另外,当我们直接输出对象时,会默认直接调用。当对象被回收时,系统自动调用该对象的。返回该对象的字符串表示。现在我们在类中重写一下。原创 2022-07-12 22:44:49 · 1078 阅读 · 0 评论 -
Java多态进阶,吃透多态,这一篇就够了
数组的定义类型为父类类型,但是保存的实际元素类型为子类类型。原创 2022-07-12 17:40:33 · 340 阅读 · 0 评论 -
Java面向对象三大特性,多态篇
多态是同一个行为具有多个不同表现形式或形态的能力。多态性是对象多种表现形式的体现消除类型之间的耦合关系可替换性可扩充性接口性灵活性简化性继承重写左父右子是多态。原创 2022-07-12 13:16:18 · 487 阅读 · 0 评论 -
Java方法重写(Override)
重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。重写是子类对父类(或爷爷及以上类)的允许访问的方法的实现过程进行重新编写,原创 2022-07-11 23:27:26 · 1720 阅读 · 0 评论 -
Java super关键字详解
我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。用于访问父类的属性,方法,构造器。原创 2022-07-11 22:59:44 · 1155 阅读 · 0 评论 -
Java面向对象三大特性,继承篇
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。当我们新建子类的对象时,会输出如下:(首先初始化父类的构造器,再初始化子类的构造器)可以看到,我们通过封装完美解决了这个问题,而封装的方法的访问权限应该设置为。继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。的访问修饰,随后发现在子类无法访问这个属性,那么应该怎么做呢?私有属性和方法不能在子类直接访问,要通过公共的方法去访问。在 Java 中通过。原创 2022-07-11 19:28:55 · 270 阅读 · 0 评论 -
Java面向对象三大特性,封装篇
在面向对象程式设计方法中,封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。任何要访问类中私有成员变量的类都要通过这些getter和setter方法。适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。我们发现,使用封装对于数据的安全保障可以很容易通过构造器进行破解。要访问该类的代码和数据,必须通过严格的接口控制。原创 2022-07-10 23:22:22 · 200 阅读 · 0 评论 -
一文详细讲解Java this关键字
Java虚拟机会给每个对象分配this,代表当前对象使用this可以解决构造方法中命名冲突的问题💥此关键字是可选的, 但是,使用此关键字可能会使代码更易读或易懂。另外this只能在类定义的方法中使用!原创 2022-07-10 15:59:02 · 160 阅读 · 0 评论