第12章:例外処理とテキストI / O
1.例外処理の概要
1.機能
例外処理により、プログラムは予期しない状況に対処し、通常の操作を続行できます。
2. Javaでは、ランタイムエラーは例外として扱われ、例外はオブジェクトです
3.例外がメソッドからスローされ、メソッドの呼び出し元が例外をキャッチして処理します
try{
//正常情况下的运行情况
}
catch(type ex){
//type:捕获的异常类型 ex:catch块的参数
//处理异常
}
2.例外タイプ
1.システムエラー
2.例外はオブジェクトであり、オブジェクトはクラスによって定義されます。例外のルートクラスはjava.long.Throwableです。Exception
クラスまたはExceptionのサブクラスを継承して、独自の例外クラスを作成することもできます。
3.一般的な例外
異常な | 説明 |
---|---|
ArrayIndexOutOfBountsException | 範囲外の配列 |
InputMisMatchException | 整数を入力する場合は、浮動小数点数として入力してください |
ArthmeticException | 除数として0(浮動小数点数を0で割っても例外は発生しません) |
IllegalArgamentException | メソッドに渡された不正または不適切なパラメータ |
次の例では例外はスローされませんが、オーバーフローすることに注意してください
long l=Long.MAX_VALUE+1;//-9223372036854775808
4.例外を宣言してキャッチします。
宣言キーワード:throwsは、
複数の例外をコンマで区切って宣言します
。Throwキーワード:throw
public static void method() throws Exception()
以下は、例外をキャッチする宣言の例です。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int x = in.nextInt();
int y = in.nextInt();
try {
System.out.println(devide(x, y));//正常情况下运行
} catch (ArithmeticException e) {
//捕获异常
System.out.println(e.toString());//处理异常
}
}
public static int devide(int x, int y) {
//此处异常为运行时异常,故不需要显式声明
if (y == 0) {
throw new ArithmeticException("0不能作除数");//抛出ArithmeticException异常
} else {
return x / y;
}
}
//输入与返回结果:
//3
//0
//java.lang.ArithmeticException: 0不能作除数
3.例外処理
1.例外が親クラスで宣言されていない場合、例外を宣言するためにサブクラスで例外を継承することはできません。
2.例外が現在のメソッドでキャッチされない場合、メソッドの呼び出し元に渡されます。このプロセスは、例外がキャッチされるか、メインメソッドに渡されるまで繰り返されます。
3.親クラスのcatchブロックがサブクラスのcatchブロックの前に表示される前に、コンパイルエラーが発生します
try{
}
catch(Exception e){
}
catch(IOException e){
}//错误的顺序
4.JDK7のマルチキャッチ例外
catch(Exception1|Exception2|Exception3|……)
try{
method();//如果此方法抛出异常而没有处理,则不会执行下面的语句
System.out.println("hello");
}
5.例外が発生しない場合、try-catchブロックによって追加のシステムオーバーヘッドが発生することはありません。
6.finally節
例外が発生するかどうかに関係なく、finally節は常に実行されます
final句の前にreturnステートメントがある場合でも、finally句は実行されます。
7.例外ハンドラーが例外を処理できない場合、または呼び出し元に例外を通知させるだけの場合は、例外を再スローします
8.カスタム例外クラスを作成する
例外には4つの構築メソッドが含まれ、次はそのうちの2つです。
Exception();//没有消息的异常
Exception(message:String);//有消息的异常
Four.Fileクラス
Fileクラスには、ファイル/ディレクトリ属性を取得するためのメソッド、およびファイルの名前を変更および削除するためのメソッドが含まれています。ファイルの内容を読み書きするためのメソッドは含まれていません。
Fileインスタンスを作成しても、ファイルが存在するかどうかに関係なく、マシン上にファイルは作成されません。Fileインスタンスを作成できます。
File file = new File("c:\\z下载\\files\\test\\Demo.txt");
File file = new File("c:/z下载/files/test/Demo.txt");
//使用/或者\\都可以
Fileクラスのメソッドについては詳しく説明しませんが、オンラインで見つけることができます。
5.ファイルの入力と出力
Scannerクラスを使用してテキストからデータを読み取り、PrintWriterクラスを使用してテキストからデータを書き込みます
java.io.PrinterWriterは、ファイルを作成してデータを書き込むことができます
ストリームはclose()で閉じる必要があります。そうしないと、データをファイルに保存できません。
jdk7でtry-with-sourceを使用して、ストリームを閉じるのを忘れないようにすることができます
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("c:\\z下载\\files\\test\\notexist.txt");//创建File对象
try (PrintWriter printWriter = new PrintWriter(file)) {
for (int i = 0; i < 10; i++) {
printWriter.print(i);//将数据写入文件
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Scanneを作成してファイルからデータを読み取るには、構築メソッドnew File(fileName)を使用してインスタンスを作成する必要があります。
File file = new File("c:\\z下载\\files\\test\\notexist.txt");
try (Scanner input = new Scanner(file)) {
while (input.hasNext()) {
System.out.print(input.nextInt());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Webからデータを読み取る
File file = new File("c:\\z下载\\files\\test\\notexist2.txt");
try {
URL url = new URL("http://www.baidu.com/index.html");
try (Scanner in = new Scanner(url.openStream()); // 打开流
PrintWriter printWriter = new PrintWriter(file)) {
while (in.hasNext()) {
printWriter.print(in.nextLine());//写入文件
}
}
} catch (MalformedURLException e1) {
// MalformedURLException 地址输入错误异常
e1.printStackTrace();
}
注意
- 入力を繰り返す必要がある場合は、catchにin.nextLine()を書き込んで、現在の行を破棄して折り返します
- クラスは例外のスローを担当し、このメソッドを呼び出すクラスはキャプチャと処理を担当します
カスタム例外手順
- ExceptionまたはExceptionのサブクラスを継承します
- オンデマンドでsperを呼び出します。
- 別のクラスで定義されたばかりの例外クラスを宣言してスローします
- テストクラスで例外をキャッチして処理する
6.まとめ
この章の学習を通じて、Javaの例外と処理の基本的な知識、多くの例外とその原因を理解し、Fileクラスを使用してテキストオブジェクトを作成し、テキストの入力と出力を理解し、インターネットから情報を取得する方法を学びます。 。
いい加減にして!第13章もっとなるために...