
魁!dcWORKS塾 〜エンジニア編 vol.9〜
こんにちは! dcWORKSでエンジニアをしているミネです。
弊社のエンジニアチームやデザインチームの実態をより詳しく知ってもらうべく始まった「魁!dcWORKS塾」エンジニア編 第9回をお届けしていきます!
魁!dcWORKS塾とは?
技術研修や勉強会など、それぞれで実際に取り組んでいるような内容を問題・課題の形式でご紹介します。
エンジニアの問題では解答や解決するためのポイントを、またデザインチームでは制作過程など、各チームの取り組みを具体的に紹介していきますのでお楽しみに!
BLOGを見てくださっているみなさんも一緒に楽しみながら取り組んでいただけると嬉しいです。
エンジニア編 第9回ということで、弊社が運営しているプログラミングスクールのEngineersGateでも講師を務めるサトウ先生からの出題です。
- エンジニア編 第1回 (配列の作成についての問題)はこちら
- エンジニア編 第2回 (関数の作成についての問題)はこちら
- エンジニア編 第3回 (インスタンスメソッド作成についての問題)はこちら
- エンジニア編 第4回 (インターフェースについての問題)はこちら
- エンジニア編 第5回 (継承についての問題)はこちら
- エンジニア編 第6回 (オブジェクト指向についての問題)はこちら
- エンジニア編 第7回 (連想配列についての問題)はこちら
- エンジニア編 第8回 (コールバックについての問題)はこちら
エンジニアズゲート講師。みんなから愛されるキャラクターとボディーの持ち主。
今回は例外処理に関する問題を出題します。
Javaの例外処理は、プログラムの実行中に発生するエラーや異常な状況に対処するための仕組みです。
例外処理がなぜ必要なのか
1. エラーの検出と通知
プログラムが実行されている際にエラーが発生する可能性があります。
例外処理は、これらのエラーを検出し、適切な方法で通知するための仕組みを提供します。
例外が発生すると、その時点でプログラムの制御が例外処理のコードに移り、適切な対応ができます。
2. プログラムの安定性向上
例外処理を適切に行うことで、プログラムが異常終了するのを防ぎ、安定性を向上させることができます。
例外処理がない場合、予期せぬエラーが発生した際にプログラムがクラッシュする可能性があります。
3. エラーの追跡とデバッグ
例外処理はエラーが発生した場合にスタックトレースや詳細な情報を提供します。
これにより開発者はエラーの原因を特定しやすくなり、デバッグが容易になります。
4. リカバリーと処理の継続性
例外処理はエラーが発生した際に適切に対処し、プログラムの実行を継続させる手段を提供します。
エラーに対処して適切なアクションを取ることでプログラムが回復し、ユーザーエクスペリエンスを向上させることができます。
5. 外部リソースの確実な解放
プログラムが外部リソース(ファイル、ネットワーク接続、データベース接続など)を使用している場合、例外処理はこれらのリソースを確実に解放する手段を提供します。
これはメモリリークやリソースリークを防ぐのに役立ちます。
総じて、例外処理はプログラムを安定かつ信頼性のあるものにするために必要不可欠です。
エラーが発生することは避けられないため、それに適切に対処することがプログラムの品質向上につながるというわけです。
問題
下記のコードにはいくつかの潜在的な例外が含まれています。
問題点を指摘し、発生する例外に対して適切なエラーメッセージを表示してください。
package lesson_07.works_01;
public class Main {
public static void main(String[] args) {
String name = args[0];
int age = Integer.parseInt(args[1]);
System.out.println("私の名前は、" + name + "です。");
System.out.println("歳は、" + age + "歳です。");
}
}
みなさん、解けましたか?
解答例は下記です!
解答例
- ArrayIndexOutOfBoundsException
args 配列から要素を取得する前に、args 配列の存在を確認する必要があります。
もし、コマンドライン引数が提供されていない場合、ArrayIndexOutOfBoundsException が発生します。 - NumberFormatException
args[1] の値を int に変換していますが、これが整数の形式ではない場合に NumberFormatException が発生します。
◎例1
package lesson_07.works_01;
public class Main {
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("名前と年齢をコマンドライン引数として入力してください。");
return;
}
String name = args[0];
try {
int age = Integer.parseInt(args[1]);
System.out.println("私の名前は、" + name + "です。");
System.out.println("歳は、" + age + "歳です。");
} catch (NumberFormatException e) {
System.out.println("年齢の入力が不正です。整数で入力してください。");
}
}
}
・args.length < 2 でコマンドライン引数が不足している場合にエラーメッセージを表示し、プログラムを終了します。
・Integer.parseInt(args[1]) の部分を try-catch ブロックで囲み、NumberFormatException が発生した場合にエラーメッセージを表示します。
◎例2
package lesson_07.works_01;
public class Main {
public static void main(String[] args) {
try {
String name = args[0];
int age = Integer.parseInt(args[1]);
System.out.println("私の名前は、" + name + "です。");
System.out.println("歳は、" + age + "歳です。");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("名前と年齢をコマンドライン引数として入力してください。");
} catch (NumberFormatException e) {
System.out.println("年齢の入力が不正です。整数で入力してください。");
}
}
}
・try-catch ブロックに、発生しうる例外 ArrayIndexOutOfBoundsException、 NumberFormatException を追加し、例外ごとにエラーメッセージの出し分けをします。
まとめ
今回は例外処理について出題しました。
例外処理への理解を深め、自身のプログラミングで活用し学習を進めてください!
メンバー募集のお知らせ
dcWORKSでは一緒に働く仲間を常時募集しています。私たちと一緒に人々の心を動かすものを創りませんか?
興味がある方は以下からお気軽にご応募ください。