• ベストアンサー

throwsの意味

CueCueの回答

  • ベストアンサー
  • CueCue
  • ベストアンサー率40% (86/214)
回答No.2

メソッドの宣言で使用します。 メソッドがスローする可能性のある例外(Exception)を指定します。 ある関数を作った人が、独自の例外を作るとしますよね。 その例外を発生させるためには throw で呼び出し元に例外を投げます。 ところが、「RuntimeExceptionやErrorまたはそのサブクラス以外の場合は、投げる例外を宣言しなくてはならない」というルールがあるのです。 ですからそれを発生させる可能性のあるメソッドで「throws」を宣言しておくんですね。 例: main 関数で expGenerator クラスを呼び出します。 expGenerator クラスは独自例外の BadDataErr を投げるかもしれないので、throws キーワードを定義しておきます。 このとき、独自例外 BadDataErr は「RutimeExceptionかError(もしくはそのサブクラス)ではない場合」です。 class sampleClass { public static void main(String args[]) {     try {       expGenerator("bad");     }     catch(BadDataErr err) {       System.out.println(err);     }   }   static void expGenerator(String str) throws BadDataErr {     if (str.equals("good")) {         System.out.println("Good");     }     else {         throw new BadDataErr("BADが発生した");     }   } } class BadDataErr extends Exception {     public BadDataErr(String str) {         super(str);     } }

saya129
質問者

お礼

すっごいわかりやすかったです! でもこんなに細かくわかるなんて天才ですね! ありがとうございました!

関連するQ&A

  • throwsについて

    こんにちは。 最近、JAVAの勉強を始めたのですがわからない点がありましたので質問に参りました。 こちらのページに http://msugai.fc2web.com/java/throws.html > コンパイル時に、スローされた例外が呼び出し元でキャッチされているかどうかチェックされます。 > キャッチされていなければ、コンパイルエラーになります。 とあったので試しに以下のようなコードを作りました。 class SampleException { public static void main(String[] args) { //try{ exMethod(); //} //catch(NumberFormatException e){} //catch(Exception e){} } private static void exMethod() throws NumberFormatException { String notnum = "非数値"; int suti = Integer.parseInt(notnum); } } (try~catchはコメントアウトしたまま) この説明の通りならコンパイルエラーが出るだろうと思ったのですが コンパイルしてみると成功してしまいました。 (throwsにExceptionを追加すればコンパイルエラーは出ます。) throws NumberFormatExceptionと記述しておけば このメソッド使うときはNumberFormatExceptionかExceptionの例外処理を 必ずしなくてはならないものだと思っていたのですが これは私の認識違いなのでしょうか? それともコードが何か間違えているのでしょうか? よろしくお願いします。

  • 例外(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
  • 例外処理throws

    例外処理ではthrowsかtry~catchを使いますよね。 で、ほとんどの場合はtry~catchを使うようで、ほとんどthrowsを使った例しかなく(まあ、throwsでの例外処理はプログラムが停止してしまうので推奨できないでしょうが)よくわから中区なってしまったので教えてほしいです class Input{ int set(String Toi)throws IOException{ System.out.println(Toi); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int a = Integer.parseInt(str); return a; } } のようにInputクラスを用いて外部からこれを使うために Input input = new Input(); x1 = input.set("x座標を入力"); とすると、「キャッチかスロー宣言をしろ」と怒られてしまいました。(コンパイルエラー) この場合どうすればいいでしょうか?

    • ベストアンサー
    • Java
  • switch文の中に、throws new Exception();を書くとコンパイルエラーになる

    以下のようなswitch文で、 default:内の、throws new Exception(); の処理部分で 「式の開始部分が不正です」というコンパイルエラーになってしまいます。 書き方が間違っているのでしょうか? default:の場合に、throws new Exception(); の処理を行いたいのですが どのように書けば、エラーにならないのか教えて下さい。 -------------------------------- switch (number) { case 0: //処理 break; case 1: //処理 break; default: throws new Exception(); } --------------------------------

    • ベストアンサー
    • Java
  • mainメソッドのthrows節で設定した例外はどこでcatchされる

    mainメソッドのthrows節で設定した例外はどこでcatchされる? java初心者です。 例えば、mainメソッドの中でAというメソッドが呼ばれるとします。 そのAについての宣言文(定義文)にthrows節が書かれているような場合、 mainメソッド内で、Aを呼び出す際、Aの実行の中で、もし例外が発生した場合には、 mainでその例外をキャッチして処理するよう、mainの記述を行う必要があるかと思います。 では、mainメソッド自体に設定したthrows節(つまり、 public static void main(String[] args) throws TestException{ ~略~ } という宣言) については、 その例外(ここでは、TestException)は、どこでcatchすることになるのでしょうか? もしや、「投げっぱなし」ということなのでしょうか? mainメソッド自体は、基本的に他のメソッドから呼ばれるものではないかと思うので、 mainメソッドでスローした例外の受け取り場所がわからなくて質問させていただきました。 色々調べたつもりなのですが、よくわからなくて困ってしまいました。 あまりに初歩すぎて、どこにも書かれていないのかなんなのか、 その説明が見当たらないこと自体にも、疑問を感じている次第です。苦笑 以上、どなたか、宜しくお願い致します。

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

    Javaでインスタンスを作るときの例外処理を学んでいます。 ageクラス(属性は、private int ageのみ)のt1オブジェクトを作るときに、年齢が0歳以上100歳以下ならt1が作られ、それ以外の場合はエラーを返すようにしたいと思いますが、うまくいきません。 そのため、仮に50歳でオブジェクトを作ってから、年齢を150にした場合を考えましたが、Sample クラスのt1.setAge(150);のところで、「処理されない例外の形」というエラーが返っております。 改善点につきまして、ご教示いただければ幸いです。 ■■ageクラス■■ package ex1; public class age { //***属性***// private int age; //***コンストラクタ***// public age(int data){ this.age= data; } //**メソッド**// public int getAge(){ return age; } public void setAge(int age)throws Exception{ //**年齢が0から100までかどうか**/ if((age > 0) && (age <100)){ this.age = age; } else{ throw new Exception("無効です"); } } } ■■Sample クラス■■ package ex1; public class Sample { public static void main(String[] args) { age t1; t1 = new age(50); t1.setAge(150); System.out.println("t1_age="+ t1.getAge()); } }

  • \* の意味が分かりません。

     CGI.pmのソースコードにある \* の意味が分かりません。 どうかよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 「必死」って良い意味?悪い意味?

    「必死」という言葉は、本来「一生懸命」と同じような意味だと 思いますが、最近は「頑張りすぎてて何だか気の毒」といった 悪い意味に使うこともあるような気がします。 皆さんは「必死」という言葉から、どのような印象を持ちますか? 「必死」という言葉をこんな文脈で使う、みたいなのがあれば 合わせて教えていただけると嬉しいです。 ちなみに年代も教えてください。

  • ExampleUnitTest.java

    Android StudioでMyapplicationなどを作成したときに自動的に生成される「ExampleUnitTest.java」というファイルがあると思いますが、それは何を記しているファイルなのでしょうか? またどんな時にソースコードにコードを付け足せば良いのでしょうか? public class ExampleUnitTest { @Test public void addition_isCorrect() throws Exception { assertEquals(4, 2 + 2); } }

  • 「凄い」って良い意味?悪い意味?

    このミステリーが凄い と書いてあれば 面白いミステリーだと 感じますが あの人の顔が凄い  と書いてあれば 怖い顔を想像します あの人が凄い  と書いてあれば 超人的な意味で良くも悪くも取ることができます。 「凄い」のあとに、どんな言葉がくると 悪いイメージですか? 「凄い」のあとに、どんな言葉がくると 良いイメージですか?