总结中用到的相关案例【随时复习,随时更新】:https://github.com/Web-Learn-GSF/Java_Learn_Examples
JavaSE总结
JavaSE基础知识
文章链接: https://blog.csdn.net/qq_45445505/article/details/133633514
背景知识
| |
---|
三种技术架构 | Java SE、Java ME、Java EE |
Java跨平台工作的原理? | JDK、JRE、JVM的关联联系? |
| Java发展历程(长期支持版本) |
| java项目结构(项目、模块、包、类) |
基础语法
| |
---|
注释 | 单行注释、多行注释、文档注释 |
关键字 | |
字面量、变量、常量 | |
标识符 | 合法的命名规则 |
| 常量、变量、方法、类等的命名规则 |
数据类型 | 基本数据类型(8种) |
| ASCLL码表 |
| 引用数据类型(类、接口、数组) |
运算符 | 运算符、表达式 |
| 算术运算符、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符、运算符优先级 |
| 类型转换(隐形转换、强制转换) |
方法(函数)
| |
---|
定义格式 | |
方法调用内存图解 | JVM内存分配 |
| 函数调用,各个内存区域调用细节 |
方法重载 | |
流程控制语句
| |
---|
顺序结构 | 默认 |
分支结构 | if…else |
循环结构 | for、while、do…while |
跳转控制语句 | break、continue |
数组
| |
---|
静态初始化 | 一维数组、二维数组 |
动态初始化 | 一维数组、二维数组 |
数组及其所属类型、初始化方式和默认值 | 整数数组、小数数组、字符数组、布尔数组、(类、接口、数组)数组 |
字符串
| |
---|
String类 | 特点 |
| 字符串常量池 |
| 字符串比较操作 |
StringBuilder类 | 构造方法 |
| 长度可变原理(扩容原理) |
| 基本操作:添加、反转、获取长度、转为字符串 |
StringBuffer类 | 跟StringBuilder的区别(线程安全) |
JavaSE进阶知识-1-面向对象
文章链接:https://blog.csdn.net/qq_45445505/article/details/134038124
面向对象-1-基本、封装
| |
---|
类和对象基本 | 类的组成:成员变量和成员方法 |
| this关键字 |
| 构造方法 |
封装 | 权限修饰符 |
面向对象-2-static、final、继承
| |
---|
static关键字 | 被修饰成员(成员变量、成员方法)特点、注意事项 |
final关键字 | 用于修饰类、修饰方法、修饰成员变量 |
继承 | 继承关系中成员变量、成员方法、构造方法的各自特点 |
| 继承关系的内存图解 |
| this、super的区别 |
面向对象-3-包、抽象类、接口、多态
| |
---|
包 | 导包、建包 |
抽象类 | 定义格式、注意事项 |
接口 | 接口特点、其内部成员特点 |
| 接口和类的关系(类和类、接口和类、接口和接口) |
| 接口和抽象类在(成员变量、成员方法、构造方法)上的区别 |
| 接口新特性 |
多态 | 实现前提(3要素) |
| 多态访问非静态成员 |
| 多态访问静态成员 |
| 多态的好处和不足 |
| 多态转型 |
面向对象-4-代码块、内部类、Lambda表达式
| |
---|
代码块 | 局部代码块、构造代码块、静态代码块、同步代码块 |
内部类 | 成员内部类、静态内部类、局部内部类、匿名内部类 |
Lambda表达式 | Lambda表达式和匿名内部类的区别 |
JavaSE进阶知识-2-递归、流、异常、File、包装类、时间类
文章链接: https://blog.csdn.net/qq_45445505/article/details/134038173
实用类:Objects、Math、System、BigDecimal
| |
---|
Objects | 所有的类都直接或间接继承该类(祖宗类),其内的方法都可用 |
Math | 包含基本的数字运算方法 |
System | 都是静态方法,可以直接调用 |
BigDecimal | 用于解决小数运算中,出现的不精确问题 |
包装类
| |
---|
8大基本数据类型对应的包装类 | |
自动拆箱、自动装箱 | |
包装类的比较问题 | |
时间类
| |
---|
JDK8以前的时间类 | Date、SimpleDateFormat、Calendar |
JDK8以后的时间类 | 日历类(获取当前时间):LocalDate、LocalTime、LocalDateTime |
| 日期格式化类(格式化时间):DateTimeFormatter |
| 时间类(获取时间):Instant、ZoneId、ZoneDateTime |
| 工具类(计算时间间隔):Period、Duration、ChronoUnit |
递归
方法直接或间接调用本身
异常
| |
---|
异常体系 | |
异常处理方法 | 默认抛出 |
| 异常捕捉 |
throw和throws的区别 | |
JavaSE进阶知识-3-集合
文章链接:https://blog.csdn.net/qq_45445505/article/details/134038198
补充知识-泛型
| |
---|
泛型有关的版本信息 | |
泛型类 | 常用泛型标识符 |
泛型方法 | 非静态泛型方法 |
| 静态泛型方法 |
泛型接口 | 类实现接口的时候,直接确定泛型 |
| 延续接口的泛型,等创建对象的时候再确定 |
泛型通配符 | 可以让一个方法传入不同的对象类型 |
补充知识-树
| |
---|
树的基本概念 | 节点、度、树高、根节点、左子节点、右子节点、根节点的左子树、根节点的右子树 |
二叉树-普通二叉树 | |
二叉树-二叉查找树 | 数据分布特点(大小) |
| 节点添加流程 |
| 优点、不足 |
二叉树-平衡二叉树 | 定义 |
| 旋转机制 |
二叉树-红黑树 | 定义 |
| 红黑规则 |
补充知识-常见数据结构
| |
---|
常见数据结构 | 栈、队列、数组、链表、双向链表、树 |
集合底层数据结构 | Collection-List |
| Collection-Set |
| Map |
集合基本
| |
---|
集合分类 | 大分类、小分类 |
集合的遍历方式 | 通用遍历方式:迭代器、增强for、forEach |
| 额外遍历方式-List集合:普通for循环、ListIterator(List集合特有的迭代器) |
Collection接口
| |
---|
通用函数 | add、clear、remove、contains、isEmpty、size |
List-ArrayList | 支持索引 |
| 增、删、改、查 |
| ArrayList长度可变原理 |
List-LinkedList | 增、删、改、查 + 查首个元素、查尾部元素(非索引) |
| |
Set-TreeSet | 具备排序功能的集合(红黑树实现) |
| 自然排序:常见类、自定义类 |
| 比较器排序 |
Set-HashSet | 可以保证数据唯一性 |
| 底层实现的版本信息 |
| 数据存储过程、数组扩容、链表转红黑树 |
| 特点 |
Set-LinkedHashSet | 可以保证存取有序 |
| 相对于HashSet多了一个双链表存储顺序 |
Collection类集合的选用 | |
Collections工具类 | |
Map接口
| |
---|
基础介绍 | 双列集合、元素格式 |
Map类别 | TreeMap、HashMap、LinkedHashMap |
通用方法 | put、remove、clear、containsKey、containsValue、isEmpty、size |
HashMap底层原理理解 | |
Map集合遍历方式 | forEach方法 |
| 通过键值对对象获取键、值 |
| 通过键找值 |
Map集合选用 | |
JavaSE进阶知识-4-IO流(字符流、字节流)
文章链接:https://blog.csdn.net/qq_45445505/article/details/134038259
IO概述
IO整体总结
| |
---|
类1-1 | 字节流、字符流 |
类1-2 | 字节缓冲流、字符缓冲流 |
类1-3 | 字节打印流、字符打印流 |
类2 | 转换流 |
类3-1 | 序列化流、反序列化流 |
类3-2 | 压缩流、解压缩流 |
字节流
| | |
---|
一切皆字节 | 可以传输任何形式的数据 | |
字节输出流 | 抽象父类OutputStream | |
| 实现子类-文件输出流-FileOutputStream | 构造方法 |
| | 写字节数据-单个 |
| | 写字节数据-多个-数组 |
| | 数据追加写 |
| | 数据换行写 |
字节输入流 | 抽象父类-InputStream | |
| 实现子类-文件输入流-FileInputStream | 构造方法 |
| | 读字节数据-单个 |
| | 读字节数据-多个-数组 |
流的关闭原则 | | |
字符流
| | |
---|
处理文本文件 | | |
字符编码-字符集 | 字符编码 | |
| 字符集–ASCII、字符集–ISO-8859-1、字符集–GBxxx、字符集–Unicode | |
| | |
字符输出流 | 抽象父类-Writer | |
| 实现子类-FileWriter | 构造方法 |
| | 写字节数据-单个 |
| | 写字节数据-多个-数组 |
| | 写字节数据-多个-字符串 |
| | 数据续写 |
| | 数据换行写 |
| 流的关闭和刷新 | |
| | |
字符输出流 | 抽象父类-InputStream | |
| 实现子类-文件输入流-FileInputStream | 构造方法 |
| | 读字节数据-单个 |
| | 读字节数据-多个-数组 |
| 底层实现原理 | 文件关联、缓冲区 |
JavaSE进阶知识-5-IO流(缓冲流、转换流、序列化流、打印流、压缩流)
文章链接:https://blog.csdn.net/qq_45445505/article/details/134038277
缓冲流
| |
---|
字节缓冲流:BufferedInputStream、BufferedOutputStream | 构造方法 |
| 效率对比-字节流 |
| |
字符缓冲流:BufferedReader、BufferedWriter | 构造方法 |
| 特有方法:realLine()、newLine() |
| |
总结 | 字节缓冲流高效的原因(缓冲区) |
| 字符缓冲流,效率提升不明显(本来就有缓冲区) |
转换流
| |
---|
字符流和字节流之间的桥梁 | 将输入字节流转为输入字符流:InputStreamReader |
| 将输出字符流转为输出字节流:OutputStreamWriter |
| |
InputStreamReader | 构造方法 |
| 指定编码读取(转换流,JDK11后淘汰;用字符输入流) |
| |
OutputStreamWriter | 构造方法 |
| 指定编码写出(转换流;字符输出流) |
序列化流
| |
---|
序列化流 | 对象到字节-ObjectOutputStream |
| 序列化必备条件:实现Serializable接口;所有属性可序列化(不需要序列化的属性需特殊标记) |
| |
反序列化流 | 字节到对象-ObjectInputStream |
| 避免属性变更造成无法反序列化,需要提供一个序列版本号 |
| |
OutputStreamWriter | 构造方法 |
| 指定编码写出(转换流;字符输出流) |
打印流
| |
---|
只有输出流,不具备输入流 | |
| |
PrintStream-字节打印流 | 构造方法 |
| 改变打印流向 |
| |
PrintWriter-字符打印流 | 构造方法 |
| 成员方法 |
压缩流和解压缩流
| |
---|
压缩流 | 负责压缩文件或文件夹 |
解压缩流 | 负责把压缩包中的文件和文件夹解压出来 |
宗旨 | 体会思想,有很多现成的工具包 |
工具包
| |
---|
Commons-io | 是apache开源基金组织提供的一组有关IO操作的开源工具包,提高IO流的开发效率 |
hutool | 国人开发的开源工具包,里面有很多帮助我们提高开发效率的API |
JavaSE进阶知识-6-多线程
文章链接:https://blog.csdn.net/qq_45445505/article/details/134038302
多线程–基本概念
多线程–实现
| |
---|
1-继承Thread类 | |
2-实现Runnable接口 | |
3-实现Callable接口 | |
三种多线程实现方法对比 | |
多线程–线程方法
| |
---|
设置和获取线程名称 | |
线程休眠 | |
线程优先级 | |
守护线程 | |
礼让线程和插入线程 | |
线程的生命周期 | |
多线程–线程同步
| |
---|
买票例子举例 | |
实现线程同步的方法 | 同步代码块 |
| 同步方法 |
| 线程锁Lock |
多线程–死锁
理解即可
多线程–生产者消费者模式示例
多线程的6种状态
线程池
暂空
JavaSE进阶知识-7-UDP-TCP
文章链接:https://blog.csdn.net/qq_45445505/article/details/134038329
网络编程
| |
---|
概述 | 计算机网络、网络编程三要素 |
网络编程三要素–IP地址 | IP地址–分类:IPv4、IPv6 |
| IP地址–特殊的IP地址 |
| IP地址–获取:DOS命令、InetAddress类 |
网络编程三要素–端口 | 端口号 |
网络编程三要素–协议 | 什么是协议? |
| UPD协议 |
| TCP协议 |
UDP协议通信实现
| |
---|
三种通讯方式 | 单播、组播、广播 |
| 三种方式不同的地方在于,打包数据的时候,塞入不同的地址 |
发送数据 | 创建发送端的Socket对象(DatagramSocket)—【快递公司】 |
| 创建数据,并把数据打包—【用户打包数据】 |
| 调用DatagramSocket对象的方法发送数据—【快递员发送】 |
| 关闭发送端—【结账】 |
| |
接收数据 | 创建接收端的Socket对象(DatagramSocket)—【快递公司】 |
| 创建一个数据包,用于接收数据—【位置存放数据】 |
| 调用DatagramSocket对象的方法接收数据—【快递员接收】 |
| 解析数据包,并把数据在控制台显示 |
| 关闭接收端–【签收】 |
TCP协议通信实现
| |
---|
Java中,底层通过IO流来完成通信 | |
传输数据–常规(不带有中文) | |
传输数据–带有中文 | 需要用到转换流、字符缓冲流(不必备) |
JavaSE进阶知识-8-反射、动态代理
文章链接:https://blog.csdn.net/qq_45445505/article/details/134038354
反射
| |
---|
反射的理解 | 可以无视修饰符调用类里面的所有内容 |
概念:字节码文件和字节码文件对象的理解 | 反射要获取的是字节码文件对象,这个对象在内存中是唯一的 |
| |
掌握-获取class字节码文件对象 | 3中获取手段 |
掌握-利用反射获取构造方法 | 获取所有公开的、获取所有空开&飞公开的、获取单个公开的、获取单个公开&非公开的 |
掌握-利用反射获取成员变量 | 获取所有公开的、获取所有空开&飞公开的、获取单个公开的、获取单个公开&非公开的 |
掌握-利用反射获取成员方法利用反射获取成员方法 | 获取所有公开的、获取所有空开&飞公开的、获取单个公开的、获取单个公开&非公开的 |
动态代理
| |
---|
动态代理–好处 | 无侵入式的给方法增强功能 |
动态代理–三要素 | 真正干活的对象、代理对象、利用代理调用方法 |
动态代理–扩展应用 | 方法拦截 |