异常
Java的异常体系
异常的基本处理
异常的作用
异常是什么?
异常是代码在编译或者执行的过程中可能出现的错误。
异常的代表是谁?分为几类?
Exception,分为两类:编译时异常、运行时异常。
编译时异常:没有继承RuntimeExcpetion的异常,编译阶段就会出错。
运行时异常:继承自RuntimeException的异常或其子类,编译阶段不报错,运行时出现的。
异常的作用是啥?
用来查找bug;可以作为方法内部的特殊返回值,通知上层调用者底层的执行情况。
自定义异常
异常的处理方案
异常的两种处理方式
泛型
泛型类
泛型接口
泛型方法、通配符、上下限
泛型支持的类型
集合框架
集合是一种容器,用来装数据的,类似于数组,但集合的大小可变,开发中也非常常用。
集合体系结构
Collection的常用功能
Collection的遍历三种方式
迭代器遍历
迭代器的执行流程
1、如何获取集合的迭代器? 迭代器遍历集合的代码具体怎么写?
Iterator<E> iterator():得到迭代器对象,默认指向当前集合的索引0
2、通过迭代器获取集合的元素,如果取元素越界会出现什么异常?
会出现NoSuchElementException异常。
增强for循环
Lambda表达式
认识并发修改异常问题
解决并发修改异常问题的方案
List集合
List集合的特有方法
List集合支持的遍历方式
for循环(因为List集合有索引)
迭代器
增强for循环
Lambda表达式
ArrayList和LinkedList的区别
ArrayList的底层原理
LinkedList的底层原理
基于双链表实现的。
set集合
HashSet集合的底层原理
哈希表存储数据的详细流程
创建一个默认长度16,默认加载因为0.75的数组,数组名table
根据元素的哈希值跟数组的长度计算出应存入的位置
判断当前位置是否为null,如果是null直接存入,如果位置不为null,表示有元素, 则调用equals方法比较属性值,如果一样,则不存,如果不一样,则存入数组。
当数组存满到16*0.75=12时,就自动扩容,每次扩容成原先的两倍
HashSet集合去重复的机制
TreeSet集合
自定义排序规则
小结:
TreeSet集合的特点是怎么样的?
可排序、不重复、无索引
底层基于红黑树实现排序,增删改查性能较好
TreeSet集合对自定义类型的对象排序,有几种方式指定比较规则?
2种。
类实现Comparable接口,重写比较规则。
集合自定义Comparator比较器对象,重写比较规则。
Map集合
Map集合是什么?什么时候可以考虑使用Map集合?
Map集合是键值对集合
需要存储一一对应的数据时,就可以考虑使用Map集合来做
Map集合的实现类有哪些?各自的特点是?
HashMap: 元素按照键是无序,不重复,无索引,值不做要求。
LinkedHashMap: 元素按照键是有序,不重复,无索引,值不做要求。
TreeMap:元素按照建是排序,不重复,无索引的,值不做要求。
Map集合的常用方法
Map集合的遍历方式
File
File提供的判断文件类型、获取文件信息功能
File提供的创建和删除文件的方法
File提供的遍历文件夹的方法
小结:
1、File类构建对象的方式是什么样的?File的对象可以代表哪些东西?
File file = new File(“文件/文件夹/绝对路径/相对路径”);
2、绝对路径和相对路径是什么意思?
绝对路径是带盘符的。
相对路径是不带盘符的,默认到当前工程下寻找文件。
小结:
创建多级目录使用哪个方法?
public boolean mkdirs()
删除文件需要注意什么?
可以删除文件、空文件夹。
默认不能删除非空文件夹。
如何遍历文件夹下的文件对象,使用哪个API,有什么特点?
public File[] listFiles()(常用)。
只能遍历当前文件夹对象下的一级文件对象。
递归
递归是一种算法,在程序设计语言中广泛应用。
从形式上说:方法调用自身的形式称为方法递归( recursion)。
递归的形式
直接递归:方法自己调用自己。
间接递归:方法调用其他方法,其他方法又回调方法自己。
使用方法递归时需要注意的问题:
递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。
tips:什么是递归死循环?
方法无限调用自己,无法终止,最终引起栈内存溢出。
递归算法的三要素
字符
使用程序对字符进行编码和解码操作
IO流
IO流的分类
小结:
IO流的作用?
读写文件数据的
IO流是怎么划分的,大体分为几类,各自的作用?
字节输入流 InputStream(读字节数据的)
字节输出流 OutputStream(写字节数据出去的)
字符输入流 Reader(读字符数据的)
字符输出流 Writer(写字符数据出去的)
io流的体系
FileInputStream(文件字节输入流)
注意事项
一次读取完全部字节
小结:
文件字节输入流,读取文件数据的步骤?
创建文件字节输入流管道与源文件接通.
如何使用字节输入流读取中文内容输出时不乱码呢?
一次性读取完全部字节。
直接把文件数据全部读取到一个字节数组可以避免乱码,是否存在问题?
如果文件过大,定义的字节数组可能引起内存溢出。
FileOutputStream文件字节输出流
小结:
字节流非常适合做文件的复制操作
任何文件的底层都是字节,字节流做复制,是一字不漏的转移完全部字节,只要复制后的文件格式一致就没问题!
资源释放的方案
小结:
文件字符输入流的作用是啥?
可以用于读取文本文件中的字符,非常适合。
文件字符输入流如何读取数据?
创建FileReader的对象,调用其read方法读取字符。
缓冲流
BufferedInputStream缓冲字节输入流
作用:可以提高字节输入流读取数据的性能
原理:缓冲字节输入流自带了8KB缓冲池;缓冲字节输出流也自带了8KB缓冲池。
字节缓冲流如何使用?
public BufferedOutputStream(OutputStream os)
public BufferedInputStream(InputStream is)
功能上并无很大变化,性能提升了。
小结:
字符缓冲流有几种,作用是什么?
字符缓冲流自带8K缓冲区
可以提高原始字符流读写数据的性能
两种字符缓冲流如何使用?各自新增了什么功能?
public BufferedReader(Reader r)
性能提升了,多了readLine()按照行读取的功能
public BufferedWriter(Writer w)
性能提升了,多了newLine()换行的功能
原始流、缓冲流的性能分析[重点]
测试用例:
分别使用原始的字节流,以及字节缓冲流复制一个很大视频。
测试步骤:
使用低级的字节流按照一个一个字节的形式复制文件。
使用低级的字节流按照字节数组的形式复制文件。
使用高级的缓冲字节流按照一个一个字节的形式复制文件。
使用高级的缓冲字节流按照字节数组的形式复制文件。
推荐使用哪种方式提高字节流读写数据的性能?
建议使用字节缓冲输入流、字节缓冲输出流,结合字节数组的方式,目前来看是性能最优的组合。
InputStreamReader(字符输入转换流)
字符输入转换流InputStreamReader的作用是啥?
可以解决字符流读取不同编码乱码的问题
public InputStreamReader(InputStream is,String charset):
可以指定编码把原始字节流转换成字符流,如此字符流中的字符不乱码。
打印流
PrintStream和PrintWriter的区别
打印数据的功能上是一模一样的:都是使用方便,性能高效(核心优势)
PrintStream继承自字节输出流OutputStream,因此支持写字节数据的方法。
PrintWriter继承自字符输出流Writer,因此支持写字符数据出去。
小结:
打印流有几种?各有什么特点?
打印流一般是指:PrintStream,PrintWriter两个类。
打印功能2者是一样的使用方式
PrintStream继承自字节输出流OutputStream,支持写字节
PrintWrite继承自字符输出流Writer,支持写字符
打印流的优势是什么?
两者在打印功能上都是使用方便,性能高效(核心优势)
DataOutputStream(数据输出流)
DataInputStream(数据输入流)
IO框架
封装了Java提供的对文件、数据进行操作的代码,对外提供了更简单的方式来对文件进行操作,对数据进行读写等。
标签:字符,Java,进阶,文件,缓冲,程序员,集合,异常,字节 From: https://blog.csdn.net/weixin_75119708/article/details/143165852