java学习笔记
文章平均质量分 62
内容为作者本人在java学习(复习)过程中对觉得重要的知识点进行记录的内容
Ares陌冄
准大四软件工程,对面向解决实际业务需求方面的内容感兴趣,励志深入学习java进大厂
展开
-
开发工具经典插件总结
lombok:提供一些常用注解,包括get\set方法等,导入pom自动安装jar包和插件。Free MyBatis Tool:mybatis相关的自动导航和内容生成。maven-search:搜索项目依赖Properties的gva。TONGYI lingma:阿里idea中可用的AI聊天工具。JBLJavaToWeb:自动生成javaWeb项目结构。Live Server:启动实时页面加载所用的服务器。原创 2024-06-17 16:52:47 · 135 阅读 · 0 评论 -
java框架技术xml文件存档
【代码】java框架技术xml文件存档。原创 2024-06-16 10:20:49 · 174 阅读 · 0 评论 -
java内部类初探
内部类是定义在另一个类中的类,它曾经对于简洁地实现回调非常重要,不过今天lambda表达式在这方面可以做的更好。但内部类对于某些结构的构建还是很有用的。原创 2023-11-10 23:29:01 · 180 阅读 · 0 评论 -
Comparator接口与Lambda表达式
在你学习过Lambda表达式和java的函数引用之后,你就可以进一步了解Comparator这个接口了,它提供了很多有用的方法,以及很多函数式接口的参数供你使用,本质的目的是为了让你可以尽可能简单的编写一个排序方法。注:本文末尾提供完整的代码。原创 2023-11-08 00:00:07 · 1070 阅读 · 0 评论 -
java中hashCode方法的深入讨论
本文从hashCode的诞生原因和意义讲起,并讲解了多种创建hashCode()的方法,以及在什么情况下应该使用什么方式,希望能对你的学习产生帮助。同时你也可以使用谷歌开源的AutoValue框架自动生成对应的equals和hashCode方法,现在很多的IDE编译器也有自带这种类似的功能,在你了解原理之后,同样也是推荐使用这两种方式的。原创 2023-11-01 20:57:00 · 163 阅读 · 0 评论 -
java正确销毁二叉树的方法
1.java与C/C++对于内存回收有着本质的区别,java是将对象引用置空来让垃圾回收器在适当的时候回收对象的内存空间,而C/C++则可以手动释放一个对象。2.java的按值传递使得对象的引用副本只能修改原对象中的内容,而做不到改变原引用的指向,这一点需要尤其注意。原创 2023-10-17 10:52:34 · 125 阅读 · 0 评论 -
java函数的按值传递
因此在本文一开始的案例中,由于path所指向的ArrayList始终是同一个对象,即便递归中的每个栈帧都有一个独立的path引用,但它们始终共享的是同一片内存空间。所以你现在明白了吧,对于引用型变量,它们在递归的时候,往往为了确保对象(ArrayList)在每个栈帧中都有独立的不同的状态,你需要在适当的时候对其做回溯操作。原创 2023-10-16 22:02:45 · 58 阅读 · 0 评论 -
优先考虑以来注入来引用资源
有许多类在应用时会依赖一个或多个底层资源。但是这样的方法有一个明显的局限,就是dictionary作为检查拼写的依赖,它是被写死的,固定死的一个常量,在依赖固定,且数量较少时我们可以使用这种手段。但我们是否有一个好的方法可以让这个类支持大量依赖,甚至是动态的依赖?原创 2023-10-13 20:49:22 · 46 阅读 · 0 评论 -
创建不可实例化的类
有时候可能需要编写只包含静态方法和静态域的类,这些类的名声不太好,因为有些人喜欢在面向对象的java中用这种方式写过程化的程序(当然,我做算法题的时候一般是这么做的)。但有些工具类例如Math类,就需要这么去定义,这种工具类我们只使用它们提供的静态方法,或静态字段,因此我们不需要实例化它们,那我们应当怎么做呢?原创 2023-10-13 12:40:12 · 80 阅读 · 0 评论 -
SingleTon单例设计
虽然提升这个单例类的安全性使得代码变得比原来复杂的多,但这是非常有益的,因为现代JVM有着高度优化过的垃圾回收器,使得轻量级的对象创建与回收效率相比维护一个自己定义的对象池其实在效率上要更好一些,所以我们只会在对一些非常重量级的对象设计上使用单例设计模式,而这些重量级的对象往往在安全上也非常的核心和重要,因此通过必要的逻辑保证安全性是非常重要的。原创 2023-10-13 11:35:56 · 37 阅读 · 0 评论 -
java集合类的算法库
就像C++的STL一样,java的集合类也提供了一些常用的算法,用于满足你的基本算法要求,比如排序,混排,二分查找等。原创 2023-09-23 23:30:58 · 92 阅读 · 0 评论 -
java集合类的副本与视图
视图是一种对原集合的映射,可以通过视图来"看到"原集合,但视图又并非只能看(读)不能写的视窗,各种各样的视图介于原集合与视窗之间,意在对原集合进行一些列有所限制的操作。原创 2023-09-20 20:30:12 · 94 阅读 · 0 评论 -
java中常用的集合类
集合用于存放数据,不同的集合使用不同的数据结构,根据数据结构的不同,集合类表现出不同的特性和效率,如查询效率、插入效率等。本文将介绍如下常用的集合类:ArrayList、LinkedList、ArrayDeque、HashSet、TreeSet、PriorityQueue、HashMap。List和Set类型的集合实现了Collection接口,而Map类型的集合则实现了Map接口。原创 2023-09-17 14:57:26 · 185 阅读 · 0 评论 -
java中常用的Map类型
Map类型指的是映射类型,用于存放键值对。键就像id一样不可重复,但值是可以出现重复的。例如员工id可以映射到一个具体的员工属性类型。本文主要讲述HashMap和TreeMap类,以及其核心内容。原创 2023-09-19 12:45:57 · 209 阅读 · 0 评论 -
java的特殊集合类
本文将介绍一些不算常用的特殊集合类,包括LinkedHashSet、LinkedHashMap、WeakHashMap、IdentityHashMap、EnumSet、EnumMap、BitSet、Properties。原创 2023-09-16 22:52:37 · 80 阅读 · 0 评论 -
java接口的一些细节
接口(interface)用来描述类应该做什么,而不是制定它们具体应该如何做。接口不是类,而是对希望符合这个接口的类的一组需求。类可以实现接口,使用关键字implements,一个类可以实现多个接口。java不允许多重继承(extends),但允许实现多个接口;多重继承会让语言变得十分复杂(如C++)或是让程序运行效率降低(如Eiffel);但java接口可以提供多重继承的大多数好处,同时还能避免多重继承的复杂性和低效性。原创 2023-08-31 11:20:41 · 48 阅读 · 0 评论 -
java中的回调思想与Timer类
回调是java的一种编程思路,旨在将一系列操作封装在一个对象中,并将这个对象传递给另一个方法,以便这个方法在需要的时候(返回去)调用那个对象中的操作。Timer类就是典型的运用了这个编程思想,这个类提供的功能就是执行定时操作,而具体的操作就封装在我们定义的类中,Timer类对象可以选择多久之后执行我们定义的方法,这个执行逻辑和方法就是典型的回调。原创 2023-08-30 17:35:16 · 86 阅读 · 0 评论 -
java利用反射编写泛型copy数组代码
应该记得,Arrays类中的copyOf方法可以进行任意类型的数组复制,而这样一个支持泛型的数组复制具体是怎么实现的呢,其实利用的就是反射的特性。我们来编写一下这个方法。你可能会好奇,既然Arrays.copyOf()方法中调用了System.arrayCopy()方法,那为什么不在数组复制的时候统一使用System.arrayCopy()方法呢?首先,使用System.arrayCopy()方法的入参多达5个,这会让代码的编写变得复杂繁琐。原创 2023-08-28 17:27:36 · 100 阅读 · 0 评论 -
java反射——运行时分析具体对象
在java反射初学篇中,我们了解了可以使用反射获取一个指定的类的信息,只要知道类的名字或者给定一个具体的对象,我们就可以获取到这个类的变量(Field)、方法(Method)、构造方法(Constractor),并且我们可以调用这些内容。本节我们将学习如何利用反射,分析一个具体的实例化的对象,其目标就是获取其对象的状态。原创 2023-08-28 12:51:10 · 70 阅读 · 0 评论 -
java的equals方法的深入讨论
而第二种方式适用于只在某个基类上判断是否符合条件,比如说判断两个员工是否相同,只需要判断员工id是否相同,而不论工资是否相同,也不论是否是继承于Employee类的经理或者主管,这时Employee就可以定义一个final的equals方法,使得代码简化,并且防止了其子类不必要的equals定义。原创 2023-08-22 11:41:16 · 133 阅读 · 0 评论 -
java的几个重要关键字
本篇以通俗易懂的语言讲解java中的this、super、static、private、protected、final关键字。原创 2023-08-20 10:45:20 · 52 阅读 · 0 评论 -
java 16记录类的相关概念
有的时候我们只需要一个很简单的类,像是常量一样,其成员变量在new过后基本不会改变,我们希望把这些成员变量定义为private final类型,这个时候就可以使用到在java 14中预览、java 16正式发布的记录(record) 类,用于简化这种简单类的创建。原创 2023-08-19 10:09:45 · 74 阅读 · 0 评论 -
java对象的浅克隆和深克隆
在java的应用中,我们不免的会需要获得一个完全一模一样的对象,在操作新对象的时候不希望旧的对象被改变,如果直接加一个对相同对象的引用,那么修改新对象的时候实际上修改的是与原对象相同的内存空间,达不到我们的目的。此时我们就需要对对象进行克隆,而关于对象的克隆,就有浅克隆和深克隆两种,浅克隆仅能满足简单的对象克隆,而较为复杂的对象,就需要用深克隆才能实现了。原创 2023-08-17 13:56:55 · 117 阅读 · 1 评论 -
java对private修饰的变量和方法的访问
对自己之前对private修饰的严重理解错误进行记录,并展现一个极易被忽视的特性。1.一定要记住private修饰的变量和方法仅限于类的内部使用,而不是仅它自己可以使用,否则会误认为只要得到了一个对象的引用就可以直接访问自己的私有字段。2.如果想要给出一个访问自己私有变量方法,可以设定并使用get、set方法。3.同一个类的方法可以自由的直接访问自己这个类的私有成员,在实际中可以简化编程,例如在重写一个类的compareTo()方法时,可以不必使用get()方法获取。原创 2023-08-17 13:35:48 · 1245 阅读 · 1 评论 -
java空指针的显性预防和测试
在java中我们不鼓励创建引用型变量而不确定指向,这会导致难以维护的空指针异常,而有些时候我们也可以在代码中显性的处理可能出现的空指针异常,这里就提到了Object类中提供的两个静态方法,requireNonNullElse()和requireNonNull()。1.对于可能出现的空指针异常,我们可以选择赋一个值继续执行,也可以抛异常结束执行。2.对于抛异常结束执行,可以直接调用Object的方法;原创 2023-08-17 11:35:02 · 307 阅读 · 1 评论 -
java打印本月日历
按照周一到周日为一行的顺序打印本月日期,并将当天的日期用"*"表示。此题意在加深学习者对于java日期类的综合理解。1.LocalDate类可以很方便的处理日期相关的计算,可以获取年月日星期等信息。2.获取年月日的方法的返回值均为int——getYear()、getMonthValue()、getDayOfMonth()。3.getDayOfWeek()方法返回的类型是DayOfWeek不是int,获取数值还需要再使用getValue()方法。4.可以使用minusDays()和plusDays()方法来对原创 2023-08-16 14:40:42 · 537 阅读 · 1 评论 -
java抽球游戏
现在有40个球序号分别为1至40,我们希望从中抽取6个不重复的球,并将其按从小到大的方式展示其序号。此题意在提升学习者对java数组的综合理解能力。1.对随机数生成,数组排序,数组输出测试这几个关键功能的进行了解和学习。2.对数组进行充分了解学习,灵活使用循环中的i下标,得到我们所需要的数据。3.可以对球的总数、抽取数量两个参数使用常量代替,提高程序的易修改性。4.可以通过异常处理的方式,控制球总数不及抽取数量的数组下标越界异常。原创 2023-08-15 11:54:30 · 112 阅读 · 0 评论 -
java中的大数类
java中的大数有两类,一个是存储整形的BigInteger,一个是存储浮点型的BigDecimal,它们本质上是由字符串构成的,因此可以存储任意长度的数据,但他们使用起来要比基本类型麻烦,并且速度肯定亚于基本数据类型。1.创建java大数类型时,不能直接使用new的方式并传入一个基本数据类型(包括包装类),而应传入字符串类型,你也可以使用包装类型的toString方法。2.若要以基本数据类型创建大数对象,请使用静态方法valueOf()进行传递。原创 2023-08-14 17:27:13 · 640 阅读 · 0 评论 -
java 14引入的一种新switch句式
1.由于java是向下兼容的,所以直通式无返回值的旧版switch的所有特性都不受影响。2.对于有返回值的switch:switch表达式需要末尾分号;必须覆盖所有可能的情况;不能使用break、return、continue语句;冒号switch使用yield返回参数,箭头switch可以使用yield语句也可以在只有一个返回值语句时直接给出一个值。3.在有返回值的箭头switch中,只要不是直接返回值的case,但凡有一个语句就必须使用大括号。4.提供了多个case值使用逗号分隔的缩进语法。原创 2023-08-13 18:31:47 · 231 阅读 · 1 评论 -
java的格式化输出(含C语言对比)
1.java沿用了C语言提供的printf方法,可以等同的去使用这个方法进行格式化输出2.java可以使用format()方法获取一个格式化的字符串,留存下来方便后续处理3.java 15提供了一种直观上对格式化字符串所使用的变量看起来更清晰的格式化方法。原创 2023-08-13 15:49:54 · 217 阅读 · 1 评论 -
java最基础的文件读写方法
1.虽然代码简单,但需要import的内容较多2.Scanner对象构造时要用Path对象,需要用Path.of方法将字符串对象进行转换3.PrintWriter对象构造时则仅需直接给定字符串路径即可;两者都需要注意字符类型参数4.程序运行结束前记得使用close方法关闭输入输出流。原创 2023-08-13 15:32:15 · 143 阅读 · 1 评论 -
TreeSet的使用和“比较方法“的讨论
1.TreeSet类对集合中元素的排序,是基于类实现的Comparable接口中的compareTo方法,这里我们使用的Integer类已经实现了该方法,因此我们不必手动实现;(3).使用Comparable方法在待排序元素的排序策略仅为1种时可以让程序比较清晰,但程序中如果需要对该类进行多种策略排序时就会受到限制,这种情况就可以使用Comparator接口。(1).Comparable接口中的比较方法是compareTo,而Comparator接口中的比较方法是Compare。原创 2023-07-29 11:04:20 · 61 阅读 · 0 评论 -
java系统找不到指定的文件
使用输入输出流完成文件逐个字符克隆。1.使用IDEA测试时,代码文件存放至src目录下,但系统认为的当前所在目录并不是src目录,而是其父路径untitled下。若将input.txt文件放在src目录下则会出现“系统找不到指定的文件”异常。原创 2023-07-19 21:09:52 · 797 阅读 · 0 评论 -
java逐字符复制和缓存复制的速度对比
1.以输入流为例,使用BufferedInputStream类的实例化,需要一个对应的InputStream对象,默认初始化为8096个字符的缓存空间,也可以构造时添加一个参数手动设置。2.逐个字符复制可以使用一个int型变量承接,缓存多字符复制可以使用byte[]数组来承接。3.read()方法有三种重载形式:无参形式是读取一个字符;一个byte[]类的数组作为参数,表示读取一个这个数组的长度的内容;在后面还可以再加两个int型参数,第一个表示起始点,第二个表示读取长度。原创 2023-07-20 19:18:31 · 51 阅读 · 0 评论 -
java多线程入门
由于在大一大二的两年学习中,长期接触面向过程的C语言,又在上一学期中一直抽时间学习算法,让我对程序的顺序执行认知达到了走火入魔的程度(认为程序的运行一定是从某个语句到下一条语句,或者是跳转到某一条语句执行) 这让我在看书学习java多线程时,一直以这个思维去看样例代码,使得我好几个小时无法入门,怎么都看不懂。如果你也遇到了跟我一样的情况,下面这个由chatGPT生成的代码可能会给到你非常大的帮助。原创 2023-07-23 15:37:58 · 68 阅读 · 0 评论 -
java反射相关知识初学
以下代码包含反射相关的四个知识点:1.获取类(类名)的三种方式 2.反射获取类的构造方法(以及使用)3.反射获取类的成员变量(以及修改)4.反射获取类的方法(以及使用)原创 2023-07-19 21:50:45 · 52 阅读 · 0 评论 -
java文件的单层目录遍历
1.使用File类指定目标位置文件时,可以使用File(File file,String child)构造方法,它可以指定父路径为另一个文件所在的目录,再单独写目标文件基于此位置的子路径。2.在使用forecah循环遍历File类的list()方法返回的String[]类数组时,应注意该方法可能返回null,若不加非空判断可能会导致空指针异常。原创 2023-07-20 11:40:03 · 108 阅读 · 0 评论 -
java对象的浅克隆和深克隆
浅克隆有关引用类型和String类:很多资料上会直接谈到引用型变量就不行,那我前面为什么要提到"复杂的"呢,这是因为像String这种类型的对象它虽然是引用类型,但却不会因为浅复制而受到影响,因为String类是不可变的,一旦修改String类对象的值,那么底层就相当于重新创建了一个String对象重新赋值引用,所以我们可以认为:String对象天然地具有浅克隆的特性。原创 2023-07-21 14:51:12 · 94 阅读 · 1 评论