type
status
date
slug
summary
tags
category
icon
password
comment
2024.09.13 JAVA梦开始的地方,之前天天立flag要学,到现在才学
2024.10.10 很好,一个月前立的flag现在才开始,真是被自己蠢笑了,忍不住对自己骂一句脏话
2024.12.24 很好很好,一个学期了也没学哈哈哈
Java基础复习笔记
第01章:Java语言概述
1. Java基础学习的章节划分
语言 = 语法 + 逻辑
2. 计算机的构成
- 硬件:CPU、内存、硬盘、输入设备、输出设备、调制解调器
- 软件
3. 软件
- 软件:即一系列按照
特定顺序组织
的计算机数据
和指令
的集合。 - 有系统软件和应用软件之分。
- 系统软件:windows、mac os、android、ios、linux
- 应用软件:qq、微信、音乐播放器等
4. 人机交互方式
- 图形化界面的方式
- 命令行的方式交互
- DOS命令(掌握)
- cd cd.. cd/ md rd del exit cls等
5. 语言
- 计算机语言的分代
- 第1代:机器语言:0和1
- 第2代:汇编语言:出现了助记符
- 第3代:高级语言:
- 面向过程阶段:C
- 面向对象阶段:C++,Java,C#,Python,JS等
- 没有“最好”的语言,只有在特定场景下相对来说,最适合的语言而已。
6. Java概述
- Java简史
- 1995诞生
- 1996:jdk1.0版本
- 2004:Java5.0(jdk1.5)--->里程碑式的版本;J2SE->JavaSE、J2EE->JavaEE、J2ME->JavaME
- 2014:Java8.0--->里程碑式的版本;目前,市场占有率仍然很高。(lambda表达式、StreamAPI)
- 后续:Java11、Java17都属于LTS(长期支持版本)
- SUN、Oracle、Google等
- Java之父:詹姆斯·高斯林
- Java的应用场景:
- JavaSE:开发桌面级应用 (不靠谱)
- JavaEE:开发企业级后台应用
- JavaME:开发小型设备的应用(不靠谱)
----> JavaEE、Android应用、大数据开发
7. JDK的下载、安装及环境变量的配置(重点)
- jdk下载:官网下载
- 安装:jdk8.0和jdk17.0 (傻瓜式安装)
- path环境变量的配置(重点)
8. 第1个Java程序
新建java文件:PersonInfo.java
针对于第1个程序的小结及常见问题的分析
9. 注释
- 掌握:单行注释、多行注释
- 作用1:对程序中的代码进行解释说明
- 作用2:有助于调试程序
- 熟悉:文档注释 (可以被javadoc解析)
10. API文档
- API:(Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。
- 像String、System都属于API
- API文档:用于解释说明API如何使用的一个文档。
第02章:变量与进制
1. 关键字(keyword)
- 关键字:被Java语言赋予特殊含义的字符串。
- 注意点:关键字都是小写的!
- Java规范了50个关键字(包含了goto、const两个保留字)
- 额外的三个字面量true、false、null虽然不是关键字,但是我们也把他们看做是关键字。
2. 标识符
- 凡是可以自己命名的地方,都是标识符。
- 标识符都有哪些位置?类名、变量名、包名、方法名、接口名、常量名等
- 标识符的命名规则
(如果不遵守,编译不通过。要求大家遵守)由26个英文字母大小写,0-9 ,_或 $ 组成数字不可以开头。不可以使用关键字和保留字,但能包含关键字和保留字。Java中严格区分大小写,长度无限制。标识符不能包含空格。
- 标识符的命名规范
(如果不遵守规范,不影响程序的编译和运行。建议大家遵守,否则容易被鄙视)包名:多单词组成时所有字母都小写:xxxyyyzzz。例如:java.lang、com.atguigu.bean类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz例如:HelloWorld,String,System等变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz例如:age,name,bookName,main,binarySearch,getName常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ例如:MAX_VALUE,PI,DEFAULT_CAPACITY
- 标识符在声明时,要见名知意!
3. 变量的基本使用
- 内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
- 变量的构成包含三个要素:数据类型 变量名 变量值
- Java中变量声明的格式:数据类型 变量名 = 变量值;
- Java是一门强类型的语言。即每一个变量都规定了具体的类型。
- 使用变量注意:
- Java中每个变量必须先声明,后使用。
- 使用变量名来访问这块区域的数据。
- 变量的作用域:其定义所在的一对{ }内。
- 变量只有在其作用域内才有效。出了作用域,变量不可以再被调用。
- 同一个作用域内,不能定义重名的变量。
4. 基本数据类型的变量
变量按照数据类型来分:
- 整型变量
- 浮点类型
- char类型(字符类型)
- 布尔类型(boolean)
5. 基本数据类型变量间的运算规则
5.1 自动类型提升规则
说明:
① 容量小的变量和容量大的变量做运算时,运算的结果是容量大的变量的数据类型。
(此时的容量小、容量大指的是存储数据的范围的大小,并非占用内存空间的大小。比如:float的容量要大于long的容量)
② byte、short、char 三者之间的变量做运算,结果是int类型。
③ 不管是自动类型提升规则,还是强制类型转换规则都只针对于基本数据类型中的7种进行操作(除了boolean类型)
5.2 强制类型转换规则
说明:
①看做是自动类型提升规则的逆运算
② 如果需要将容量大类型的变量转换为容量小的类型的变量时,就需要使用强制类型转换
③ 强制类型转换需要使用一对()表示
④ 使用强转符转换时,可能造成精度的损失
6. String与8种基本数据类型变量间的运算
- String的理解
String,即为字符串类型。声明String类型的变量,可以使用一对""表示。一对""内可以声明0个、1个或多个字符
- String与基本数据类型变量间的运算
String类型是可以与8种基本数据类型的变量做运算的。String只能与8种基本数据类型的变量做连接运算:+连接运算的结果只能是String类型。
7. 进制(了解)
- 计算机中存储和运算的
所有数据
都要转为二进制
。包括数字、字符、图片、声音、视频等。
7.1 常见的几种进制
- 熟悉:
十进制(decimal)数字组成:0-9进位规则:满十进一二进制(binary)数字组成:0-1进位规则:满二进一,以0b或0B开头八进制(octal):很少使用数字组成:0-7进位规则:满八进一,以数字0开头表示十六进制数字组成:0-9,a-f进位规则:满十六进一,以0x或0X开头表示。此处的 a-f 不区分大小写
7.2 二进制与十进制间的转换
熟悉:二进制与十进制间的转换(见ppt)
- 表示二进制整数时,最高位为符号位。0:正数;1:负数。
- 二进制整数在存储时,涉及到原码、反码、补码。
- 正数:三码合一。
- 负数:负数的原码,除符号位外,各个位取反,得到负数的反码。
负数的反码+1,得到负数的补码。
- 计算机底层都是以二进制
补码
的形式存储数据的。
7.3 二进制与其它进制间的转换
- 了解:二进制与八进制、十六进制间的转换
第03章:IDEA的安装与使用
1. 认识IDEA的地位、特点
- Java开发中占比第1。
- Eclipse?IDEA?① 符合人体工程学 ② 功能强大
2. IDEA的下载、安装、注册
略
3. IDEA的基本使用
- 在IDEA中能创建一个工程:Project。
- 在工程的src下写一个HelloWorld,并运行
- 安装课件中的第5节中的设置,作必要的修改。
4. 熟悉工程、module中jdk和设置语言级别操作

关于工程:

关于Module:

添加SDK:

5. 熟悉Project-Module-Package-Class的关系
- 上一级和下一级之间是一对多的关系。
- 掌握:新建Project、新建Module、删除Module、导入老师的Module(难点)
6. 关于IDEA的其它操作
- 模板的使用
- 快捷键的使用
- Debug程序
- 插件的使用
第04章:运算符与流程控制
1. 运算符之1:算术运算符
- % : 结果与被模数的符号相同。常用来判别是否能整除一个数。
- (前)++ 与 (后)++ ;(前)-- 与 (后)--
2. 运算符之2:赋值运算符
- = : 与 == 的区别。= 的右边是变量或常量。"连续赋值" (int i,j;i = j = 10;)
- += -= *= /= %= :运算后,不会改变变量的类型。(int i = 1; i *= 0.1; )
3. 运算符之3:比较运算符
> < >= <=
只能适用于7种基本数据类型(不含boolean)
== !=
适用于8种基本数据类型、引用数据类型。
- 比较运算符的结果是boolean类型。
4. 运算符之4:逻辑运算符
- 逻辑运算符操作的是boolean类型,结果也是boolean类型
- & 与 && 的区别;| 与 || 的区别
5. 运算符之5:位运算符(非重点)
- 位运算符操作的整数类型
- << >> >>>的应用场景
6. 运算符之6:条件运算符
(条件表达式)? 表达式1 : 表达式2规则:判断条件表达式是true还是false,如果是true,则执行表达式1;如果是false,则执行表达式2如果将运算的结果赋给一个变量的话,要求:表达式1与表达式2的类型一致。(相同 或 满足自动类型提升的规则即可)
- 案例:获取两个数的较大值;获取三个数的最大值
- 与分支结构的if-else对比:
凡是可以使用条件运算符的地方,都可以改写为if-else。反之,不一定。在既可以使用条件运算符,又可以使用if-else的场景下,推荐使用条件运算符。因为条件运算符效率稍高。
7. 运算符的优先级
- 我们在开发中,如果希望某个运算符优先运算的话,主动的添加一对()。
- 常见的一些运算符优先级谁高谁低呢?基本上是
如你所想
。
- 大家在开放时,如果涉及到多个运算符做运算,建议可以
分行写
。
8. 流程控制语句概述
9. 分支结构1:if-else
- 格式
- 说明
10. 分支结构2:switch-case
- 格式
- 说明
- if-else 与 switch-case的对比
11. 循环结构1:for
- 循环的概述
- 格式
- 说明
12. 循环结构2:while
- 格式
- 执行过程
- 说明
13.循环结构3:do-while
- 格式
- 执行过程
- 说明
- 使用场景
14. "无限"循环
- 结构
- 使用场景
- 结束循环的方式
- 注意:必须确保此循环可以结束。否则就是死循环!我们开发中要避免死循环
15. 嵌套循环
- 格式
- 说明:上述的外层循环、内存循环可以是for、while、do-while
- 技巧:
- 外层循环执行m次,内层循环执行n次。意味着内层循环的循环体执行 m * n次
- 外层控制行数,内层控制列数
16. break、continue关键字的使用
相同点:① 都可以使用在循环结构中 ② 其后不能编写执行语句不同点:① 结束循环结构;结束当次循环 ②使用范围:break:switch-case结构中使用
17. Scanner的使用、随机数的获取
- Scanner的使用
- 如何获取随机数
18. 阶段项目1:谷粒记账软件
略
第05章:数组
1. 数组的概述(理解)
2. 一维数组的使用(重点)
3. 二维数组的使用(熟悉)
- 二维数组的理解
- 基本内容
- 数组元素的默认值
4. 数组的常用算法(熟练)
- 算法常用操作1
- 算法常用操作2
5. Arrays:数组的工具类(熟悉)
6. 小结:数组中的常见异常
第06章:面向对象-基础
1. 理解:面向过程vs面向对象
2. 面向对象的要素:类、对象
- 区分类与对象
- 类:抽象的、概念上的定义
- 对象:具体的,实实在在存在的,由类派生出来的
- 设计类,就是设计类的成员:属性、方法
- 面向对象完成具体功能的操作的三步流程(非常重要)
- 对象的内存解析
- JVM内存分配:虚拟机栈、堆、方法区(目前用不到)、程序计数器(略)、本地方法栈(略)
- 虚拟机栈:存放的是方法对应的栈帧,每个栈帧中存放方法中声明的局部变量。
- 堆:new出来的"东西":数组实体、对象实体(含成员变量)
- 创建类的1个对象、创建类的多个对象(内存解析图建议大家都自己画画)
3. 类的成员之一:属性(重点)
4. 类的成员之二:方法(重点)
4.1 方法的使用
4.2 return关键字
5. 内存的分配使用
5.1 方法调用的内存解析

5.2 目前为止,内存分析(重要)
- 基本原则
1、JVM中内存划分
- 栈:以栈帧为基本单位(每个方法对应一个栈帧);栈帧里存放局部变量。
- 堆:new 出来的"东西":数组实体(含数组元素)、对象实体(含成员变量)
2、区分清成员变量(类内部、方法外声明的)、局部变量(方法的形参、方法内定义的变量、构造器内定义的变量、构造器的形参、代码块内部等)3、值传递机制:
- 如果参数是基本数据类型,传递的是基本数据类型变量存储的
数据值
- 如果参数是引用数据类型,传递的是引用数据类型变量存储的
地址值
6. 再谈方法
6.1 方法的重载(overload )
后续会讲:方法的重写(overwrite / override)
面试题:方法的重载与重写的区别?
6.2 可变个数形参的方法
6.3方法的参数传递机制(难点、重点)
6.4 递归方法(熟悉)
7. 对象数组(难点)

8. 关键字:package、import
- package:包,指明了Java中的类、接口等结构所在的包。声明在文件的首行
- import:导入。指明在当前类中使用的其它包中的结构。声明在package下,类的声明之前。
9. 面向对象的特征一:封装性
- 什么是封装性?
- 如何体现封装性?
- 为什么需要封装性?
10. 类的成员之三:构造器
11. 其它几个小知识
11.1 类中实例变量的赋值位置及顺序
11.2 JavaBean
11.3 UML类图
理解
11.4 匿名对象
第07章:面向对象-进阶
1. 关键字:this
- this可以调用属性、方法;构造器。
- 记住:this必须使用的场景:属性与形参同名时;调用重载的构造器
2. 面向对象特征二:继承性
- 为什么需要继承性?
- 继承的出现减少了代码冗余,提高了代码的复用性。
- 继承的出现,更有利于功能的扩展。
- 继承的出现让类与类之间产生了
is-a
的关系,为多态的使用提供了前提。
- 什么是继承性?
- class B extends A{}
继承中的基本概念:
A类:父类、SuperClass、超类、基类
B类:子类、SubClass、派生类
- 继承性的基本使用
3. 方法的重写
4. 关键字:super
- super调用父类的属性、方法;构造器
- 使用场景:子父类中出现同名属性;子类重写了父类的方法时。
super调用构造器,体现加载父类的结构。
5. 子类对象实例化的全过程(了解)
6. 面向对象特征三:多态性
6.1 向上转型:多态
- Java中的多态性体现为:子类对象的多态性(狭义上理解)。即父类的引用指向子类的对象。
- 应用场景:当通过父类的引用调用方法时,实际执行的是子类重写父类的方法。
- 好处:多态性常使用在方法的形参位置。多态的出现,极大的减少了方法的重载,同时有利于程序的扩展。
- 举例:① equals(Object obj) ② Account - Customer : setAccount(Account acct) ③ 凡是代码中出现了抽象类、接口,都可以体现为多态性。
- 共识:Java中的多态性(广义上理解):1、子类对象的多态性。 2、方法的重写。
6.2 向下转型:多态的逆过程
- Student s = (Student)new Person(); //编译通过,运行不通过。
- 如何向下转型:使用强转符:()
- 可能出现的问题:可能会出现ClassCastException异常
- 如何解决?建议在强转前进行instanceof的判断。
7. Object类的使用
7.1 equals()方法
7.2 toString()方法
8. 项目二:拼电商客户管理系统
- 项目中主要的类:
- (重点)封装客户数据的类:Customer
- (重点)管理多个客户对象的类:CustomerList
- 与用户交互的管理界面操作的类:CustomerView
- 封装Scanner的工具类:CMUtility
第08章:面向对象-高级
1. 关键字:static
2. 单例模式
3. main()的理解(了解)
4. 类的内部成员之四:代码块
4.1 代码块的基本使用
4.2 属性赋值位置、过程
5. 关键字:final
6. 关键字:abstract
7. 与类并列的结构:接口(interface)
8. 类的内部成员之五:内部类
9. 枚举类
10. 注解
11. 包装类
12.IDEA的使用
- IDEA常用的快捷键
- IDEA的debug功能
第09章:异常处理
1. 异常的概述、理解
2. 常见的异常(重点)
3. 异常的处理(重点)
3.1 try-catch-finally
- try-catch的使用
- finally的使用
3.2 throws
- 如何选择两种处理方式?
4. 手动抛出异常的对象(熟悉)
5. 如何自定义异常类(熟悉)
五个关键字:try-catch-finallythrowsthrow
第10章:多线程
1. 相关概念
- 掌握:程序、进程、线程
- 熟悉:线程的调度机制:分时调度、抢占式调度
- 了解:单核CPU、多核CPU
- 了解:并行与并发
2. 创建多线程的两种经典方式(重点)
3. 线程的常用方法、生命周期
- 生命周期
- jdk5.0之前:
- jdk5.0


4. 线程的安全问题与同步机制(重点)
5. 同步机制的相关问题
5.1 解决懒汉式的线程安全问题(重点)
5.2 死锁问题
5.3 JDK5.0新增解决安全问题的方式:Lock
6. 线程的通信
7. JDK5.0新增两种创建多线程的方式
- 使用Callable接口
- 使用线程池
第11章:常用类与基础API
1、String
- String的声明:final 、实现Comparable接口等
- String内部的属性:final char[] value (jdk8中);final byte[] value(jdk9中)
- String的声明方式1:使用字面量的方式。需要使用字符串常量池。
- String的不可变性
- String的声明方式2:new
- String的特殊运算: +
- 常量 + 常量;变量+ 常量 ; 变量+变量;concat();intern()
- String的构造器、常用方法
2、与String相关的类:StringBuffer、StringBuilder
- String、StringBuffer、StringBuilder三个的异同。
- StringBuffer、StringBuilder的常用方法:增、删、改、查、插、长度、反转
- 三者添加数据方面的执行效率:StringBuilder > StringBuffer > String
3、比较器
开发中只要涉及到对象比较大小,都跟比较器打交道。
3.1 自然排序:Comparable
3.2 定制排序:Comparator
4、日期时间相关的API
4.1 jdk8之前相关API
- System的currentTimeMillis()
- java.util.Date 和 java.sql.Date
- getTime() \ toString()
- SimpleDateFormat:用来格式化、解析日期
- 格式化:String format(Date date)
- 解析:Date parse(String str)
- Calendar:日历类,抽象类
- 实例化:getInstance()
- 方法:get(int field) 、set(int field,...)、add(...),Date getTime() 、 setTime(Date date)
4.2 jdk8新增的API
- LocalDate、LocalTime、LocalDateTime --> 类似于Calendar
- Instant : 瞬时 ---> 类似于Date
- DateTimeFormatter :类似于SimpleDateFormat。针对LocalDate、LocalTime、LocalDateTime的格式化或解析操作
5、其他api的使用
第12章:集合框架
1、集合与数组的对比
- 数组的特点、弊端
- 集合框架结构
2、Collection中的常用方法
3、迭代器Iterator
4、Collection的子接口1:List接口
5、Collection的子接口2:Set接口
- Set的实现类的特点
- Set中的常用方法
- Set的实现类:HashSet
- Set的实现类:TreeSet
6、Map接口的使用
- Map的实现类的对比
- HashMap的存储数据的特点
- Map中的常用方法
- Map的实现类:TreeMap
- Map的实现类:Hashtable与Properties
7、操作集合的工具类:Collections
第13章:jdk5.0新特性:泛型
1、在集合中使用泛型前后的对比
2、在其它结构中使用泛型
- 比较器:Comparable
- 比较器:Comparator
3、如何自定义泛型类、泛型接口、泛型方法
4、泛型在继承上的体现
5、通配符、有条件限制的通配符的使用
第14章:数据结构与集合源码
1、数据结构
- 数据结构的研究对象
- 常见的数据存储结构
2、集合源码
- List的实现
- HashMap的底层实现
第15章:File类与IO流
1. File类的使用
2. IO流的概述
- 流的分类
- 流的流向:输入流、输出流
- 操作的数据单位:字节流、字符流
- 角色的不同:节点流、处理流
- 4个抽象基类

- 整个流这一章涉及到的具体的流的使用,操作的步骤都是标准规范的。
- 步骤1:创建File的对象
- 步骤2:创建流的对象,构造器中需要传入File的对象
- 步骤3:读取、写出操作的细节
- 步骤4:关闭资源
3. 文件流的使用
- FileInputStream与FileOutputStream、FileReader与FileWriter
- 注意点1:
- 注意点2:
4. 处理流之一:缓冲流
- BufferedInputStream与BufferedOutputStream、BufferedReader与BufferedWriter
- 作用:加快文件的读写效率。
- 原理:内部提供了缓冲区(数组实现的),减少和磁盘交互的次数。
4个缓冲流 使用的方法 处理非文本文件的字节流: BufferedInputStream read(byte[] buffer) BufferedOutputStream write(byte[] buffer,0,len) \ flush() 处理文本文件的字符流: BuffferedReader read(char[] buffer)\readLine() BufferedWriter write(char[] buffer,0,len) \ flush() 3. 实现的步骤 第1步:创建File的对象、流的对象(包括文件流、缓冲流) 第2步:使用缓冲流实现 读取数据 或 写出数据的过程(重点) 读取:int read(char[] cbuf/byte[] buffer) : 每次将数据读入到cbuf/buffer数组中,并返回读入到数组中的字符的个数 写出:void write(String str)/write(char[] cbuf):将str或cbuf写出到文件中 void write(byte[] buffer) 将byte[]写出到文件中 第3步:关闭资源
5. 处理流之二:转换流
- InputStreamReader和OutputStreamWriter
- 基本使用

1. 复习 字符编码:字符、字符串 ----> 字节、字节数组。对应着编码集 字符解码:字节、字节数组 ---> 字符、字符串。对应着解码集 2. 如果希望程序在读取文本文件时,不出现乱码,需要注意什么? 使用的解码集必须与当初保存文本文件使用的编码集一致。
6. 处理流之三:对象流
- 了解:数据流:DataInputStream 、DataOutputStream
- 读写8种基本数据类型的变量、String、字节数组
- 掌握:ObjectInputStream、ObjectOutputStream
- 读写8种基本数据类型的变量、对象(readObject();writeObject(Object obj))
- 掌握:对象的序列化机制
- 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。//当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。
序列化过程:将内存中的Java对象转换为二进制流,保存在文件中或通过网络传输出去。 使用ObjectOutputStream 反序列化过程:将文件中或者通过网络接收到的二进制流转换为内存中的Java对象 使用ObjectInputStream
- 熟悉:自定义类要想实现序列化机制,需要满足:
7. 其它流的使用
- 标准的输入、输出流
- 打印流
- 使用第三方框架
- apache-common包
第16章:网络编程
1. 网络编程概述
2. 要素1:InetAddress类的使用
3. 要素2:端口号
4. 要素3:网络通信协议
5. TCP网络编程、UDP网络编程
- TCP、UDP的对比

- 熟悉:TCP的三次握手、四次挥手。
- 例题
- 例题1:客户端发送内容给服务端,服务端将内容打印到控制台上。
- 例题2:客户端发送文件给服务端,服务端将文件保存在本地。
- 例题3:从客户端发送文件给服务端,服务端保存到本地。并返回“发送成功”给客户端。并关闭相应的连接。
6. URL网络编程
第17章:反射机制
1. Class 的使用
- 掌握:Class的理解
- 掌握:获取Class的实例(前三种)
- 熟悉:Class可以指向哪些具体的结构?
- 类、接口、注解、枚举、基本数据类型、数组、void等
2. 类的加载与类的加载器
- 类的加载过程:

- 了解:类的加载器
3. 反射的应用1:创建运行时类的对象(掌握)
- jdk8及之前:Class的newInstance()
- jdk8之后:调用指定的构造器,设置构造器的访问权限,创建对象
4. 反射的应用2:获取运行时类的完整结构
- 了解:获取所有的属性、所有的方法、所有的构造器、声明的注解等。
- 熟悉:获取运行时类的父类、实现的接口们、所在的包、带泛型的父类、父类的泛型等
5. 反射的应用3:调用指定的属性、方法、构造器
6. 反射的应用4:注解的使用(了解)
略。为了后期学习框架做准备
7. 体会反射的动态性
见课后练习题。
第18章:JDK8-17新特性
1. 新特性概述
2. JDK8:lambda表达式、方法引用等
重点!
3. JDK8:Stream API的使用
重点!
4. 其它新特性
- 熟悉:Optional的使用
- try-catch、switch表达式、var、instanceof模式匹配、密封类等。
- 作者:Samuel Hu
- 链接:http://www.hjw-aihub.cn/technology/Java
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。