この祭りが始まったことから、I / Oへのアクセスは、ビッグデータが特に重要である隣の道を学んでシステム、I / Oストリームを学習ストリーム!!!非常に重要であり、我々は、コレクション、マルチスレッド、ネットワークプログラミングは、背面に風が吹く、家が隠蔽しても、礎石、ない基盤の役割を果たしていると、次の勉強や仕事に言うことができることを言及を重視する必要があります。
さて、前置きが、質問に:I / Oストリームを学習する前に、私たちが最初に把握するものである異常とファイル
1、異常の分類を見てみましょう:
図異常分類
エラー例外はRuntimeException:グラフから、我々は3つのカテゴリに分類異常な、醜い出てきません。
友人にもああ理解しにくい、分類、私はこれらの異常を何あきらめ、お願いします!!心配、私は方言の話をしないでくださいよ。
何が異常なのですか?
プログラムが異常な状況の登場です。
不明確な?例を続けます。
例えば、今日の天気は良いですが、私は自転車に乗って繁華街のショッピング、外出先でのショッピングに行きますよ。しかし、その後?私はいくつかの質問がありました:
質問1:私の車の事故に向かう途中で、私は行くことができない、これは深刻な問題です。
質問2:私は自転車を押しています、子供たちはあなたが出発する前にチェックすべき問題である、ガスを充填、ガスを見つけることができませんでした。
質問3:道路に私の自転車に乗って、道路の両側には、砂利道ですが、私はすぐ上に乗って、問題となっている私のフラットタイヤ、の結果が実行している場合
に対応:
異常なプログラム:Throwableを
深刻な問題:私たちはこの問題に対処していないエラーは、一般的なメモリ・オーバーフローなど非常に深刻な問題であり、
異常:例外
分かれて:
異常なコンパイル時:ないのRuntimeExceptionの例外は、あなたが処理されていないため、コンパイラは渡さない、処理されなければなりません。
異常な動作期間:それはプログラマ自身の問題であり、この問題は確かに我々のコードであるので、我々は、この問題に対処していないのRuntimeExceptionが正確十分ではありません、我々は、コードを修正する必要があります。
彼はそんなに、それの大まかなアイデアを持っている必要があり、異常が何であるか、そして操作を見て言いました!!ふふ
プログラムは、問題がある場合2は、我々は、デフォルトの処理(ようになります任意の治療、最終JVM(Java仮想マシン)やらなかった例外の名前、問題の原因と、そのようなコンソールの出力として、位置情報の出現を、そしてそれは、プログラムを終了します)次のコード:
1つの 用のパッケージ変更com.wyh.IOフローDAY1; 2 3 4 / ** 5 6 *作成:2019年11月28日午前8時53分26秒PM 7 8 *プロジェクト名:practise09_IOフロー(2) 9 10 * @author WYH 。11 12である * @version 1.0 13である 14 * @since JDK 1.8.0 15 16 *ファイル名:ExceptionDemo1.java 。17 18であり、 *クラス説明: 19 *トライ{ 20 * 21である *}キャッチ(){ 22である * 23のIS *} {最後に 24 * 25 *} 26 * / 27 28 パブリック クラスExceptionDemo1 { 29 公共 静的 ボイドメイン(文字列[]引数){ 30 INT I = 10 。 31 int型 J = 0 ; 32 // 試み{ 33 のSystem.out.println(I / J)。 34 // }キャッチ(例外e){ 35 // するSystem.out.println( "除数不能为0")。 36 // } 37 // 38 のSystem.out.println( "上" )。 39 40 } 41 42 }
例外を処理する方法:
注意:
メモリリソースを開くために、Java仮想マシンが少なくなりますので、1、、できるだけコード内で試します
2、問題である試したら、ここでの問題は捨て、その後、一致するように、問題の内部をキャッチされます。
一致がある場合、図3に示すように、処理は、キャッチ内部で実行されます。次に試しの終わり...キャッチが...次の文を続行します
JDK7新しい例外処理スキームの出現:
コード・ショー:
1 package com.wyh.IO流day1; 2 3 4 /** 5 6 * 创建时间:2019年11月28日 下午8:53:26 7 8 * 项目名称:practise09_IO流(2) 9 10 * @author WYH 11 12 * @version 1.0 13 14 * @since JDK 1.8.0 15 16 * 文件名称:ExceptionDemo1.java 17 18 * 类说明: 19 * JDK7版本新出现的异常处理方式 20 * try{ 21 * ... 22 * }catch(异常类名1 | 异常类名2 | 异常类名3.. 异常名){ 23 * .... 24 * } 25 * 26 */ 27 28 public class ExceptionDemo2 { 29 public static void main(String[] args) { 30 int i = 10; 31 int j = 0; 32 int[] arr =new int[3]; 33 try { 34 System.out.println(i/j); 35 System.out.println(arr[3]); 36 } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { 37 System.out.println("出现异常"); 38 } 39 40 System.out.println("over"); 41 42 } 43 44 }
3、接下来学习一些Throwable中的方法:
getMessage() 获取异常信息,返回字符串
toString() 获取异常类名和异常信息,返回字符串
printStackTrace() 获取异常类名和异常信息,以及异常出现在程序中的位置,返回值void
printStackTrace() 通常用该方法将异常内容保存在日志文件中,以便查阅。
1 package com.wyh.IO流day1; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 8 /** 9 10 * 创建时间:2019年11月28日 下午8:53:26 11 12 * 项目名称:practise09_IO流(2) 13 14 * @author WYH 15 16 * @version 1.0 17 18 * @since JDK 1.8.0 19 20 * 文件名称:ExceptionDemo1.java 21 22 * 类说明: 23 * try{ 24 * 25 * }catch(){ 26 * 27 * } 28 * 的三种方法 29 * 30 */ 31 32 public class ExceptionDemo4 { 33 public static void main(String[] args) { 34 35 //编译时异常 36 String s = "2019-11-28"; 37 SimpleDateFormat ds = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); 38 try { 39 Date d = ds.parse(s); 40 System.out.println(d); 41 } catch (ParseException e) { 42 // e.printStackTrace(); 43 // System.out.println("解析日期出现了错误"); 44 45 46 //方法一:getMessage() 47 // System.out.println(e.getMessage());//Unparseable date: "2019-11-28" 48 49 //方法二:toString() 50 // System.out.println(e.toString());//java.text.ParseException: Unparseable date: "2019-11-28" 51 52 //方法三:e.printStackTrace() 而我们经常使用的是这个 53 /*java.text.ParseException: Unparseable date: "2019-11-28" 54 at java.text.DateFormat.parse(DateFormat.java:366) 55 at com.wyh.IO流day1.ExceptionDemo4.main(ExceptionDemo4.java:39)*/ 56 e.printStackTrace(); 57 58 59 } 60 } 61 62 }
小结:
4、throw
在功能方法内部出现某种情况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。
举例:
1 package com.wyh.IO流day1; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 /** 8 * 9 * 创建时间:2019年11月28日 下午8:53:26 10 * 11 * 项目名称:practise09_IO流(2) 12 * 13 * @author WYH 14 * 15 * @version 1.0 16 * 17 * @since JDK 1.8.0 18 * 19 * 文件名称:ExceptionDemo1.java 20 * 21 * 类说明: throw 22 * 23 */ 24 25 public class ExceptionDemo6 { 26 public static void main(String[] args) { 27 System.out.println("我热爱大数据"); 28 29 //在main方法里尽量不使用抛出,因为如果出错就无法走下去。 30 try { 31 method1(); 32 } catch (ParseException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } 36 37 try {//为了保证程序正常进行运行 38 method2();//运行时期的异常调用时不做处理,如果出错依旧停止程序 39 } catch (Exception e) { 40 e.printStackTrace(); 41 } 42 43 44 System.out.println("所以我现在是大牛"); 45 46 } 47 48 49 50 //运行时期的异常在方法调用的时候可以不去处理 51 private static void method2() throws ArithmeticException{ 52 int i = 10; 53 int j = 0; 54 System.out.println(i/j); 55 56 } 57 58 59 60 //编译时期的异常方法我们必须进行处理,抛出 61 private static void method1() throws ParseException { 62 // 编译时异常 63 String s = "2019-11-28"; 64 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); 65 Date d = sdf.parse(s); 66 System.out.println(d); 67 68 } 69 }
下面有一道这样的面试题:
(怎么找异常??跟进鼠标看方法是继承了什么异常类,看父类)
5、finally:被finally控制的语句一定会执行
1 package com.wyh.IO流day1; 2 3 import java.text.ParseException; 4 import java.text.SimpleDateFormat; 5 import java.util.Date; 6 7 /** 8 * 9 * 创建时间:2019年11月28日 下午8:53:26 10 * 11 * 项目名称:practise09_IO流(2) 12 * 13 * @author WYH 14 * 15 * @version 1.0 16 * 17 * @since JDK 1.8.0 18 * 19 * 文件名称:ExceptionDemo1.java 20 * 21 * 类说明: finally 22 * 注意:如果程序在执行到finally之前退出了,就不会执行 23 * 24 */ 25 26 public class ExceptionDemo7 { 27 public static void main(String[] args) { 28 String s = "2019-11-29"; 29 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); 30 31 Date d = null; 32 33 try { 34 sdf.parse(s); 35 } catch (ParseException e) { 36 e.printStackTrace(); 37 System.exit(0); 38 }finally{ 39 System.out.println("这条语句时可以被执行的"); 40 } 41 42 System.out.println(d); 43 44 45 } 46 }
那么就有这样的面试题:
6、自定义异常:
(1)自定义类并继承Exception父类:
1 package com.wyh.自定义异常; 2 3 /** 4 5 * 创建时间:2019年11月29日 下午8:42:32 6 7 * 项目名称:practise09_IO流(2) 8 9 * @author WYH 10 11 * @version 1.0 12 13 * @since JDK 1.8.0 14 15 * 文件名称:MyException.java 16 17 * 类说明: 18 * 两种方式实现自定义异常(这里使用继承Exception) 19 20 */ 21 22 public class MyException extends Exception{ 23 //无参构造 24 public MyException(){ 25 26 } 27 28 //有参构造,传递消息 29 public MyException(String s){ 30 super(s); 31 } 32 }
(2)自定义另一个类,写方法,方法中抛出我们刚刚自定义的类:
1 package com.wyh.自定义异常; 2 3 /** 4 5 * 创建时间:2019年11月29日 下午8:55:18 6 7 * 项目名称:practise09_IO流(2) 8 9 * @author WYH 10 11 * @version 1.0 12 13 * @since JDK 1.8.0 14 15 * 文件名称:MyTeacher.java 16 17 * 类说明: 18 * 定义新类,定义新的方法,使用自定义的异常 19 20 */ 21 22 public class MyTeacher { 23 24 public void check(int i) throws MyException{ 25 if(i>100 || i<0){ 26 throw new MyException("分数必须在0到100之间"); 27 }else{ 28 System.out.println("分数合理"); 29 } 30 } 31 32 33 34 }
(3)测试类:
1 package com.wyh.自定义异常; 2 3 import java.util.Scanner; 4 5 /** 6 * 7 * 创建时间:2019年11月29日 下午8:58:32 8 * 9 * 项目名称:practise09_IO流(2) 10 * 11 * @author WYH 12 * 13 * @version 1.0 14 * 15 * @since JDK 1.8.0 16 * 17 * 文件名称:ExceptionDemo.java 18 * 19 * 类说明: 测试我们的自定义异常 20 */ 21 22 public class ExceptionDemo { 23 public static void main(String[] args) { 24 Scanner sc = new Scanner(System.in); 25 MyTeacher t = new MyTeacher(); 26 while (true) { 27 System.out.println("请输入你的分数:"); 28 int i = sc.nextInt(); 29 if (i == 886) { 30 break; 31 } else { 32 try { 33 t.check(i); 34 } catch (MyException e) { 35 e.printStackTrace(); 36 break; 37 } 38 39 } 40 41 } 42 } 43 44 }
7、异常使用的注意事项:
下一节 介绍File