从这节开始,进入对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. 【C/C++开发】ffplay中的FrameQueue的自我理解

    最近在研究ffplay,以下是本人今天在研究FrameQueue的时候整理的笔记,如有错误还请有心人指出来~ //这个队列是一个循环队列,windex是指其中的首元素,rindex是指其中的尾部元素. ...

  2. Java Script 学习日志 Div

    2019年7月7日 学习网站: http://www.w3school.com.cn/js/js_examples.asp 1.输出 1. 1首先就是输出看 <script> docume ...

  3. springboot集成elk 一: springboot + Elasticsearch

    1.ELK介绍 1> Elasticsearch是实时全文搜索和分析引擎, 提供搜集.分析.存储数据三大功能: 是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统. ...

  4. linux网卡出现问题:Job for network.service failed because the control process exited with error code问题

    [转自]:https://blog.csdn.net/dongfei2033/article/details/81124465 今天在centOS 7下更改完静态ip后发现network服务重启不了, ...

  5. Python 实现把两个排好序的的列表合并成一个排序列表

    列表是升序的 # -*- coding: utf-8 -*- # 合并两个排序的数组 def merge_list(a, b): if not a: return b if not b: return ...

  6. LIUNX随堂学习-1 用户及查看信息

    1.useradd   #创建用户             例如:useradd ljj     创建一个名为ljj的用户 2.userdel -r    #删除用户         例如:userd ...

  7. Python基础 第5章 条件、循环及其他语句(1)

    1. print和import 1.1 打印多个参数 可用 + 连接多个字符串,可保证被连接字符串前无空格: 可用sep=“_”,自定义各种分隔符: print("I"," ...

  8. chrome 调试 ios h5

    1,安装itunes, 否则无法识别iphone设备 2,开启调试模式 ,打开 iPhone 依次进入 设置 > Safari > 高级 > Web 检查 > 启用 3,下载 ...

  9. java字节和字符的区别

    字节: 1.bit=1  二进制数据0或1 2.byte=8bit  1个字节等于8位 存储空间的基本计量单位 3.一个英文字母=1byte=8bit 1个英文字母是1个字节,也就是8位 4.一个汉字 ...

  10. df执行hang住

    一.现象 在linux操作系统中,执行df -h命令,后hang住 二.思路 排查是否存在Nfs问题,无法正常挂载nfs路径导致的问题. 三.解决过程 3.1 cat /etc/rc.local #m ...