首页 技术 正文
技术 2022年11月17日
0 收藏 969 点赞 4,415 浏览 5743 个字

从这节开始,进入对I/O流的系统学习,I/O流在往后大数据的学习道路上尤为重要!!!极为重要,必须要提起重视,它与集合,多线程,网络编程,可以说在往后学习或者是工作上,起到一个基石的作用,没了地基,房屋就算盖起来,风一吹就倒。

好了,废话不多说,进入正题:在学习I/O流之前,我们先掌握什么是异常File

1、先看看异常的分类:

大数据之路week04–day06(I/O流阶段一  之异常)

图1  异常的分类

从上图我们不难看出来,异常主要分为三大类:Error    Exception    RuntimeException

有朋友就要问了,上来就给我搞这些什么异常,还分类,不好理解啊!!别急,我来白话文说说:

什么是异常?  

    就是程序出现了不正常的情况。

还不清楚?继续举例:

    比如说,今天天气很好,我要去市中心逛街,骑着自行车,去购物。但是呢?我遇到了一些问题:

      问题1:去的路上我发生了车祸,我去不了了,这属于严重的问题。

      问题2:我推着自行车,发现气儿没了,把气充起来,这属于出发前就应该检查的问题。

      问题3:我骑着自行车在路上骑着,路两边是小石子路,但是我就是往上面骑车,结果我爆胎了,这属于运行时候出现的问题

相对应着:

  程序的异常:Throwable

    严重问题:Error  我们不处理,这种问题一般都是很严重的问题,比如说内存溢出

      异常:Exception

        又分为:

          编译时期的异常:不是RuntimeException的异常,必须进行处理的,因为你不进行处理,编译就不会通过。

          运行时期的异常:RuntimeException  这种问题我们也不处理,因为是程序员自身的问题,而且这个问题的出现肯定是我们的代码不够严谨,必须要进行修正代码的。

说了那么多,应该对什么是异常有了大概的了解了吧,接下来看操作!!嘿嘿

2、如果程序出现了问题,我们没有做任何处理,最终JVM(Java虚拟机)会做出默认的处理(把异常的名称,原因以及出现的问题位置等信息输出在控制台,同时会结束程序)如下代码:

 package com.wyh.IO流day1; /**  * 创建时间:2019年11月28日 下午8:53:26  * 项目名称:practise09_IO流(2)  * @author WYH  * @version 1.0  * @since JDK 1.8.0  * 文件名称:ExceptionDemo1.java  * 类说明:
* try{
*
* }catch(){
*
* }finally{
*
* }
*/ public class ExceptionDemo1 {
public static void main(String[] args) {
int i = 10;
int j = 0;
// try {
System.out.println(i/j);
// } catch (Exception e) {
// System.out.println("除数不能为0");
// }
//
System.out.println("over"); } }

如何处理异常:

大数据之路week04–day06(I/O流阶段一  之异常)大数据之路week04–day06(I/O流阶段一  之异常)大数据之路week04–day06(I/O流阶段一  之异常)

注意:

  1、try里面的代码越少越好,因为Java虚拟机开辟的内存资源就会越少

  2、一旦try里面出了问题,就会在这里把问题抛出去,然后和catch里面的问题进行匹配。

  3、一旦有匹配的,就执行catch里面的处理。然后结束了try…catch…继续执行后面的语句

JDK7出现了一个新的异常处理方案:

大数据之路week04–day06(I/O流阶段一  之异常)

代码展示:

 package com.wyh.IO流day1; /**  * 创建时间:2019年11月28日 下午8:53:26  * 项目名称:practise09_IO流(2)  * @author WYH  * @version 1.0  * @since JDK 1.8.0  * 文件名称:ExceptionDemo1.java  * 类说明:
* JDK7版本新出现的异常处理方式
* try{
* ...
* }catch(异常类名1 | 异常类名2 | 异常类名3.. 异常名){
* ....
* }
*
*/ public class ExceptionDemo2 {
public static void main(String[] args) {
int i = 10;
int j = 0;
int[] arr =new int[3];
try {
System.out.println(i/j);
System.out.println(arr[3]);
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
System.out.println("出现异常");
} System.out.println("over"); } }

3、接下来学习一些Throwable中的方法:

getMessage()   获取异常信息,返回字符串

toString()  获取异常类名和异常信息,返回字符串

printStackTrace()  获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void

printStackTrace()  通常用该方法将异常内容保存在日志文件中,以便查阅。

 package com.wyh.IO流day1; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; /** * 创建时间:2019年11月28日 下午8:53:26 * 项目名称:practise09_IO流(2) * @author WYH * @version 1.0 * @since JDK 1.8.0 * 文件名称:ExceptionDemo1.java * 类说明:
* try{
*
* }catch(){
*
* }
* 的三种方法
*
*/ public class ExceptionDemo4 {
public static void main(String[] args) { //编译时异常
String s = "2019-11-28";
SimpleDateFormat ds = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
try {
Date d = ds.parse(s);
System.out.println(d);
} catch (ParseException e) {
// e.printStackTrace();
// System.out.println("解析日期出现了错误"); //方法一:getMessage()
// System.out.println(e.getMessage());//Unparseable date: "2019-11-28" //方法二:toString()
// System.out.println(e.toString());//java.text.ParseException: Unparseable date: "2019-11-28" //方法三:e.printStackTrace() 而我们经常使用的是这个
/*java.text.ParseException: Unparseable date: "2019-11-28"
at java.text.DateFormat.parse(DateFormat.java:366)
at com.wyh.IO流day1.ExceptionDemo4.main(ExceptionDemo4.java:39)*/
e.printStackTrace(); }
} }

小结:

大数据之路week04–day06(I/O流阶段一  之异常)

4、throw

  在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。

举例:

 package com.wyh.IO流day1; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
*
* 创建时间:2019年11月28日 下午8:53:26
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:ExceptionDemo1.java
*
* 类说明: throw
*
*/ public class ExceptionDemo6 {
public static void main(String[] args) {
System.out.println("我热爱大数据"); //在main方法里尽量不使用抛出,因为如果出错就无法走下去。
try {
method1();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} try {//为了保证程序正常进行运行
method2();//运行时期的异常调用时不做处理,如果出错依旧停止程序
} catch (Exception e) {
e.printStackTrace();
} System.out.println("所以我现在是大牛"); } //运行时期的异常在方法调用的时候可以不去处理
private static void method2() throws ArithmeticException{
int i = 10;
int j = 0;
System.out.println(i/j); } //编译时期的异常方法我们必须进行处理,抛出
private static void method1() throws ParseException {
// 编译时异常
String s = "2019-11-28";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
Date d = sdf.parse(s);
System.out.println(d); }
}

下面有一道这样的面试题:

大数据之路week04–day06(I/O流阶段一  之异常)大数据之路week04–day06(I/O流阶段一  之异常)

(怎么找异常??跟进鼠标看方法是继承了什么异常类,看父类)

5、finally:被finally控制的语句一定会执行

 package com.wyh.IO流day1; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; /**
*
* 创建时间:2019年11月28日 下午8:53:26
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:ExceptionDemo1.java
*
* 类说明: finally
* 注意:如果程序在执行到finally之前退出了,就不会执行
*
*/ public class ExceptionDemo7 {
public static void main(String[] args) {
String s = "2019-11-29";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); Date d = null; try {
sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
System.exit(0);
}finally{
System.out.println("这条语句时可以被执行的");
} System.out.println(d); }
}

那么就有这样的面试题:

大数据之路week04–day06(I/O流阶段一  之异常)

大数据之路week04–day06(I/O流阶段一  之异常)

6、自定义异常:

(1)自定义类并继承Exception父类:

 package com.wyh.自定义异常; /**  * 创建时间:2019年11月29日 下午8:42:32  * 项目名称:practise09_IO流(2)  * @author WYH  * @version 1.0  * @since JDK 1.8.0  * 文件名称:MyException.java  * 类说明:
* 两种方式实现自定义异常(这里使用继承Exception) */ public class MyException extends Exception{
//无参构造
public MyException(){ } //有参构造,传递消息
public MyException(String s){
super(s);
}
}

(2)自定义另一个类,写方法,方法中抛出我们刚刚自定义的类:

 package com.wyh.自定义异常; /**  * 创建时间:2019年11月29日 下午8:55:18  * 项目名称:practise09_IO流(2)  * @author WYH  * @version 1.0  * @since JDK 1.8.0  * 文件名称:MyTeacher.java  * 类说明:
* 定义新类,定义新的方法,使用自定义的异常 */ public class MyTeacher { public void check(int i) throws MyException{
if(i>100 || i<0){
throw new MyException("分数必须在0到100之间");
}else{
System.out.println("分数合理");
}
} }

(3)测试类:

 package com.wyh.自定义异常; import java.util.Scanner; /**
*
* 创建时间:2019年11月29日 下午8:58:32
*
* 项目名称:practise09_IO流(2)
*
* @author WYH
*
* @version 1.0
*
* @since JDK 1.8.0
*
* 文件名称:ExceptionDemo.java
*
* 类说明: 测试我们的自定义异常
*/ public class ExceptionDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
MyTeacher t = new MyTeacher();
while (true) {
System.out.println("请输入你的分数:");
int i = sc.nextInt();
if (i == 886) {
break;
} else {
try {
t.check(i);
} catch (MyException e) {
e.printStackTrace();
break;
} } }
} }

7、异常使用的注意事项:

大数据之路week04–day06(I/O流阶段一  之异常)

下一节 介绍File

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,580
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918