首页 > 编程语言 >黑马程序员Java进阶学习(三)

黑马程序员Java进阶学习(三)

时间:2024-10-22 20:18:55浏览次数:3  
标签:字符 Java 进阶 文件 缓冲 程序员 集合 异常 字节

异常

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

相关文章

  • 【java】抽象类和接口(了解,进阶,到全部掌握)
    各位看官早安午安晚安呀如果您觉得这篇文章对您有帮助的话欢迎您一键三连,小编尽全力做到更好欢迎您分享给更多人哦大家好我们今天来学习Java面向对象的的抽象类和接口,我们大家庭已经来啦~一:抽象类1.1:抽象类概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是......
  • java的三大程序结构
    JAVA的三大程序结构一:顺序结构程序走上执行到下。二:选择结构if单选择结构if(布尔表达式){//如果布尔表达式的值为ture则执行{}里的语句块}publicclassIfDemo01{publicstaticvoidmain(String[]args){//接收键盘输入Scannerscanner=newSca......
  • java计算机毕业设计基于的仓储管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着经济的发展和商业活动的日益频繁,仓储管理在企业运营中的重要性不断凸显。传统的仓储管理方式多依赖人工操作,例如依靠纸质文件记录货物的进出......
  • java计算机毕业设计机票订单管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着旅游业的蓬勃发展以及人们出行需求的不断增加,航空运输作为一种快速、便捷的交通方式,在现代交通体系中占据着越来越重要的地位。据统计,近年来......
  • java计算机毕业设计基于springboot的低碳生活记录网站(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着全球气候变化问题的日益严峻,低碳生活方式的推广成为了全球共同关注的焦点。传统的低碳生活推广主要依赖于线下宣传、教育活动等方式,然而这些......
  • java计算机毕业设计重修课程信息管理(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在现代教育体系中,随着教育规模的不断扩大以及课程体系的日益复杂,重修课程管理面临着诸多挑战。传统的重修课程管理多依赖手工操作,这种方式效率低......
  • java笔记
    注释单行注释 ////单行注释多行注释/*注释注释*/文档注释/**文档注释*/标识符所有的标识符都应以字母,美元符($)或下划线(_)开始标识符是大小写敏感的 数据类型强类型语言要求变量的使用要严格符合规定,所有的变量都必须先定义后使用  两大类......
  • 使用 `com.google.gson` 库将 Java 对象转换为 JSON 字符串,并且确保 `data` 字段是 `M
    要使用com.google.gson库将Java对象转换为JSON字符串,并且确保data字段是Map<String,Object>类型的,你可以按照以下步骤编写一个示例代码。这个示例代码将创建一个包含data字段的Java对象,并将data字段初始化为一个Map<String,Object>,然后动态地向其中添加......
  • 自学狂神说Java第三天
    计算机语言发展史第一代语言机器语言(二进制)第二代语言汇编语言第三代语言高级语言大体上分为面向过程(c语言)和面向对象(c++JAVA)相辅相成摩尔定律初识Javajava首次亮相1995年分出三个小队向外扩张java2标准版(J2SE):去占领桌面java2移动版(......
  • Java设计模式学习之代理模式
    代理模式目录代理模式代理模式的主要角色包括:代理模式的几种类型:应用场景:优点:缺点:代理模式(ProxyPattern)是结构型设计模式之一,它为其他对象提供一个代理对象以控制对这个对象的访问。代理模式在不直接访问实际对象的情况下,提供了对目标对象的间接访问。这种模式在实际编程中非......