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

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

1、先看看异常的分类:

图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"); } }

如何处理异常:

注意:

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

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

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

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

代码展示:

 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(); }
} }

小结:

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); }
}

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

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

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); }
}

那么就有这样的面试题:

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、异常使用的注意事项:

下一节 介绍File

大数据之路week04--day06(I/O流阶段一 之异常)的更多相关文章

  1. 大数据之路week05--day01(I/O流阶段一 之File)

    众所周知,我们电脑中有许许多多的文件夹和文件,文件的形式也有许多不同的格式,文件夹中也可以新建文件夹的存在,也就是多层的一步一步的嵌套. 我们想要实现I/O操作,就必须知道硬盘上文件的表现形式. 而J ...

  2. C#码农的大数据之路 - 使用C#编写MR作业

    系列目录 写在前面 从Hadoop出现至今,大数据几乎就是Java平台专属一般.虽然Hadoop或Spark也提供了接口可以与其他语言一起使用,但作为基于JVM运行的框架,Java系语言有着天生优势. ...

  3. 胖子哥的大数据之路(11)-我看Intel&&Cloudera的合作

    一.引言 5月8日,作为受邀嘉宾,参加了Intel与Cloudera在北京中国大饭店新闻发布会,两家公司宣布战略合作,该消息成为继Intel宣布放弃大数据平台之后的另外一个热点新闻.对于Intel的放 ...

  4. 胖子哥的大数据之路(10)- 基于Hive构建数据仓库实例

    一.引言 基于Hive+Hadoop模式构建数据仓库,是大数据时代的一个不错的选择,本文以郑商所每日交易行情数据为案例,探讨数据Hive数据导入的操作实例. 二.源数据-每日行情数据 三.建表脚本 C ...

  5. 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM

    引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...

  6. 胖子哥的大数据之路(7)- 传统企业切入核心or外围

    一.引言 昨天和一个做互联网大数据(零售行业)的朋友交流,关于大数据传统企业实施的切入点产生了争执,主要围绕两个问题进行了深入的探讨: 问题1:对于一个传统企业而言什么是核心业务,什么是外围业务? 问 ...

  7. 胖子哥的大数据之路(6)- NoSQL生态圈全景介绍

    引言: NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网.给大家分享. 正文:  The NoSQL Ecosystem 目录 The NoSQL Eco ...

  8. 胖子哥的大数据之路(四)- VisualHBase功能需求框架

    一.引言 大数据在结构化数据存储方面的应用需求越来越明确,但是大数据环境下辅助开发工具的不完善,给数据库管理人员和开发人员带来的不变难以言表,基于此创建了开源项目VisualHBase,同时创建了Vi ...

  9. 大数据之路week01--自学之集合_1(Collection)

    经过我个人的调查,发现,在今后的大数据道路上,集合.线程.网络编程变得尤为重要,为什么? 因为大数据大数据,我们必然要对数据进行处理,而这些数据往往是以集合形式存放,掌握对集合的操作非常重要. 在学习 ...

随机推荐

  1. Nginx基本使用方法

    原帖:http://zyjustin9.iteye.com/blog/2017394 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人 ...

  2. vue-cli2和vue-cli3同时存在

    https://blog.csdn.net/Jioho_chen/article/details/90455778 win下 vue-cli2 和 vue-cli3 并存,一起使用开局一张图,内容慢慢 ...

  3. Linux安装expect

    主要参考:https://www.cnblogs.com/zhenbianshu/p/5867440.html expect解释器 expect是一个能实现自动和交互式任务的解释器,它也能解释常见的s ...

  4. RESTful接口开发规范

    最近在研究restful,公司开发要使用,所以自己就去网上找了好些资料,并整理了一套公司开发的接口规范.当然,我也只是刚刚入坑.还不是很全面.但是这就是一个过程.一点点,总会好起来的.以下是就是RES ...

  5. 软件模拟IIC实现EEPROM

    ....妈的太难.    反正就是控制引脚的高低电平 实现数据的读取....参考 I2C的协议层和物理层的那个几个图,个个信号产生的电平 自己看源码去把. 头疼

  6. Quartz.net任务调度(石英钟定时任务)

    好了,现在具体来说一下怎么使用Quartz.net 2.0. 1.到网上下载Quartz.net 2.0,下载完后解压,里面有vs.net2008和vs.net2010两个版本. 2.新建一个空项目, ...

  7. iis 虚拟目录 文件服务器

    需求 多节点站点部署时,上传文件地址统一 调整步骤如下 建立文件服务器 共享目录 设置账号密码 各服务器建账号 密码 需与文件服务器账号密码一致 调整 web.config 在<system.w ...

  8. Swagger 实践 <一>

    参考 :https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-nswag?view=aspnetcor ...

  9. c#重写了窗体的OnKeyDown事件,但是不执行

    设置下窗体的KeyPreview属性值为True即可 总结:遇到类似这样的问题,比如其他窗体运行没问题,就新建的窗体有问题.应该检查下窗体的属性.

  10. string leetcode-6.ZigZag

    6. ZigZag Conversion 题面 The string "PAYPALISHIRING" is written in a zigzag pattern on a gi ...