• ベストアンサー

Java例外について

kozikojiの回答

  • kozikoji
  • ベストアンサー率29% (5/17)
回答No.2

「e」というのは、例外オブジェクトを表します。 tryブロックのコードの実行中、JVMによって例外がスローされた場合、 簡単にいうと、その例外情報がオブジェクトに含まれます。 スタックバックトレースも取得できるので、デバッグに役立ちます。

02241021
質問者

お礼

回答ありがとうございます。 お礼が遅くなってしまい申し訳ありません。 デバッグにも役立つのですか。 とても参考になることが聞けて勉強になりました。 ご丁寧にご教授下さいましてありがとうございました!

関連するQ&A

  • close()で例外が投げられる理由

    最近、Java を勉強しはじめておるのですが、ファイル入出力処理で例えば、out.txt なるファイルを出力するサンプルとして FileWriter out = null; try {  wt = new FileWriter("out.txt");  out.write("はろー"); } catch ( IOException e ) {  e.printStackTrace(); } finally {  try {   if (out != null ) out.close();  } catch (IOException e) {   e.printStackTrace();  } } という風に、FileWriter オブジェクト out をクローズする時に IOException 例外が投げられる可能性に対処するため、try / catch でこれをつかまえるように、と聞きました。 そして驚くべきことに、close() が例外を投げた時の catch 節には特に書くべき処理はない、というのです。 そこで質問です。 1. 本当に FileWriter#close() の IOException 例外に対処するためのコードは不要なのですか?(常に握り潰しているだけ?) 2. 対処するコードが不要なら、そもそも FileWriter#close() が IOException 例外を投げる必要がないのではないですか? 長文失礼しました。

  • JavaからMDB接続について

    下記PGについて ------------------------------------ import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class ClassDatabase { public static Connection connection; public static Statement statement; public static ResultSet resultSet; public void main(String DBNM) { try { // Load the UCanAccess JDBC driver Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); // Define the database URL String url = "jdbc:ucanaccess://" + DBNM + ";"; // Establish the connection DB_CONNECT(url); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static void DB_CONNECT(String url) { try { connection = DriverManager.getConnection(url); } catch (SQLException e) { e.printStackTrace(); } finally { // Close the connection when you're done if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } ------------------------------------ connection = DriverManager.getConnection(url);の所ですが応答が帰って来ないほど遅いのですがどうにかなりますでしょうか? MDBと接続はできています。(整合性チェック等を行っているようです、させない方法等ありますでしょうか?)

    • ベストアンサー
    • Java
  • C# 例外が発生しないことの保障

    Javaと比較して書きます。 Javaで記述した場合: public class JavaClass {  public static SampleClass s = new SampleClass(); } C#で記述した場合: public class CSharpClass {  public static SampleClass s = new SampleClass(); } JavaでもC#でも、同じコードを記述しているように見えますが、Javaではnew SampleClass()コンストラクタで例外が発生しない事が分かっているのに対して、C#の場合では例外が発生しないとは言い切れません。 これは、Javaでは、例外をスローする可能性のあるメソッド宣言では、その全てについてthrows宣言をしなければいけないのに対して、C#にはこの制約が存在しないことが原因です。 これについて何が困るかといいますと、C#で、static宣言な変数や静的コンストラクタで安易にメソッド呼び出し等を行うと、キャッチできなくなってしまいます。 public class Exceptionner {  public Exceptionner()  {   throw new ApplicationException("Exceptionnerクラスの例外");  } } public class SampleClass {  public static Exceptionner e = new Exceptionner(); // ここで例外が発生するが、キャッチできない。 } public class MyEntryPoint {  public static void Main()  {   try   {    SampleClass s = new SampleClass();   }   catch (Exception e)   {    // System.ApplicationExceptionでなくSystem.TypeInitializationExceptionとなる。    // つまり、元の例外の情報は失われている    Console.WriteLine(e.GetType());   }  } } これを現在漠然と問題視していますが、何かよい解決策はありませんでしょうか。 望んでいる解決策: ・C#でもメソッドが例外を返さないという保障がソースレベルでメソッドやコンストラクタに宣言可能? ・C#では例外をちゃんとキャッチしなくてもスマートに記述することが可能? ・問題視する必要がない?(whyも含めて)

  • 「例外 *** は対応する try 文の本体ではスローされません。」について。

    以下のソースをコンパイルすると, simulator/showManualPage.java:21: 例外 java.net.URISyntaxException は対応する try 文の本体ではスローされません。 } catch (URISyntaxException ex) { ^ simulator/showManualPage.java:23: 例外 java.io.IOException は対応する try 文の本体ではスローされません。 } catch (IOException ex) { ^ とエラーを返されます。 調べたところ、スローされるはずのない例外をキャッチしようとしている、というエラーだとは分かりましたが、スローは書いているので原因が分かりません。 やり方が悪いのでしょうか? package simulator; import java.awt.event.*; import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; public class showManualPage implements ActionListener { public void showManualPage() throws URISyntaxException, IOException { // Get Desktop Object Desktop desktop = Desktop.getDesktop(); desktop.browse(new URI("http://google.co.jp")); } public void actionPerformed(ActionEvent event) { try { // Run browser new showManualPage(); } catch (URISyntaxException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • 例外が発生した時にブラウザにメッセージを表示

    Servletで、db検索しその結果をブラウザに表示しています。 SQLExceptionや、NULLPointerExceptionが発生した時に、 今は、 catch(Exception e){ e.printStackTrace(); } としているのでログにエラーを書き出しているだけで、画面にはなにも表示されません。 エラーの時も、PrintWriter pw = response.getWriter();で pw.println("<HTML><HEAD></HEAD>"); pw.println("<body><h1>"); pw.println("エラー発生!"); pw.println("</h1></body></html>"); というふうにブラウザに出力したいのです。 catchブロックの中にはどのように、記述したらいいのでしょうか? ひとつのクラス内で以上の事がしたいのですが、そもそもそれも 無理なのでしょうか?

  • Java:スレッドでエラー発生時に処理を終わらせる

    以下の事が出来ずに悩んでいます。 これ参考になるかな? というようなWEBページ等がありましたら、教えていただけると助かります。 ■やりたいこと ・aaa.javaから、「スレッド1」「スレッド2」「スレッド3」の処理を呼び出し、それぞれのスレッドで処理を実行する。 ・全てのスレッド処理が完了したら、次の処理へ進む。 ・「スレッド1、2、3」で、何かしらのエラーが発生した場合は、「aaa.java」の処理を終わらせる。 ■現状 ・aaa.javaから、「スレッド1、2、3」の処理を呼び出し、それぞれ処理を実行させる事は出来た。 ・すべてのスレッドが完了したら次の処理へ進む事は出来た。 ・「スレッド1、2、3」のどこかでエラーが発生した場合でも、処理の完了となり、「次の処理」へ進んでしまう。 もうちょっと細かい事を書くと、各スレッドでは、それぞれデータ作成のSQLを実行する処理をさせているのですが、 そのSQLが何かしらの要因でエラーで戻ってきた場合、次の処理へ進んでしまうとまずいです。 そのため、どこかのスレッドのSQLがエラーになったら、スレッドを呼び出した元の「aaa.java」でエラー・終了。となるようにしたいです。 一応、各スレッドでSQLのエラーとなった場合には「catch」に飛んでる。状態ではあるのですが、aaa.java側に戻って終わらせる事が出来ず。。。 ソースはだいぶ削りましたが、参考に以下記載します。 (削りすぎている可能性もありますが、その際はごめんなさい。) すみませんが、よろしくお願いします。 ---------------------------------------- aaa.java   public void Sql_Exec() throws SQLException, IOException {     /*     ループ条件の取得。(省略)     */     //ループ処理。     for (ループ条件(省略)) {       //スレッドの呼び出し。       //スレッド1       Thread_1 exec_1 = new Thread_1(引数もろもろ);       Thread thr_1 = new Thread(exec_1);       thr_1.start();       //スレッド2       Thread_2 exec_2 = new Thread_2(引数もろもろ);       Thread thr_2 = new Thread(exec_2);       thr_2.start();       //スレッド3       Thread_3 exec_3 = new Thread_3(引数もろもろ);       Thread thr_3 = new Thread(exec_3);       thr_3.start();       try {         //全てのスレッドが終わるまで待つ。         thr_1.join();         thr_2.join();         thr_3.join();       } catch (InterruptedException e) {         //例外処理         e.printStackTrace();       }     }   } ---------------------------------------- スレッド1~3.java public class Thread_1 extends Thread{   public void run(){     /*     ループ条件の取得。(省略)     */          //ループ処理。     for (ループ条件(省略)) {       try (Connection con1 = DB接続。) {         String sql1 = 実行SQL取得;         PreparedStatement pstmt1 = con1.prepareStatement(sql1);         int aaa = pstmt1.executeUpdate();         con1.close();       } catch (SQLException | IOException | JAXBException e) {         e.printStackTrace();         throw new RuntimeException("例外!");       }     }   } } ----------------------------------------

    • ベストアンサー
    • Java
  • (java)HTMLをParseさせず・・・

    初めてお世話になります。 現在、HTMLをParse(解析)せずに、 BufferedReder→indexOf(抜き取りたい「文字」の出現場所を検索)→ substring(indexOfの内容を元に「文字」を抜き取る) という内容のシステムをjavaで組みたい!と試行錯誤しております;; 目的はParseと上記内容での実行時間がどれくらい違うのかという興味で作成を開始しました。 今回、BufferedReader→indeOfまでは考え通り上手くいったのですが、 substiringで1000文字以上あるHTMLソースから指定した箇所(indexOf)で抜き取る作業ができないので教えてください。(正確には○○.substring(int,int)の○○部分をどこにしていしたらいいのかわかりません。) 是非ご教授の程よろしくお願いします。 実際のコードは下記の通りです。 import java.io.*; import java.net.URL; public class Test { public static void main (String []args){ add(); } public static void add(){ try { //URLを指定して読み込み URL u = new URL("http://'"URLを入力"'/"); InputStream is = u.openStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is,"EUC_JP")); String line ; int linenum=1; int length=1; //1行ずつ読み込み while ((line = br.readLine()) != null) { String A = "166"; String B = "102"; int i; int j; //文字列検索(HTMLソースの0~何文字目に出現!?) i = line.indexOf(A); j = line.indexOf(B); if(i>=0){ System.out.println((i+length) + "文字目"); } if(j>=0){ System.out.println((j+length) + "文字目"); } linenum++; length += line.length() + 1; String str1 = line; String str2 = str1.substring(i+length,j+length);                             //当然「line」なんかにsubstringかけても駄目でしたw System.out.println(str2) ; } is.close(); br.close(); } catch (FileNotFoundException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } } 説明が意味不明な点もあるかと思いますので、 質問もお待ちしております。 是非、お力をお貸ししてください。 よろしくお願いいたします。

  • CGIで呼び出したスクリプトでJAVAは動く?

    やりたいことはJAVAスクリプトのパラメータを状況に合わせてCGIで生成してJAVAを実行させたいです。 いま、.shtmlファイルの一部をcgiで実行し、JAVAのパラメータの一部をCGIの実行結果から持ってきてファイルを完成させてみましたが、Javaは動いてくれません。 CGIからパラメータを持ってくるのではなく、普通にhtmlファイルの中にJavascriptのパラメータを全部記述してやれば動いてくれて、そのソースとCGIを絡めた場合のソースと比べましたが全く同じですが動きません。 これは何が原因なのでしょうか。 パラメータを全て記述すると膨大になるために、必要な部分だけの記述にしたくてCGIで選択できるようにしてみたのですが・・・ 単なる何かソースの書き間違いでしょうか。(何度も見比べたのですが・・・) それとも元々こんなことできないのでしょうか。

    • 締切済み
    • CGI
  • 例外処理があまり使われない理由について

    C++でのプログラミングに関して質問です。 只今勉強中で色々な方のソースを拝見していますが、 参考書や解説サイトにはよく載っている「例外処理(tryとかcatchとか)」を記述したソースを殆ど見ないのですが、 例外処理は使わない方がいいのでしょうか? (処理速度が遅くなるとか、gotoのような暗黙の使ってはいけない理由があるのですかね?) 私自身も面倒なので例外処理は今まで書いたことがないのですが、 例外処理を記述する癖をつけた方がいいでしょうか?

  • System.inをClose()すると例外が発生する。

    こんにちは、tokopokoといいます。 ■次のプログラムを実行すると、エラーになります。 なぜエラーになるのか、ご存知の方はいらっしゃいませんか。 import java.io.*; class TestInput { public static void main(String[] args) { System.out.println("first = \"" + getInputValue("first?") + "\""); System.out.println("second = \"" + getInputValue("second?") + "\""); } public static String getInputValue(String message) { String returnString = ""; System.out.print(message); BufferedReader input = null; try { input = new BufferedReader(new InputStreamReader(System.in)); returnString = input.readLine(); } catch (IOException e) { e.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } return returnString; } } ■実行例 D:\>javac TestInput.java D:\>java TestInput first?100 first = "100" second?java.io.IOException: Stream closed at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:145 ) at java.io.BufferedInputStream.read(BufferedInputStream.java:308) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) at java.io.InputStreamReader.read(InputStreamReader.java:167) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at TestInput.getInputValue(TestInput.java:14) at TestInput.main(TestInput.java:5) second = "" ■私の環境は以下の通りです。 OS: Microsoft Windows XP Professional SP2 java: java version "1.6.0_03"

    • ベストアンサー
    • Java