異常な
- そのようなユーザ入力エラーなどの非正常例外が、プログラム中の動作で発生手段、ゼロによる除算、処理すべきファイルは、配列の添字が境界を横断する、存在しません。Javaの例外処理メカニズムでは、多くの使用の導入が記述すると、ハンドルの例外クラスと呼ばれる例外クラス。例外クラスの定義は、情報、このような異常と異常処理の方法を含んでいます。
- 例外処理
-
例外をスロー:メソッドの実装では、例外が発生した場合、この方法は、異常を表すオブジェクトを生成し、現在の実行経路を停止し、JREに提出された例外オブジェクト。
-
キャプチャ例外:例外はJRE後に得られる、例外を処理するための適切なコードを見つけます。あなたはこれまでに、適切な例外処理コードを見つけるまで、コールスタック方式でのJREの外観は、メソッドから開始すると例外のバックを生成します。
try {
System.out.println(1 / 0);
}catch (Exception e){
System.out.println("出错了");
e.printStackTrace();
}
- すべての異常なルートjava.lang.Throwableクラス、Throwableのは以下の2つのサブクラス得たです:エラーと例外を、異常な異常が被験者とない被験者に分かれている(実行時例外)異常
- 間違ったプログラムが処理できないエラー、アプリケーションを実行しているより深刻な問題を示します。ほとんどのエラーは、操作コードの作者の実行には何の関係もありませんし、問題のコードは、JVM(Java仮想マシン)が表示されますが実行されていること
RuntimeException異常ランタイム
- 衝撃ステートメントまたは明示的なプログラムは、読みやすさと優れた運転効率をキャプチャする場合は、より頻繁に、面倒なプロセスを生成するなど0、添字アレイの境界、ヌルポインタ、などによって誘導されるのRuntimeException例外、、。このように、自動的に(ユーザがそれらを処理する必要はありません)、システムによって検出され、そのデフォルトの例外ハンドラへ
- ロジックを処理することは、増加するニーズを決定します
未確認の例外CheckedException
- このような例外はそうではない、コンパイル、コンパイル時に行われなければなりません
- 2つの珍しいアプローチがあります:「スロー」異例の声明を使用し、例外をキャッチ「のtry / catch」を使用して
- 最後にキャッチしてみてください、あなたは複数のキャッチを持つことができます
try {
System.out.println("可能异常的语句");
System.out.println(1 / 0);
}catch (Exception e){
System.out.println("出错了");
//e.printStackTrace();
}finally {
System.out.println("总算结束了");
}
- ファイルを読みます
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestReadFile {
public static void main(String[] args) {
FileReader fileReader = null;
try {
fileReader = new FileReader("D:\\data\\shuihu.txt");
char c1 = (char)fileReader.read();
System.out.println(c1);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) { //多个异常,子类在前,父类在后
e.printStackTrace();
}finally {
if(fileReader != null){
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
スロー
- CheckedExceptionプロデュースは、必ずしもすぐにそれに対処しない場合、あなたは、例外をスローすることができ、
- この方法は、異常のいくつかの種類を生産するかもしれないが、それは、この異常に対処する方法を決定しない場合、例外がスローされるかもしれない方法のヘッダ宣言に基づいて、指定例外であるべきです。この方法は、より多くのチェック例外をスローした場合、それは最初のセクションに記載されているすべての例外を処理しなければならない、とのカンマで区切られました
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestThrow {
public static void main(String[] args) {
String path = "D:\\data\\shuihu.txt";
//处理异常,或者在方法后继续标记抛出异常
try {
readFile(path);
} catch (IOException e) {
e.printStackTrace();
}
}
static void readFile(String path) throws IOException {
FileReader fileReader = new FileReader(path);
char c1 = (char)fileReader.read();
System.out.println(c1);
if(fileReader != null){
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
カスタム例外
- カスタム例外クラスはExceptionクラスを継承する場合は、検査された例外は、処理する必要があります。あなたが対処したくない場合は、カスタム例外クラスのRuntimeExceptionの例外クラスを継承ランタイムを作ることができます。
- デフォルトコンストラクタ、その他の詳細とコンストラクタ:伝統的に、カスタム例外クラスのコンストラクタには2を含める必要があります。
public class TestDefinedException {
public static void main(String[] args) {
Person p = new Person();
p.setAge(10000);
p.setName("高尔基 西莫维奇·彼什科夫");
}
}
class Person{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
if(age < 0 || age > 130){
//运行时异常
throw new IllegalAgeException("年龄有误");
}else{
this.age = age;
}
}
public String getName() {
return name;
}
public void setName(String name) {
if(name.length()>10){
try {
//Name的受检异常,必须trycatch或方法后标记抛出
throw new IllegalNameException("名字太长");
} catch (IllegalNameException e) {
e.printStackTrace();
}
}else {
this.name = name;
}
}
}
class IllegalAgeException extends RuntimeException{
/*
运行时异常
*/
public IllegalAgeException(){
}
public IllegalAgeException(String info){
super(info);
}
}
class IllegalNameException extends Exception{
public IllegalNameException(){}
public IllegalNameException(String info){
super(info);
}
}