• ベストアンサー

呼び出し側ってなんですか?

下に抜粋した本の解説の部分がわかりません。「呼び出し側」ってなんですか? -------------------------------------------------- このプログラムのetst( )メソッドでは、スロー宣言「throws FileNotFoundException」が行われます。 記述(1)でエラーが発生したら、その情報を呼び出し側に送り、そこでetst( )の処理は終わりになるため、記述(2)は実行されません。記述(1)でエラーが発生しなかった場合は、記述(2)が実行されます。 import java.io.*; public class JcReig3 { // JcReig3.java [java] public static void main(String args[]) { try { etst(); } catch (FileNotFoundException e) { // 呼び出し側でcatch節を書く System.out.println("例外発生: " + e); } } // こちらはthrows宣言を書く public static void etst() throws FileNotFoundException { FileReader fr = new FileReader("xfile.txt"); // (1) System.out.println("正しくオープンされました"); // (2) } }

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • chi-kon
  • ベストアンサー率43% (58/132)
回答No.1

public static void main(String args[]) { try { etst(); <-----------ここのことです。 } catch (FileNotFoundException e) { // 呼び出し側でcatch節を書く System.out.println("例外発生: " + e); } } mainメソッドのなかでetstメソッドを呼んでいます。 etstメソッドは処理を正常に終了するまえに例外を投げます。(この場合FileNotFoundException ) この例外が上がると呼び出し元(この場合mainメソッド)に処理が返されます。 正確にはmainメソッドのcatch節まですっとびます。

who_is_next_
質問者

お礼

お返事どうもありがとうございました。 なるほど!そういうことだったんですね。 大変よくわかりました。 感謝感謝です!

その他の回答 (1)

  • lawson
  • ベストアンサー率44% (29/65)
回答No.2

初心者に見えるので、言葉を選んで書きます。 etestはメソッドです。 メソッドには、定義する部分と、 メソッドを使うところがあります。 一般的にメソッドを使うことをメソッドを呼び出すと いいます。 メソッドの呼び出し側といえば、 簡単にいえば、 メソッドを呼び出している場所のことです。 メソッドの定義の中にはメソッドが呼び出された時 に、処理される内容が記述されています。 そのメソッドの定義部分に書いてある 処理内容を実行したい場所で、 メソッドを呼び出すと、あらかじめメソッドに定義された 内容の処理をしてくれて、終わったら、 呼び出した、場所の直後から、処理が進みます。 メソッドの定義部分の最初の {}の前に記載されている。 public static void etst() throws FileNotFoundException の部分を メソッドの宣言部分といったり、 メソッドのヘッダーといったり、 します。 そこには、外部のメソッドを使う側 つまり、呼び出し側に対して、 どんな呼び出し方をしたらいいかについての 構文情報が記載されています。 publicという文言をprivate などの文言に かえることによって、ある特定の人しか、 呼び出せないようにすることも可能です。 このように、ここに記載された文言によって、 呼び出し側は、呼び出し方がある程度きまって しまいます。 ここに、throwsというキーワードが ありますが、これはこの後に続く、 FileNotFoundExceptionという例外クラスを このメソッドが投げる可能性があるといっています。 例外クラスってなに?とか 投げるってなに?とか いろいろ、疑問があるでしょうが・・。 とりあえず、がまんしてそういうもんだとおもって ください。 呼び出し側ってなんですか? って聞いてるレベルで、質問されても説明の しようがありません。 そして、このthrowsの後ろがもし、 チェックされる例外の時は 呼び出し側では、 try ~ catchで囲んで catchで FileNotFoundException かまたは、その親を キャッチするか 呼び出し側のメソッド自体の throwsに FileNotFoundException か、またはその親がないと コンパイルエラーになります。 チェックされる例外ってなに? とか、 親ってなに? とかの疑問も、同様にして、いまはがまんしてください。 とりあえず、今は、 コンパイルエラーになった時に、 呼び出そうとしているメソッドの {}の前にthrowsがあってその throwsのとなりにあるものが コンパイルエラーのメッセージにでてきてたら、 呼び出し側で、それを、 try ~ catchしておけば、 コンパイルがとおって、とりあえずは、 自分がやりたい動くものが作れるということだけ。 知っとけば十分だと思います。

who_is_next_
質問者

お礼

お返事ありがとうございました! >初心者に見えるので、言葉を選んで書きます。 ありがとうございます!お察しのとおり筋金入りの初心者でしてあまり難しいことを言われても混乱しちゃいます(笑) 言葉を選んでくださって大変わかりやすかったです。今は気にしなくていいところなども教えてくださってこれからの学習も計画が立てやすくなりました。 これからもっとJavaのことについて勉強していきたいです。今回はどうもありがとうございました。

関連するQ&A

  • 例外処理についてお願いします!!

    下のプログラミングについていくつか質問があります。 (1) プログラムの冒頭に来るpublic static void main(String[] args)を今まで気にしていなかったのですが これはどういうことですか?これもメソッドのひとつなんですか?このプログラムではpublic static void main(String[] args)でメソッドを定義してそれをetest( )メソッドで開いているという感じでしょうか? それとetstってどこから来たのかわかります?作者が勝手につけた名前だそうですが。 (2)FileReader fr = new FileReader("xfile.txt"); のところがわかりません。これはどういう意味ですか? public static void main(String[] args) { public static void etst( ) { 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("ファイルは正しくオープンされました"); } } } よろしくお願いします!!

    • ベストアンサー
    • Java
  • 例外(throws)について

    例外のthrowsがよくわかりません。 (例1) public static void main(String[] args) throws Exception { new testClass().testA(); } void testA() throws Exception { FileReader exFile = new FileReader("exFile.txt"); } (例2) public static void main(String[] args) throws FileNotFoundException { new testClass().testA(); } void testA() throws FileNotFoundException { FileReader exFile = new FileReader("exFile.txt"); } 上記2つの例ではどちらも 「java.io.FileNotFoundException: exFile.txt (指定されたファイルが見つかりません。)」 というログが出力されるようです。 throws ExceptionにしてもFileNotFoundExceptionと判別できるのならば、 あえてthrows FileNotFoundExceptionにする必要がなく、大抵の場合 throws Exceptionにしておけばよいと思うのですが、 その解釈は間違っているでしょうか?

    • ベストアンサー
    • Java
  • 例外処理がまったくわかりません!!

    下のプログラミングについていくつか質問があります。 (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("ファイルは正しくオープンされました"); } } よろしくお願いします。

    • ベストアンサー
    • Java
  • throw文について

    上と下のソースプログラムがよく似ているのにもかかわらず上記のプログラムでコンパイルエラー発生する理由がわかりません。 解決方法はpublic static void badMethod()throws IOException{に書き換えるということが分かっていますがイマイチ理屈が分からない次第であります。 たぶん、上記のプログラムはimport文があるからだと思うのですが回答のほどよろしくお願い致します。 (コンパイルエラー) import java.io.IOException; class TryCatch{ public static void main(String args[]){ try{ badMethod(); System.out.println("A"); } catch(IOException ex){ System.out.println("B"); } catch(Exception e){ System.out.println("C"); } System.out.println("E"); } public static void badMethod(){ throw new IOException(); } } (コンパイル正常) public class X{ public static void main(String args[]){ try{ badMethod(); System.out.println("A"); } catch(Exception ex){ System.out.println("B"); } finally{ System.out.println("C"); } System.out.println("D"); } public static void badMethod(){ throw new RuntimeException(); } }

  • javaに関しての質問です (エラー)

    最近javaの勉強を始めたばかりの者です とある動画をみながら勉強をしていたのですが なぜかエラーが出てしまいます。 エラーの内容は... エラー:この文に制御が移ることはありません     if( c== 13){ エラー:return文が指定されていません この二つです、もし解決方法がわかる方がいましたらぜひ教えてくれるとうれしいです 下がソースコードになります。 public class part01 { static String name = "すけさん"; static int lv = 30; public static void main( String[] args )throws java.io.IOException { putzyosyou(); // 序章を表示 putcommnd(); if(lv<40){ putgameover(); }else{ putgamecrear(); } } public static void putzyosyou() { System.out.println("魔王が世界を滅ぼそうとしている。"); System.out.println(name + "はレベルが" + lv + "のツワモノです"); } public static void putcommnd()throws java.io.IOException { System.out.println("1.魔王を倒しに行く"); System.out.println("2.修行する"); System.out.println("3.だれかに頼る"); System.out.println("4.そんなことよりも寝よう"); int c = inputcommnd(); if( c== '1' ){ System.out.println("魔王が現れた!!"); }else if( c== '2' ){ lv += 2; System.out.println ("レベルが"+ lv + "になった!!"); putcommnd(); } } public static int inputcommnd()throws java.io.IOException { int c = System.in.read(); if( c== 10){ return( inputcommnd() ); if( c== 13){ return( inputcommnd() ); } return( c ); } } public static void putgameover() { System.out.println(name + "は負けました。"); System.out.println("GAME OVER"); } public static void putgamecrear() { String str = name + "は魔王を倒しました。"; put( str ); if(lv>120){ System.out.println("レベル" + lv + "なので魔王ゴミでした"); }else if(lv>80){ System.out.println("レベル" + lv + "なので余裕でした"); }else if(lv>50){ System.out.println("レベル" + lv + "なので倒せました"); }else{ System.out.println("レベル" + lv + "なので苦戦しました"); } System.out.println("GAME CREAR"); } static void put( String str ) { System.out.println( str ); } }

    • ベストアンサー
    • Java
  • ファイル読み込みで

    市販のテキストでファイルを読み込むプログラムを作ったのですがうまくできません。 import java.io.*; public class ShowFile{ public static void main(String args[]){ if(args.length != 1){ System.out.println("使用法: java ShowFile ファイル"); System.out.println("例: java ShowFile ShowFile.java"); System.exit(0); } String filename = args[0]; try{ BufferedReader reader = new BufferedReader(new FileReader(filename)); String line; while((line = reader.readLine()) != null){ System.out.println(line); } reader.close(); }catch(FileNotFoundException e){ System.out.println(filename + "が見つかりません"); }catch(IOException e){ System.out.println(e); } } } javac ShowFile.javaでコンパイルはうまくいったのですが、 実行時にjava ShowFile input.txtとするとException in thread "main" java.lang.NoClassDefFoundError: ShowFile というエラーが出ます。input.txtというファイルは存在します。 アドバイスをお願いします。

    • ベストアンサー
    • Java
  • コマンドライン引数

    『やさしいJava』で勉強してます。 import java.io.*; class Sam3 { public static void main(String args[]) { if(args.length != 1){ System.out.println("ファイル名が違うよ。"); System.exit(0); } try{ BufferedReader br= new BufferedReader(new FileReader(args[0])); String str; while((str = br.readLine()) != null){ System.out.println(str); } br.close(); }catch(IOException e){ System.out.println("エラー"); } } } で、コンパイルして、 Sam3 test2.txt と実行しても 「準備ができていません。読み取り中・・・」 としかでません。 なにか間違いがあるのでしょうか? お願いします。

    • ベストアンサー
    • Java
  • Javaのカウント方法について

    お伺い致します。 CSVで取り込んだデータの抽出をしたいのですが、方法が見出せません。どの点を直せば宜しいのでしょうか。 具体的には取り込んだ郵便番号をカウントして(例:京都市,34)CSVファイルに出力するように出したいのですがカウントがうまくできません。(以下、コメントアウトしたものがありますが、今までのソースを記載します) 宜しく御願いします。 import java.io.FileReader; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.IOException; import java.io.*; public class test01 { static String fname ="26KYOUTO.CSV"; public static void main(String[] args){ if(args.length>0) fname = args[0]; try { BufferedReader reader = new BufferedReader(new FileReader(fname)); BufferedWriter pw = new BufferedWriter(new PrintWriter("orig.txt")); String line = reader.readLine(); System.out.println(line); pw.println(""); int n = 0; int count = 0; _/* while(true) { String line = reader.readLine(); if(line.equals("26101")) break; count++; } */ reader.close(); System.out.println("京都府北区=" +count ); } catch(FileNotFoundException e) { System.out.println("ファイルがありません。"); } catch(IOException e) { System.out.println("入出力エラーです。"); } } }

    • ベストアンサー
    • Java
  • 他ファイルで定義された自作例外の受け方

    他ファイルで定義された自作例外の投げ方と受け方を 教えて下さい。 // ------ Class.java ---> import java.io.*; public class Class1 {  static Class2 oClass2;  public static void main (String[] args)  {   try {    oClass2 = new Class2();    System.out.println("main");    oClass2.vfFunc();   } catch (MyException e) {    System.out.println("catch MyException");   } catch (Exception e) {    System.out.println("catch Exception");   }  } } // <------ Class1.java --- // ------ Class2.java ---> import java.io.*; public class Class2 {  public Class2()  {   System.out.println("Class2コンストラクタ");  }  public void vfFunc()  {   System.out.println("Class2 vfFunc");   throw new MyException();  }  public class MyException extends Exception  {   public MyException()   {    System.out.println("MyException");   }  } } //<------ Class2.java ---

    • ベストアンサー
    • Java
  • 例外を明示的にthrowするとき

    例外をthrowしたいとき、以下の場合、IllegalArgumentException、FileNotFoundException、どちらを使用していいのかわかりません。 public static void main(String[] args){ try{ AAA(new File(args[0])); }catch(FileNotFoundException e){ System.out.println(e.getMessage); } e)catch(IllegalArgumentException e){ System.out.println(e.getMessgae()); } } public static void AAA(File file){ if(isFile()){ //処理 }else{ throw new IllegalArgumentException("引数が不正です");    //それともthrow new FileNotFoundException("ファイルが存在しません"); } }

専門家に質問してみよう