Розмір відео: 1280 X 720853 X 480640 X 360
Показувати елементи керування програвачем
Автоматичне відтворення
Автоповтор
強制=tryの中で正常だろうとどんな場合でもcatchさせるという意味かと勘違いしていましたwcatch(オリジナル例外 e)書いても、そのオブジェクトがnewされていなければ受け取りようがないですもんね。
そうですね。ここはややこしいのでプログラムの動きと合わせて理解しておきましょう!
いつも分かりやすい授業をありがとうございます!授業動画の希望で、「try-with-resources」の解説して頂きたいです。よろしくお願いいたします。
ほいほいさん、コメントありがとうございました!try-with-resources文の授業動画ですね。もし同じようなリクエストが集まったら、動画化を検討してみようと思います😄
分かりやすすぎて他に教えたくない、、、
おじんさん、コメントありがとうございます!分かりやすかったようで良かったです。無料で勉強できる場が広がったら素敵だなと思うので、気が向いたら他の人にも教えてあげてください✨
大学ではここまでかみ砕いて教えてくれなかったので助かります🙇♂🙇♂
深浦さん、コメントありがとうございました!僕が大学でJavaを学んだときはかなりザックリと教えられたので、すごく苦しんだ記憶がありますね😅この動画が理解に役立ったみたいで良かったです!
「例外を強制に発生させる場合」というのは、例えばどんな場合の時でしょうか。(※曖昧な質問ですみません)
式神アスカラングレーさん、コメントありがとうございます!これは鋭くて良い質問ですね!また、僕の説明不足でもあるなぁと感じてます。すみません🙏throwの使いどころは、独自の例外を発生させるケースが多いですね。実は、オリジナルの例外クラスを作ることができます。(Exceptionクラスを継承するだけで例外クラスとして扱えます)例えばログインを失敗した場合の例外クラスとして、次のようなLoginFailureExceptionを作ったとしましょう。class LoginFailureException extends Exception { ‥‥ }そして、実際にログインを失敗したときにthrow new LoginFailureException();として例外を発生させるイメージです。LoginFailureExceptionクラスにメンバ変数としてエラーメッセージを持たせれば、ユーザID・パスワードが未入力の場合や間違えている場合などで表示内容を変えることもできます。深い話もしてしまいましたが、何となく使いどころをイメージしてもらえてたら嬉しいです😄
@@SekaChan ご回答ありがとうございます。イメージできました!
たすかる😭
米村美咲さん、コメントありがとうございました!もし動画が役立ったのならとても嬉しいです😄
いつも動画ありがとうございます。質問です。1:20あたりでご説明されている。「パターン1」について、throw new IOException();と記載されている部分では、「e」というインスタンスを作成していないのにもかかわらず、catch(IOException e)の部分でいきなり使えるのはなぜなのでしょうか。「省略形だから」という説明で納得できないこともないですが、どこかでインスタンスが作成されているのでしょうか。
Mickeyさん、コメントありがとうございました。3:51あたりからの解説の通り、その記述は元々> IOException e = new IOException(); ‥ ①> throw e;を省略したものですね。①において、右辺でnewしたタイミングでメモリ上にIOExceptionのインスタンスが生成されます。そのインスタンスへの参照値をいったん変数eに代入してそれをthrowできるし、変数eを使わずにnewしてそのままthrowすることもできるイメージですね。
パターン1でtry文の中にthrow new IO ExeptionしてさらにcatchでIOExeptionしてると、重複してる見え方になるのですが、わざわざパターン1でtry catch文は必要なのでしょうか?
コメントありがとうございました。結論からいっちゃうと、パターン1のtry-catch文は必要ですね。IOExceptionが発生するプログラムは、どこかでcatch文を書かないとコンパイルエラーになるためです。throw(投げる)とcatch(受け取る)は重複してるようにも見えますが、throwは例外オブジェクトを生成する記述でcatchは例外オブジェクトを受け取る記述なので、実は相互に対応してる記述といえます。
例外を強制的に発生させる場合に関連した質問なのですが、独自の例外クラスを作成する際にthrowを使うと仰っていますが、例外オブジェクトをnewで発生させるのは元々Javaにその例外オブジェクトがないからですか?ArrayLndexOutOfBoundsExceptionやNullPointExceptionなどはJavaが例外オブジェクトを持っているからわざわざnew する必要がないということで合っていますか?
たけるさん、コメントありがとうございました!「元々その例外オブジェクトがないから」というよりは、「自動で例外オブジェクトが生成されないから」という表現の方が近いですね😄例えばArrayIndexOutOfBoundsExceptionが発生したときは、Javaの実行環境がArrayIndex~Exceptionのオブジェクトをnewして生成しthrowしてくれています。それを自分でやる必要があるイメージですね。
@@SekaChan ありがとうございます!Javaが自動で生成してくれてたんですね! あと、throwで新たに例外オブジェクトを生成する際にそのコードが含まれたメソッドにthrowsが使われているのですが、これはセットで使われるものなのでしょうか?それともthrowsを使わずに自分で例外処理をする時は必要ないのでしょうか?
学習スピード落ちてきてしまった
でもやっぱり何回みても分からんかった(>
米村美咲さん、コメントありがとうございました!何回見ても分からなかったようで、動画の作り手として力不足を感じてます💦(でも正直に書いてくれてありがとうございます!)動画の内容に関することであれば、コメント欄で質問を受け付けてますよ👍5-2までの動画も参考にしてもらいつつ、分からないことがあれば聞いてくださいね。(↑概要欄にリンクがあります)
コンパイルエラーが発生してしまうのですが、自分ではどこが違うのかわかりません、、エラー文────────────────────────────────────────────────Exception in thread "main" java.lang.Error: Unresolved compilation problem: IOException の到達不可能な catch ブロック。この例外は、try ステートメント本文からはスローされません at lesson5_3.ThrowsMethod.main(ThrowsMethod.java:12)────────────────────────────────────────────────────────────────────────────────────────────────import java.io.IOException;public class WriteFile { public void open() { System.out.println("ファイルを開きます"); } public void write() throws IOException { throw new IOException(); } public void close() { System.out.println("ファイルを保存して閉じます"); }}────────────────────────────────────────────────────────────────────────────────────────────────import java.io.IOException;public class ThrowsMethod { public static void main(String[] args) { WriteFile wf = new WriteFile(); try { wf.open(); wf.close(); }catch(IOException e){ System.out.println("IOExceptionが発生しました。"); e.printStackTrace(); } catch (Exception e) { System.out.println("Exceptionが発生しました。"); e.printStackTrace(); } finally { wf.close(); } }}───────────────────────────────────────────────────回答していただけたら、幸いです!
Takeshiさん、コメントありがとうございました。これはエラーメッセージの通り、ThrowsMethodクラス内にあるIOExceptionのcatchブロックに到達することがない、ということですね。つまり、①tryブロック内でIOExceptionを発生する可能性のあるメソッドを書き忘れていませんか?②catchブロックで指定する例外はIOExceptionで合っていますか?と聞いてくれているエラーです😄これを踏まえてプログラムを見てみると、tryブロック内の wf.close() は wf.write() かなと思います。こうやって自分でプログラムを作って動かしてみるのは、エラーの見方や新しい気づきも得られてとても良いと思います!ぜひこのような勉強を続けていってください!
@@SekaChan ご返信ありがとうございます。ご指摘の箇所を訂正したら、コンパイル通りました!菅原さんの動画のおかげですごく楽しく学習できているので、これからも動画参考にさせていただきます!
強制=tryの中で正常だろうとどんな場合でもcatchさせるという意味かと勘違いしていましたw
catch(オリジナル例外 e)書いても、そのオブジェクトがnewされていなければ受け取りようがないですもんね。
そうですね。
ここはややこしいのでプログラムの動きと合わせて理解しておきましょう!
いつも分かりやすい授業をありがとうございます!
授業動画の希望で、「try-with-resources」の解説して頂きたいです。
よろしくお願いいたします。
ほいほいさん、コメントありがとうございました!
try-with-resources文の授業動画ですね。
もし同じようなリクエストが集まったら、動画化を検討してみようと思います😄
分かりやすすぎて他に教えたくない、、、
おじんさん、コメントありがとうございます!
分かりやすかったようで良かったです。
無料で勉強できる場が広がったら素敵だなと思うので、気が向いたら他の人にも教えてあげてください✨
大学ではここまでかみ砕いて教えてくれなかったので助かります🙇♂🙇♂
深浦さん、コメントありがとうございました!
僕が大学でJavaを学んだときはかなりザックリと教えられたので、すごく苦しんだ記憶がありますね😅
この動画が理解に役立ったみたいで良かったです!
「例外を強制に発生させる場合」というのは、例えばどんな場合の時でしょうか。
(※曖昧な質問ですみません)
式神アスカラングレーさん、コメントありがとうございます!
これは鋭くて良い質問ですね!
また、僕の説明不足でもあるなぁと感じてます。すみません🙏
throwの使いどころは、独自の例外を発生させるケースが多いですね。
実は、オリジナルの例外クラスを作ることができます。
(Exceptionクラスを継承するだけで例外クラスとして扱えます)
例えばログインを失敗した場合の例外クラスとして、次のようなLoginFailureExceptionを作ったとしましょう。
class LoginFailureException extends Exception { ‥‥ }
そして、実際にログインを失敗したときに
throw new LoginFailureException();
として例外を発生させるイメージです。
LoginFailureExceptionクラスにメンバ変数としてエラーメッセージを持たせれば、ユーザID・パスワードが未入力の場合や間違えている場合などで表示内容を変えることもできます。
深い話もしてしまいましたが、何となく使いどころをイメージしてもらえてたら嬉しいです😄
@@SekaChan
ご回答ありがとうございます。イメージできました!
たすかる😭
米村美咲さん、コメントありがとうございました!
もし動画が役立ったのならとても嬉しいです😄
いつも動画ありがとうございます。質問です。
1:20あたりでご説明されている。「パターン1」について、
throw new IOException();
と記載されている部分では、「e」というインスタンスを作成していないのにもかかわらず、
catch(IOException e)
の部分でいきなり使えるのはなぜなのでしょうか。「省略形だから」という説明で納得できないこともないですが、
どこかでインスタンスが作成されているのでしょうか。
Mickeyさん、コメントありがとうございました。
3:51あたりからの解説の通り、その記述は元々
> IOException e = new IOException(); ‥ ①
> throw e;
を省略したものですね。
①において、右辺でnewしたタイミングでメモリ上にIOExceptionのインスタンスが生成されます。
そのインスタンスへの参照値をいったん変数eに代入してそれをthrowできるし、変数eを使わずにnewしてそのままthrowすることもできるイメージですね。
パターン1でtry文の中にthrow new IO ExeptionしてさらにcatchでIOExeptionしてると、重複してる見え方になるのですが、わざわざパターン1でtry catch文は必要なのでしょうか?
コメントありがとうございました。
結論からいっちゃうと、パターン1のtry-catch文は必要ですね。
IOExceptionが発生するプログラムは、どこかでcatch文を書かないとコンパイルエラーになるためです。
throw(投げる)とcatch(受け取る)は重複してるようにも見えますが、throwは例外オブジェクトを生成する記述でcatchは例外オブジェクトを受け取る記述なので、実は相互に対応してる記述といえます。
例外を強制的に発生させる場合に関連した質問なのですが、独自の例外クラスを作成する際にthrowを使うと仰っていますが、例外オブジェクトをnewで発生させるのは元々Javaにその例外オブジェクトがないからですか?ArrayLndexOutOfBoundsExceptionやNullPointExceptionなどはJavaが例外オブジェクトを持っているからわざわざnew する必要がないということで合っていますか?
たけるさん、コメントありがとうございました!
「元々その例外オブジェクトがないから」というよりは、「自動で例外オブジェクトが生成されないから」という表現の方が近いですね😄
例えばArrayIndexOutOfBoundsExceptionが発生したときは、Javaの実行環境がArrayIndex~Exceptionのオブジェクトをnewして生成しthrowしてくれています。
それを自分でやる必要があるイメージですね。
@@SekaChan ありがとうございます!Javaが自動で生成してくれてたんですね! あと、throwで新たに例外オブジェクトを生成する際にそのコードが含まれたメソッドにthrowsが使われているのですが、これはセットで使われるものなのでしょうか?それともthrowsを使わずに自分で例外処理をする時は必要ないのでしょうか?
学習スピード落ちてきてしまった
でもやっぱり何回みても分からんかった(>
米村美咲さん、コメントありがとうございました!
何回見ても分からなかったようで、動画の作り手として力不足を感じてます💦
(でも正直に書いてくれてありがとうございます!)
動画の内容に関することであれば、コメント欄で質問を受け付けてますよ👍
5-2までの動画も参考にしてもらいつつ、分からないことがあれば聞いてくださいね。
(↑概要欄にリンクがあります)
コンパイルエラーが発生してしまうのですが、自分ではどこが違うのかわかりません、、
エラー文
────────────────────────────────────────────────
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
IOException の到達不可能な catch ブロック。この例外は、try ステートメント本文からはスローされません
at lesson5_3.ThrowsMethod.main(ThrowsMethod.java:12)
────────────────────────────────────────────────
────────────────────────────────────────────────
import java.io.IOException;
public class WriteFile {
public void open() {
System.out.println("ファイルを開きます");
}
public void write() throws IOException {
throw new IOException();
}
public void close() {
System.out.println("ファイルを保存して閉じます");
}
}
────────────────────────────────────────────────
────────────────────────────────────────────────
import java.io.IOException;
public class ThrowsMethod {
public static void main(String[] args) {
WriteFile wf = new WriteFile();
try {
wf.open();
wf.close();
}catch(IOException e){
System.out.println("IOExceptionが発生しました。");
e.printStackTrace();
} catch (Exception e) {
System.out.println("Exceptionが発生しました。");
e.printStackTrace();
} finally {
wf.close();
}
}
}
───────────────────────────────────────────────────
回答していただけたら、幸いです!
Takeshiさん、コメントありがとうございました。
これはエラーメッセージの通り、ThrowsMethodクラス内にあるIOExceptionのcatchブロックに到達することがない、ということですね。
つまり、
①tryブロック内でIOExceptionを発生する可能性のあるメソッドを書き忘れていませんか?
②catchブロックで指定する例外はIOExceptionで合っていますか?
と聞いてくれているエラーです😄
これを踏まえてプログラムを見てみると、tryブロック内の wf.close() は wf.write() かなと思います。
こうやって自分でプログラムを作って動かしてみるのは、エラーの見方や新しい気づきも得られてとても良いと思います!
ぜひこのような勉強を続けていってください!
@@SekaChan
ご返信ありがとうございます。
ご指摘の箇所を訂正したら、コンパイル通りました!
菅原さんの動画のおかげですごく楽しく学習できているので、これからも動画参考にさせていただきます!