【Javaプログラミング】throwsを使用した例外処理とは?使い方についても-プロショvol.68

スポンサーリンク
Java攻略

やっとまとまったthrowsについて今回は見ていく。

例外を確かめるとき、メソッドが複数あったら一つ一つtry-catchのコードを書くのは面倒。

そんな時に使えるのが「throws」。

throwとは別物だから間違いに注意が必要。

 

スポンサーリンク

throwsはどう使う?

 

throwとthrowsは似ているけれど、使い道はまったく違う。

throwはプログラマが例外を発生させて、例外をはっきりと表示させるもの。

対応した例外を投げかけ、例外発生時に表示させたいメッセージをプログラマーが設定できる。

 

それに対して、throws例外を宣言するために使用する。

throwsを付けたメソッドの中で使用したい例外型を定義するもの。

 

また、throwsはメソッドシグニチャと呼ばれるものに使用される。

メソッドシグニチャとは以下の赤い部分。
メソッド名(変数の型 変数)
例1. public void sample(int A){・・・}
例2. int sample(int B){return ・・・}

メソッド名、()内の変数の型、変数を合わせて「メソッドシグニチャ」と呼ばれている。

 

「throws」は一度に複数の例外を宣言することができるという点もthrowと異なる。

 

throwsの構文

 

throwsを利用した構文は以下の通り。

変数の型 or void メソッド名(変数の型 変数)throws 例外{}
要はメソッドシグニチャの後につける。

 

例外はすでにJavaパッケージ内に用意されているものがある。

 

従って、throwsを使用する際には「import java.io.*;」を記入しないといけないものがある。

java.ioパッケージの中には「例外」も入っている。

 

throwsを使って例外処理を行う場合、try-catchを使ってその中で上の構文の「メソッド名(変数の型 変数)」を呼び出す必要がある。

throwsを使用して宣言された例外は、例外を処理する場所で呼び出されなければならない。

例外を処理する場所というのがtry-catch

そうしないと実行できない。

 

throwsを使用したコード

 

実際にthrowsを使ったプログラムが以下。

public class onlyThrows {
int Waru(int a,int b)throws ArithmeticException{
int c =a/b;
return c;
} 

public static void main(String[] args) {
onlyThrows ABC = new onlyThrows();try {
ABC.Waru(45, 0);
}
catch(ArithmeticException x){
System.out.println(“数字は0で割れませーん”);
}
}
}

割り算を使って見るととても分かりやすい。
実行結果は以下の通り。

数字は0で割れませーん

 

コードの中身

 

onlyThrowsクラスの中にWaruという名前のメソッドを作成し、()内には引数を入力した。

 

Waruメソッドにthrowsを付けて「ArithmeticException」という例外を定義した(int Waru(int a,int b)throws ArithmeticException{})。

この「ArithmeticException」は前回の記事でも使用したが、計算において例外が起こったときに{}内のプログラムが表示されるというもので例外の一つ。

 

a÷bを計算したものをcとして、cをWaruメソッド内の()に返すというもの(int c =a/b; return c;)。

 

次にメインメソッド内。

まずはonlyThrowsクラスのオブジェクトを作成。

 

tryの中には処理するコードを書く(ABC.Waru(45, 0);)。
このWaru(45,0)はWaru(int a,int b)に対応している。

catchの中にはtryで例外が発生したときのコードを書く(System.out.println(“数字は0で割れませーん”);)。

 

数字は0で割ることができない。

ということは例外発生。

数字は0で割れませーん」が表示される。

 

 

throwsとthrowを使用したコード

 

実際にthrowsとthrowを使ったプログラムが以下。

import java.io.*;

public class throwsUse {
void sample()throws IOException{

throw new IOException(“例外発生ー”);

}

public static void main(String[] args) {
try {
throwsUse abc = new throwsUse();
abc.sample();
System.out.println(“例外発生無し”);

}
catch(IOException e) {
System.out.println(e.getMessage());
}

}

}

以上を実行すると以下の結果が得られる。

例外発生ー

 

侍エンジニア塾

コードの中身

 

今回は入出力に関する例外のIOExceptionを利用したい。
IOExceptionは元々Javaに用意されている「java.io」パッケージに入っているからクラスファイルに導入する(import java.io.*;)。

 

throwUseというクラスファイルを作成(public class throwsUse {})。

その中に「sample」という名前のメソッドを作成し、throwsを使って「IOException」という例外を定義(void sample()throws IOException{})。

IOExceptionは入出力について何らかのエラーが発生したときに知らせてくれるもの。

()内にはエラーが発生したときに表示して欲しいメッセージを書くといい。

 

throwsがついたメソッドの中には、例外を発生させるコードを記入(throw new IOException())。
()内には表示させたい文字を記入(“例外発生ー”)。

この時気を付ける点は、throwsの中にthrowを書くときは同じ例外の型を使うということ。

 

メインメソッドの中には、throwsの例外を処理する場所を作る必要がある。
try-catchのこと

tryの中には、もし例外が発生しない場合のプログラム処理内容を記入(throwsUse abc = new throwsUse();abc.sample();System.out.println(“例外発生無し”);)。

 

throwsをthrowsUseクラス内で使用したから、throwsを付けたメソッド(今回はsampleメソッド)をここで呼び出す必要がある。

まずオブジェクトを作ってメソッド名を指定する。

 

 

catchの中には、例外が発生した場合のプログラム処理内容を記入(catch(IOException e) {System.out.println(e.getMessage());)。

 

catch(IOException e)の「e」はIOExceptionの変数。
getMessage()は、メッセージを読み取るメソッドで、Javaにもとから用意されているもの。
e.getMessage()」と書くことで、throwsを使用したメソッドにあるIOExceptionの中の()に書いた内容を取得することができる。

 

複数の例外を一度に定義することも可能

 

throwsは複数の例外を一度に定義することも可能。

その場合、例外をコンマで区切ればよい。

void sample()throws IOException,CharConversionException,・・・{・・・}

こんな感じで複数の例外を一度に投入することができる。

 

例外を書く際は、そのコード内で発生しうる例外に対応するものを書くこと。

「Exception」と書くとすべての例外を包括できる。

void sample()throws Exception{・・・}

だが、それぞれ対応した例外を書くことが望ましいとされる。

何のエラーかわかんなくなる可能性・・・

最後に

 

全く理解できなかったthrowsについてほんの少しは理解できた感じがする。

まだまだ例外についての知識が足りないけれど、ジーっとコードを見つめていると不意に「あっそういうことか」ってなる時が一番楽しいと思う今日この頃。

 

このエントリーをはてなブックマークに追加

コメント

タイトルとURLをコピーしました