- ベストアンサー
例外処理がまったくわかりません!!
下のプログラミングについていくつか質問があります。 (1)etest()メソッドってなんですか? (2)存在しないファイルを開くってどういうことですか? (3)FileReader( )対応catch節、Close( )対応catch節ってなんですか? (4)あと、プログラミングあとの本の解説の部分がよくわかりません。抜粋してみます。 「一般的な例外クラスはxxxExceptionというクラス名をしています。このタイプの例外クラスはみな「Exception例外クラス」をスーパークラスにしています。この場合、「catch(Exception e)」を使うとすべてのxxxException例外を補足できるという仕様になっています。ですから下のetest( )メソッドは次のように、ひとつのcatch節で記述することができます。このようにしても表示される4エラーメッセージ(eで指示)は、正しく発生例外(FileNotFoundExceptionまたはIOException) 対応のものになります。」 public static void etest( ) { try { // try節を書く FileReader fr = new FileReader("xfile.txt"); } catch (FileNotFoundException e) { // FileReader( )対応catch節 System.out.println("例外1: " + e); // 例外情報を表示 return; // 戻る } catch (IOException e) { // Close( )対応catch節 System.out.println("例外2: " + e); // 例外情報を表示 return; // 戻る } System.out.println("ファイルは正しくオープンされました"); } } よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。再質問を頂いたようなので。 > Javaに組み込まれてないメソッドを作るときにはうしろの方で > そのメソッドの返り値と引数を定義しないといけないんじゃ > ないでしょうか? 「うしろの方」という言い方は、何だか笑っちゃいますね。 別に前でも後ろでも構いません。対象となるクラスのどこかで 定義されていればOKです。 で、ご質問のプログラムの場合ですが、実はその定義だけが 書かれていて、それを使う部分が書かれていないんです。 (質問者さんの表現を借りれば、「うしろの方」が書かれていて 「まえの方」が書かれていない。) 例えば、次のような記述があれば、めでたく完結するわけです。 public static void main(String[] args) { etest(); }
その他の回答 (2)
- ranx
- ベストアンサー率24% (357/1463)
(1) Javaではプログラムの単位を「メソッド」と言います。古いプログラミング言語で 「サブルーチン」と呼ばれるものと似ていますが、オブジェクト指向という考え方から 「メソッド」と呼びます。詳しくは、オブジェクト指向についてきちんと勉強して 下さい。etest()は作成者が勝手につけた名前です。要するに、質問で取り上げられた プログラムのことです。 (2) 存在しないファイルは開くことができません。一般的に、何かをやろうとした時に、 実はそれはできないことでした、という場合、例外が発生します。存在しない ファイルを開こうとした場合はFileNotFoundExceptionが発生します。 (3) FileReader()というコンストラクタは、ファイルが存在しなかった場合に例外を 発生します。それがFileNotFoundExceptionです。close()というメソッドは、 (質問のプログラムには書かれていませんが)入出力に関したトラブルが起きた 場合にIOExceptionという例外を発生します。つまり、ここでcatchされている 例外には、次のような対応があることになります。 FileNotFoundException - FileReader() で起きた例外 IOException - close() で起きた例外(一般的にはclose()に限りませんが) (4) 上記FileNotFoundExceptionとIOExceptionは、どちらもxxxExceptionという形式の 名前になっています。どちらもExceptionクラスのサブクラスです。ですから、 catch (FileNotFoundException e){ ・・・ } catch (IOException e){ ・・・ } などと分けて書かなくとも、 catch (Exception e){ ・・・ } と書けば、すべての例外を処理できます。
お礼
お返事どうもありがとうございました!! すべての質問に答えていただいてありがとうございます。 >etest()は作成者が勝手につけた名前です。要するに、質>問で取り上げられたプログラムのことです。 すいませんここがやはりまだちょっとわからないのですがどういうことでしょうか?Javaに組み込まれてないメソッドを作るときにはうしろの方でそのメソッドの返り値と引数を定義しないといけないんじゃないでしょうか?メソッドの作り方のところでそう習いましたけど・・・。
- torokonbu
- ベストアンサー率40% (25/62)
すべて3行目の >FileReader fr = new FileReader("xfile.txt"); という命令に対して、何かしらの問題が発生した場合に対処する処理だと考えてください。 3行目の処理をやって(try)、エラーが発生した場合、その(エラー)に該当する所が受け取り(catch)対処するというイメージです >FileReader fr = new FileReader("xfile.txt"); ここで【xfile.txt】というファイルを指定していますが、 この命令に対し、そんな名前のファイルが見つからない(つまりエラーですね)場合に処理するのが >catch (FileNotFoundException e)の中の処理です。 【FileNotFound】という名前からピンと来ると思います。 >catch (IOException e)は入出力に関するエラー処理です。【IO = Input/Output】 etest()メソッドは作成者が付けたメソッド名前でしょう。深い意味は無いです。
お礼
お返事どうもありがとうございます!!! とてもわかりやすくて大変参考になりました。 >etest()メソッドは作成者が付けたメソッド名前でしょう。深い意味は無いです。 すいません、ここがよくわかりないのですがどういうことでしょうか? もう少し解説お願いできないでしょうか? 作成者が勝手に付けたメソッドって確か返り値と引数の定義などが必要じゃないのですか? int(a, b) a=b^2 というように。
お礼
お返事ありがとうございます。なるほど、そういうことでしたか「うしろの方」が書かれてなかったんですね。それでetstってどこから来たのかわかります?作者が勝手につけた名前だそうですが。(etestじゃなくてetstでした。。。) それとすいませんたいがいプログラムの冒頭の方にあるpublic static void main(String[] args)のところは今まで気にしてなかったんですがこれもメソッドということですか?すいませんすると下のプログラムではpublic static void main(String[] args)とメソッドを定義したのにそれを使うメソッド(ボクの表現で言えば前のほうに書いてあるやつ(笑))が書かれてないということですか?そんなことあっていいんですか?System.out.println(c)は標準メソッドだから関係ないですよねぇ・・・。なんども質問してすみません!! public class JcVar1 { // JcVar1.java [java] public static void main(String args[]) { int a, b, c; // 変数の宣言 a = 10; // 値の代入 b = 20; // 値の代入 c = a + b; // 2数の加算 System.out.println(c); // 結果の出力 } }