Exception
プログラムを実行してみなければ、発生するかどうかわからないエラー = コンパイル時には発見できないエラー
注意
1.在class开始之前一定要import
2.FileNotFoundException需要写在IOException之前
IOExceptionをFileNotFoundExceptionの前に書くと、FileNotFoundExceptionの 例外が発生することはない
关于catch try finally
1.一个try
可以对应多个catch
2.可以使用while 让try
和catch
更加灵活
例如:
try{
String str;
int num, code = 1;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("数を1つ入力してください。");
str = br.readLine();
while(code == 1){
try {
num = Integer.parseInt(str);
code = 0;
}catch(NumberFormatException e) {
System.out.println("入力された文字列は数に変換できません。入力しなおしてください。");
str = br.readLine();//这里不光能报错,还能进行下一步的操作。
}
}
}catch(IOException e) {
System.out.println("標準入力の処理ができませんでした。");
}//同时这里也用了两个try,catch
3.不管出不出错,finally{ }里的内容都会进行。
经常的用途是,比如说打开了一个文件,读到一半报错了,到catch以后就结束了,但是这个文件还一直开着。
不管有没有捕获到异常,都会执行finally的语句。
若无finally的语句,触碰到异常语句后,则不在继续向下执行。
但有finally的语句,触碰到异常语句后,仍然会执行finally里的语句。
所以,finally一般用于关闭打开的文件,删除临时的文件。
IOException 输入输出例外
“入力“和”出力“是站在当前打开的程序,不是站在要编辑的文件的角度。
標準入力・ファイル入力で、入力ができない場合
標準入力: プログラムをコマンドプロンプトから起動していない場合などは、入力不可能
ファイル入力: 読み込もうとしたファイルが、「読み込み」のアクセス権がない場合などは、入力不可能
ファイル出力で、出力ができない場合
書き込もうとしたファイルが、「書き込み」のアクセス権がない場合などは出力不可能
分類されているパッケージ: java.io
ArithmeticException 計算に関する例外
分類されているパッケージ: java.lang
StringIndexOutOfBoundsException
文字列における、文字の位置(インデックス)に関する例外
文字列において、実際には存在しない位置を指定した場合
分類されているパッケージ: java.lang
NumberFormatException
文字列の数値変換に関する例外
数値に変換することができない文字列を、変換しようとした場合
分類されているパッケージ: java.lang
ArrayIndexOutOfBoundsException
配列の添え字に関する例外
利用可能な範囲外の添え字を使おうとした場合
分類されているパッケージ: java.lang
IndexOutOfBoundsException
ArrayListのインデックスに関する例外
利用可能な範囲外のインデックスを使おうとした場合
分類されているパッケージ: java.lang
FileNotFoundException
ファイルに関する例外
読み込もうとしたファイルが存在しない場合
分類されているパッケージ: java.io
如果使用了IOException
的话,FileNotFoundException
不用在写
好的例子
例子1:提前写好公式,之后反复使用
public Boolean checkPositive(String s, String name){ try {
double i = Double.parseDouble(s);
if(i<=0){
System.out.println(name + "必须⼤大于0");
return false;
}
}catch (NumberFormatException e){
System.out.println("必须输⼊一个数字");
return false;
}
return true;
}
System.out.println("请输入实时价格:");
String input = this.input.input();
Boolean b = checkPositive(input, "实时价格");
if(!b) return;//什么意思???
System.out.println("交易数量:");
String amount = this.input.input();
b = checkPositive(amount, "交易易数量");
if(!b) return;
例子2 finally的例子
FileInputStream in = null;
try {
in = new FileInputStream ("myfile.txt");
int b;
b = in.read();
while(b != -1) {
System.out.print((char) b);
b = in.read();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOExpection e) {
System.out.println(e.getMessage());
} finally { // finally里处理了in.close();关闭文件;
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}