版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 异常的概述l 异常:异常就是Java程序在运行过程中出现的错误。l 异常由来:问题也是现实生活中一个具体事务,也可以通过java 的类的形式进行描述,并封装成对象。其实就是Java对不正常情况进行描述后的对象体现。l 我们见过的异常,角标越界异常,空指针异常 l 讲解IO流之前为什么先讲解异常和File类呢?l 因为File表示的是IO流将来要操作的文件,所以我们需要学习File类。 l 而操作文件无非就是上传文件和下载文件,在这个操作的过程中可能出现问题, l 出现问题后,我们需要对对应的代码进行处理。所以我们需要学习异常异常。异常分类异常分三类: 骑车去旅行: Error:走到半路上,
2、发生山路塌陷,或者出现了泥石流,这个问题很严重,不是班长能够立马解决的。 Exception:出门前,班长要看看车轮子以及车链子等是否还在 RuntimeException:在骑车的过程中,有好路不走,偏偏要走石子路 1,编译时异常除了RuntimeException及其子类,Exception中所有的子类都是,这种异常必须要处理,要不编译通不过2,运行是异常RuntimeException及其子类都是,这种异常不用处理,编译会通过,不过这样的程序会有安全隐患,遇到这种异常是需要改代码的3,严重错误问题用Error进行描述,这个问题发生后,一般不编写针对代码进行处理,而是要对程序进行修正.通常
3、都是由虚拟机抛出的问题异常举例l 除数为0l 数组访问越界 2 JVM的默认处理方案l 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台 l 程序停止执行l jvm发现运算是已经违反了数学运算规则,java将这种常见的问题进行描述,并封装成了对象叫做ArithmeticExceptionl 当除0运算发生后,jvm将该问题打包成了一个异常对象.l 并将对象抛给调用者main函数,new ArithmeticException("/by zero"); l main函数收到这个问题时,有两种处理方式:l 1,自己将该问题处理,然后继续运行l 2,自己没有针对的处理方
4、式,只有交给调用main的jvm来处理l jvm有一个默认的异常处理机制,就将该异常进行处理.并将该异常的名称,异常的信息.异常出现的位置打印在了控制台上l 同时将程序停止运行3 异常处理方案l 异常处理方案 trycatchfinally throwstrycatch处理方式l 一个异常的情况 l 多个异常的情况 平级情况 存在上下级的情况 JDK7的新特性及注意事项 l 基本格式:try是检测异常,catch是用来捕获异常的,finally是用来结束资源的 l 世界上最真情的相依,是你在try我在catch,无论你发神马脾气,我都默默接受,静静处理 l 分别采用RuntimeExcepti
5、on和非RuntimeException举例 4 编译时异常和运行时异常的区别l Java中的异常被分为两大类:编译时异常和运行时异常。所有的RuntimeException类及其子类的实例被称为运行时异常,其他的异常就是编译时异常 l 编译时异常 Java程序必须显示处理,否则程序就会发生错误,无法通过编译 l 运行时异常 无需显示处理,也可以和编译时异常一样处理 5 Throwable中的方法l getMessage() 获取异常信息,返回字符串。l toString() 获取异常类名和异常信息,返回字符串。l printStackTrace() 获取异常类名和异常信息,以及异常出现在程序
6、中的位置。返回值void。l printStackTrace(PrintStream s) 通常用该方法将异常内容保存在日志文件中,以便查阅。 6 throwsl 定义功能方法时,需要把出现的问题暴露出来让调用者去处理。那么就通过throws在方法上标识。 l 举例分别演示编译时异常和运行时异常的抛出l 在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。 l 举例分别演示编译时异常对象和运行时异常对象的抛出7 throws和throw的区别l throws 用在方法声明后面,跟的是异常类名 可以跟多个异常类名,用逗号隔开 表示抛出异常,由该方
7、法的调用者来处理 throws表示出现异常的一种可能性,并不一定会发生这些异常 l throw 用在方法体内,跟的是异常对象名 只能抛出一个异常对象名 表示抛出异常,由方法体内的语句处理 throw则是抛出了异常,执行throw则一定抛出了某种异常 8 我们到底该如何处理异常呢l 原则:如果该功能内部可以将问题处理,用try,如果处理不了,交由调用者处理,这是用throws l 区别: 后续程序需要继续运行就try 后续程序不需要继续运行就throwsl 举例: 感冒了就自己吃点药就好了,try 吃了好几天药都没好结果得了H7N9,那就的得throws到医院如果医院没有特效药就变成
8、Error了9 finally的特点作用及面试题l finally的特点 被finally控制的语句体一定会执行 特殊情况:在执行到finally之前jvm退出了(比如System.exit(0)l finally的作用 用于释放资源,在IO流操作和数据库操作中会见到 l finally相关的面试题 final,finally和finalize的区别 如果catch里面有return语句,请问finally的代码还会执行吗?如果会,请问是在return前还是return后。 l trycatchfinally可以使用 l trycatch也可以使用 l tryfinally也可以使用 l 但是
9、,catch,finally不能单独使用 10 自定义异常l 考试成绩必须在0-100之间 l 很明显java没有对应的异常,需要我们自己来做一个异常 l 自定义异常 继承自Exception 继承自RuntimeException 异常注意事项l 子类重写父类方法时,子类的方法必须抛出相同的异常或父类异常的子类。(父亲坏了,儿子不能比父亲更坏)l 如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常或者是他的子集,子类不能抛出父类没有的异常l 如果被重写的方法没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法内有异常发生,那么子类只能try,不能throws11 File类概
10、述和构造方法l File类的概述 文件和目录路径名的抽象表示形式 l 构造方法 public File(String pathname) public File(String parent,String child) public File(File parent,String child) l 通过创建对象后,我们再来理解文件和目录路径名的抽象表示形式这句话的意思: l 仅仅是一个路径的表示,不代码具体的事物一定是存在的。 12 File类的成员方法l 创建功能 public boolean createNewFile() public boolean mkdir() public bool
11、ean mkdirs() l 删除功能 public boolean delete() l 重命名功能 public boolean renameTo(File dest) 13 File类的成员方法l 判断功能 public boolean isDirectory() public boolean isFile() public boolean exists() public boolean canRead() public boolean canWrite() public boolean isHidden()l 基本获取功能 public String getAbsolutePath()
12、 public String getPath() public String getName() public long length() public long lastModified()l 高级获取功能 public String list() public File listFiles()l 判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出此文件名称 l 文件名称过滤器的实现思想及代码 public String list(FilenameFilter filter) public File listFiles(FilenameFilter filter) 查看源码看执行流程
13、 14 递归的思想概述l 递归 方法定义中调用方法本身的现象 l 递归注意实现 要有出口,否则就是死递归 次数不能太多,否则就内存溢出 构造方法不能递归使用 l 递归举例: l 从前有座山l 我们学编程 15 递归解决问题的思想及内存图l 递归解决问题的思想 找到出口 找到规律 l 求阶乘案例 普通for循环 递归实现 画内存图 断点查看执行流程 16 IO流概述l IO流用来处理设备之间的数据传输 上传文件和下载文件l Java对数据的操作是通过流的方式l Java用于操作流的对象都在IO包中17 IO流分类l 按照数据流向 输入流读入数据 输出流写出数据 l 按照数据类型 字节流 字符流
14、什么情况下使用哪种流呢? 如果数据所在的文件通过windows自带的记事本打开并能读懂里面的内容,就用字符流。其他用字节流。 如果你什么都不知道,就用字节流 IO流的分类如果没有明确指定,默认指按照数据类型分。 18 IO流常用基类l 字节流的抽象基类: InputStream ,OutputStream。l 字符流的抽象基类: Reader , Writer。l 注:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。 如:InputStream的子类FileInputStream。 如:Reader的子类FileReader。19 字节流写数据l OutputStream File
15、OutputStream l 往一个文本文件中写一句话:”helloworld” 分析发现其实更适合用字符流,但是由于字节流先出现,所以,我们考虑先使用字节流后面再讲会什么出现字符流。 l FileOutputStream的构造方法 FileOutputStream(File file) FileOutputStream(String name)l public void write(int b)l public void write(byte b)l public void write(byte b,int off,int len)20 字节流写数据常见问题l 创建字节输出流到底做了哪些事情
16、?l 数据写成功后,为什么要close()?l 如何实现数据的换行?l 如何实现数据的追加写入?l 加入异常处理的IO流操作 21 字节流读取数据l InputStream FileInputStream l 把刚才写的数据读取出来显示在控制台 l FileInputStream的构造方法 FileInputStream(File file) FileInputStream(String name)l FileInputStream的成员方法 public int read() public int read(byte b)字节流读取数据两种方式图解比较l 一次读取一个字节 l 一次读取一个字
17、节数组 每次可以读取多个数据,提高了操作效率 l 喝水: l 一次喝一滴水 l 一次喝一口水 l 搬运东西l 一次搬一件 l 一次搬多件 l l 复制数据的最基本思想: l 数据源:读数据 l 目的地:写数据 22 字节缓冲流l 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区效果,java本身在设计的时候,也考虑到了这样的设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流 l 字节缓冲输出流 BufferedOutputStream l 字节缓冲输入流 BufferedInputStream 23 转换流出现的原因及思想l 由于字节流操作中文不
18、是特别方便,所以,java就提供了转换流。 l 字符流=字节流+编码表。 24 编码表概述和常见的编码表l 编码表 由字符及其对应的数值组成的一张表 l 常见编码表 ASCII/Unicode 字符集 ISO-8859-1 GB2312/GBK/GB18030 BIG5 UTF-8l 计算机只能识别二进制数据,早期由来是电信号。l 为了方便应用计算机,让它可以识别各个国家的文字。l 就将各个国家的文字用数字来表示,并一一对应,形成一张表。l ASCII:美国标准信息交换码。l 用一个字节的7位可以表示。l ISO8859-1:拉丁码表。欧洲码表l 用一个字节的8位表示。l GB2312:中国的
19、中文编码表。l GBK:中国的中文编码表升级,融合了更多的中文文字符号。 l GB18030:GBK的取代版本 l BIG-5码 :通行于台湾、香港地区的一个繁体字编码方案,俗称“大五码”。 l Unicode:国际标准码,融合了多种文字。l 所有文字都用两个字节来表示,Java语言使用的就是unicode l UTF-8:最多用三个字节来表示一个字符。l UTF-8不同,它定义了一种“区间规则”,这种规则可以和ASCII编码保持最大程度的兼容: l 它将Unicode编码为00000000-0000007F的字符,用单个字节来表示它将Unicode编码为00000080-000007FF的字
20、符用两个字节表示 它将Unicode编码为00000800-0000FFFF的字符用3字节表示 25 字符串中的编码问题l 编码 把看得懂的变成看不懂的 l 解码 把看不懂的变成看得懂的 26 转换流概述l OutputStreamWriter 字符输出流 public OutputStreamWriter(OutputStream out) public OutputStreamWriter(OutputStream out,String charsetName)l InputStreamReader 字符输入流 public InputStreamReader(Inp
21、utStream in) public InputStreamReader(InputStream in,String charsetName)27 OutputStreamWriter写数据l OutputStreamWriter写数据方法 public void write(int c) public void write(char cbuf) public void write(char cbuf,int off,int len) public void write(String str) public void write(String str,int off,int len)l 字符
22、流操作要注意的问题 flush()的作用 flush()和close()的区别 28 InputStreamReader读数据l OutputStreamWriter读数据方法 public int read() public int read(char cbuf)29 转换流的简化写法l 转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化我们的书写,转换流提供了对应的子类。 l FileWriter l FileReader 30 FileWriter和FileReaderl FileWriter写数据 l FileReader读取数据 l FileWriter和
23、FileReader实现文本文件的复制 31 字符缓冲流l BufferedWriter基本用法 l BufferedReader基本用法 l 字符缓冲流复制文本文件 l 特殊功能 BufferedWriter void newLine() BufferedReader String readLine()l 字符缓冲流特殊功能复制文本文件 32 IO流小结l 字节流 字节输入流 字节输出流 l 字符流 字符输入流 字符输出流 33 操作基本数据类型的流l 操作基本数据类型 DataInputStream DataOutputStreaml 1:数据输出流允许应用程序以适当方式将基本 Java
24、数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。 l 2:案例 l public static void main(String args) throws IOException l write();l read();l l private static void read() throws FileNotFoundException, IOException l DataInputStream dis = new DataInputStream(l new FileInputStream("dos.txt");l byte b = dis.readByt
25、e();l System.out.println(b);l short s = dis.readShort();l System.out.println(s);l int i = dis.readInt();l System.out.println(i);l long l = dis.readLong();l System.out.println(l);l float f = dis.readFloat();l System.out.println(f);l double d = dis.readDouble();l System.out.println(d);l char ch = dis.
26、readChar();l System.out.println(ch);l boolean bb = dis.readBoolean();l System.out.println(bb);l dis.close();l l private static void write() throws IOException l DataOutputStream dos = new DataOutputStream(new FileOutputStream(l "dos.txt");l dos.writeByte(1);l dos.writeShort(20);l dos.write
27、Int(300);l dos.writeLong(4000);l dos.writeFloat(12.34f);l dos.writeDouble(12.56);l dos.writeChar('a');l dos.writeBoolean(true);l dos.close();l 34 内存操作流l 操作字节数组 ByteArrayInputStream ByteArrayOutputStreaml 操作字符数组 CharArrayReader CharArrayWritel 操作字符串 StringReader StringWriterl 1:内存操作流一般用于处理临时信
28、息,因为临时信息不需要保存,使用后就可以删除。 l 2:以第一个举例即可 l ByteArrayOutputStream baos = new ByteArrayOutputStream();l baos.write("helloworld".getBytes();l baos.close();l byte bys = baos.toByteArray();l ByteArrayInputStream bais = new ByteArrayInputStream(bys);l int by = 0;l while (by = bais.read() != -1) l Sy
29、stem.out.println(char) by);l l baos.close();l bais.close();l 最后的close()可以不写,通过看源码可以知道这里什么都没有做。 35 打印流l 打印流概述 字节流打印流 字符打印流 l 打印流特点 只能操作目的地,不能操作数据。 可以操作任意类型的数据。 如果启动了自动刷新,能够自动刷新。 可以操作文件的流 打印流复制文本文件36 标准输入输出流l System类中的字段:in,out。l 它们各代表了系统标准的输入和输出设备。l 默认输入设备是键盘,输出设备是显示器。l System.in的类型是InputStream.l Sys
30、tem.out的类型是PrintStream是OutputStream的子类FilterOutputStream 的子类.l 说明:System.out.println()语句的原理。 l 并测试如下两个代码: l 用System.in实现键盘录入数据。用BufferedReader改进。 l 用System.out实现控制台输出数据。用BufferedWriter改进。 37 随机访问流l RandomAccessFile概述 RandomAccessFile类不属于流,是Object类的子类。但它融合了InputStream和OutputStream的功能。支持对随机访问文件的读取和写入。
31、 l 案例演示 l 1:访问模式 l "r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。 l "rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。 l "rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。 l "rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。 l 一般使用rw模式。 l 2:案例 l pu
32、blic static void main(String args) throws IOException l write();l read();l l private static void read() throws IOException l RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw");l int i = raf.readInt();l System.out.println(i);l System.out.println("当前指针位置:" + raf
33、.getFilePointer();l char ch = raf.readChar();l System.out.println(ch);l System.out.println("当前指针位置:" + raf.getFilePointer();l String s = raf.readUTF();l System.out.println(s);l System.out.println("当前指针位置:" + raf.getFilePointer();l System.out.println("读取数据完毕");l System.o
34、ut.println("当前指针位置:" + raf.getFilePointer();l raf.seek(0);/ 返回数据开头l int ii = raf.readInt();l System.out.println(ii);l l private static void write() throws IOException l RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw");l raf.writeInt(100); / 写入int类型l raf.writ
35、eChar('爱');/ 写入字符l raf.writeUTF("中国你好");/ 写入字符串l raf.close();l System.out.println("写入成功");l 38 合并流l SequenceInputStream概述 SequenceInputStream类可以将多个输入流串流在一起,合并为一个输入流,因此,该流也被称为合并流。 l SequenceInputStream的构造方法 SequenceInputStream(InputStream s1, InputStream s2) SequenceInputS
36、tream(Enumeration<? extends InputStream> e) 把多个文件的内容写入到一个文本文件 l / public SequenceInputStream(InputStream s1,l / InputStream s2)l / InputStream is1 = new FileInputStream("a.txt");l / InputStream is2 = new FileInputStream("b.txt");l / SequenceInputStream sis = new SequenceInp
37、utStream(is1, is2);l InputStream is1 = new FileInputStream("a.txt");l InputStream is2 = new FileInputStream("b.txt");l Vector<InputStream> v = new Vector<InputStream>();l v.add(is1);l v.add(is2);l Enumeration<InputStream> en = v.elements();l SequenceInputStream
38、sis = new SequenceInputStream(en);l / 复制数据l FileOutputStream fos = new FileOutputStream("copy.txt");l byte bys = new byte1024;l int len = 0;l while (len = sis.read(bys) != -1) l fos.write(bys, 0, len);l l fos.close();l is1.close();l is2.close();l sis.close();39 序列化流l 序列化流 ObjectOutputStream l 反序列化流 ObjectInputStream l 序列化操作问题 为什么要实现序列化? 如何实现序列化? 序列化数据后,再次修改类文件,读取数据会出问题,如何解决呢? 使用transient关键字声明不需要序列化的成员变量 l 对象序列化是将对象状态转换为可保持或传输的过程。一般的格式是与平台无关的二进制流,可以将这种二进制流持久保存在磁盘上,也可以通过网络将这种二进制流传输到另一个网络结点。 l 对象反序列化,是指把这种二进制流数据还原成对象。 40 Properties集合l Properties概述 l Prop
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 搜索引擎开源项目课程设计
- 基于SPI的Flash控制器视频课程设计
- 基于SPI的Flash读写控制器设计说明课程设计
- 基于OCR的身份证信息提取系统在设计开发课程设计
- 嵌入技术交易监控课程设计
- NLP情感分析工具评测方法课程设计
- 焊接材料制造工创新实践水平考核试卷含答案
- 车间通风系统课程设计
- 图像边缘检测灰度化项目课程设计
- NLP情感分析工具的发展趋势课程设计
- 陕西省专业技术人员继续教育专业课《2025教师职业能力升级与素养深化(一)》题库及答案
- 10KV高压配电设备技术协议书
- 大众急救知识培训课件
- 1.【新课标】水平三 体育单元教学计划+课时计划【32课时教案】
- 2025年西安工程大学辅导员招聘考试笔试试题(含答案)
- 医院能耗政策和参照标准
- 工程服务采购管理办法
- 黑龙江省代建制管理办法
- 拥军秧歌教学课件
- 《市域(郊)铁路设计规范》条文说明
- 2025年二房东转租合同协议范本
评论
0/150
提交评论