エラーが出た時どうする? Javaコース初級 基礎編Day14&15「例外処理・正規表現」

デイトラJava
ハック
ハック

こんにちは!運営者のハックです。

今回は「Javaコース初級 基礎編Day14及びDay15『例外処理、正規表現』」の学習再挑戦について紹介します。

Day14  例外処理

Day14は例外処理について学びました。例外処理というのは正確に言うとJavaにおける「例外が発生したときの振る舞い」についてです。また、例外が発生したときのアクション、スタックトレースの簡単な見方についても学習しました。

例外処理とは

Javaでは、プログラム実行中に予期しない事態が発生した場合、例外(Exception)として扱われます。例外が発生すると、その時点で通常のプログラムの流れが中断され、エラーの原因や種類に応じた処理(例外処理)が必要になります。

Javaでの例外処理は主にtry-catchブロックを使用して行われます。tryブロック内には例外が発生する可能性のあるコードを記述し、catchブロック内にはその例外を捕捉して対応する処理を記述します。必要に応じて、複数のcatchブロックを用意して異なる種類の例外に対応することができます。

モナ
モナ

中級の課題では実際にtry-catchブロックを使用しています。

例外はjava.lang.Exceptionクラスから派生したクラスで表され、実行時例外(RuntimeExceptionとそのサブクラス)それ以外の例外に分類されます。実行時例外は、通常のプログラムの流れの中で処理すべき例外(例えば、配列の範囲外アクセスなど)を指し、これらはチェックされない例外と呼ばれます。それ以外の例外は、外部リソースの利用失敗など、プログラムの制御外で発生する可能性のある例外で、これらはチェックされる例外と呼ばれ、コンパイル時に対応が強制されます。

スタックトレースの簡単な見方

課題では「StandardOpenOption.APPEND」をコードに追記して、「firework.tet」が無い場合どのような例外が発生するのか確認しました。

ねこ奈
ねこ奈

うわぁ…中級課題やってた時に散々見たエラー文なのにゃ。

モナ
モナ

何度このエラー文を見たことでしょうか…

スタックトレースのエラー文には見るポイントがあります。

まず、先ほどの画像上段に書かれているエラー文「[10:51:26] [Server thread/ERROR]: Could not pass event PlayerToggleSneakEvent to plugin-sample-re v1.0-SNAPSHOT org.bukkit.event.EventException: null」に注目します。これは簡単に説明すると「プレイヤーがスニーク(しゃがみ)状態を切り替えるイベントを処理しようとしたとき、プラグインでエラーが起きたけど、エラーの詳細はわからないよ」というメッセージです。

続けて、エラー文の中に「Caused by: 」と記載されている部分を探します。今回の場合は「Caused by: java.nio.file.NoSuchFileException: fireWork.tet」のエラー文に注目します。この文章の意味を簡単に説明すると「『fireWork.tet』というファイルを探したけど、どこにもなかったよ」ということです。

続けてエラー文を見ていくと「at plugin.pluginsamplere.Main.onPlayerToggleSneak(Main.java:82) ~[?:?]」という一文が見つかります。これは「プログラムを実行している途中で、Main.javaの82行目で問題が発生しました」というメッセージです。

改めてMain.javaの82行目を確認すると課題で追加した「StandardOpenOption.APPEND」のコードが原因箇所であることが分かります。

もなぁ
もなぁ

このスタックトレースの見方、1年前に習ったきり忘れてしまい中級編ではエラー文をChatGPTに丸投げしていました…

今後はエラー文から必要な箇所だけ抜き出ししてGPTに聞くようにします。

Day15  正規表現

Day15は正規表現について学びました。正規表現は、文字列のパターンを表現するための方法です。

例えば、メールアドレスや電話番号など、特定の形式を持つ文字列を検索、置換、またはチェックするときに便利です。文字の組み合わせに特別な意味を持たせて、何を探しているのかを「パターン」として記述します。これにより、複雑な文字列処理が簡単に行えるようになります。

正規表現の使い方

正規表現を使用するには、まずパターンを定義します。例えば、メールアドレスを見つけたい場合、メールアドレスがどのようなパターンを持っているかを考えます。一般的に、メールアドレスは「ユーザ名@ドメイン名」の形をしていますね。ここで、ユーザ名やドメイン名に使える文字や、その構造を正規表現で記述します。

以下に一般的なメールアドレスの形式を見つけるパターンを記載します。

[\w\-\._]+@[\w\-\._]+\.[A-Za-z]+
ねこ奈
ねこ奈

ちょっと何を言っているのか分からないのにゃ。

暗号にしか見えないんだけど。

モナ
モナ

具体的に説明しますね。

なお、「¥」は実際には「\(バックスラッシュ)」で表現されます。日本語モード(日本語をサポートするフォントを使用)の場合、半角バックスラッシュを入力することはできないため、代わりに「¥」に置き換えて解説します。

  • [\w\-\._]+ は、メールアドレスのユーザ名部分に対応し、英数字 (\w)、ハイフン (-)、ピリオド (.)、アンダースコア (_) のいずれか1文字以上が連続することを意味します。
  • @は、メールアドレスのユーザ名とドメイン名を区切るためのアットマーク (@) を直接表します。
  • [\w\-\._]+ は、ドメイン名に対応し、こちらも英数字、ハイフン、ピリオド、アンダースコアのいずれかが1文字以上連続することを意味します。ドメイン名の部分は、サブドメインも含むことができます(例:subdomain.example.com)。
  • \. は、ドメイン名の最後に来るピリオド (.) を表します。これはドメイン名とトップレベルドメイン(TLD)を区切ります。
  • [A-Za-z]+ は、トップレベルドメインに対応し、アルファベットの大文字または小文字が1文字以上連続することを意味します(例:.com、.net、.org)。
  • 総じて、この正規表現は「英数字、ハイフン、ピリオド、アンダースコアからなるユーザ名@同様の文字からなるドメイン名.アルファベットからなるトップレベルドメイン」というメールアドレスの形式に一致するものを見つけるために使用されます。

IntelliJ IDEAですと「【編集】→【検索】→【置換】」から正規表現を使用して検索することができます。

詳しい正規表現の書き方やルールについてはこちらのサイト様方が大変分かりやすかったので紹介します。

サルにもわかる正規表現入門
https://userweb.mnet.ne.jp/nakama

メガソフト株式会社|正規表現サンプル集https://www.megasoft.co.jp/mifes/seiki/meta.html

まとめ  今回で基礎文法編が終了

今回は「例外処理、正規表現」について復習しました。

ハック
ハック

この辺の知識は前回学習時からスッポリ抜け落ちていた感じがします。

正規表現については存在すら忘れていました(汗

今回の講義で基礎文法編が終了しますが、忘れている箇所や理解がイマイチだった項目を学び直すことができたため、復習して良かったと思っています。

以上で今回の学習記録を終えます。

ここまでご覧いただきありがとうございました。

コメント

タイトルとURLをコピーしました