実行を理解する
実行は、生成したクラスを読み込んでmainから実際の処理を進める段階です。起動時の検索経路と引数、順次処理、実行時例外、標準出力を分けて追跡します。
この単元で学ぶこと
- javaコマンドのクラス指定と引数を判断する
- main本体の実行順と表示内容を追う
- 実行時に失敗する入力や参照を判断する
本文解説
起動するクラスを指定 packageなしのMain.classが現在地にある場合、java -cp . Mainで起動できます。.は現在のディレクトリをクラス検索の対象にする指定です。Main.classというファイル名そのものではなく、Mainというクラス名を渡します。
パッケージ付きの検索 app.Mainをout/app/Main.classへ生成したなら、java -cp out app.Mainとします。クラスパスはパッケージ階層の根outで、起動名はapp.Mainです。out/appをクラスパスにしてMainと呼ぶと、内部のクラス名との対応が合いません。
コマンド引数の位置 java -cp out app.Main redでは-cp outがランチャー用の指定、app.Mainがクラス名、redがアプリケーションの引数です。argsにはredだけが入ります。クラス名の前後で文字列がどの役割に使われるかを確認します。
文の順序 int n=2;n*=3;n-=1;System.out.print(n);は5です。各代入を順に行い、最後の値を表示します。宣言だけから結果を決めず、実行した文によって状態がどう変わったかを追跡します。
出力の形式 System.out.print("A");System.out.print("B");は続けてABを表示します。printlnなら行区切りが追加されます。表示された改行コードの具体的な表現は環境によるため、複数行問題では行の内容と順序をまず区別します。ここでの文字列の比較問題はprintの内容を示します。
実行時の入力や値 配列の添字、除数が0か、参照がnullか等は、実行時の値から失敗することがあります。コンパイルが通ることと、あらゆる入力で正常終了することは同じではありません。例外が起きる演算より後のprintへ進むと決め付けないようにします。
標準出力とエラー System.outへ表示する通常の結果と、未処理例外の診断は別の出力経路です。例外問題では成功時の値が出るのではなく、その演算で処理が中断します。すでに表示した文字がある場合は消去されるわけではないため、どの文まで実行したかを見ます。
再起動の状態 この教材の単独のjava Main起動を終え、別のプロセスとして起動し直すと、staticフィールドもその実行環境で再び初期化されます。前のプロセスの変数が自動継続するわけではありません。ファイルなど外部へ保存したデータが残ることとは区別します。
図解
重要ポイント
- -cpはクラス検索の根を指定する。
- package付きの起動には完全修飾名を使う。
- mainの各文は制御構造に従って順に処理する。
- 実行時例外が起きると、処理しない限りその先へ通常通り進まない。
間違えやすい点
- ソースを保存しただけで古いclassを実行しない。
- エラー表示をプログラムの通常の標準出力と混同しない。
- クラス検索の失敗をソース構文の失敗と混同しない。
用語解説
- クラスパス
- クラスを検索するディレクトリ等の経路。
- 完全修飾名
- パッケージ名まで含めて特定する型の名前。
- 実行時例外
- RuntimeExceptionを継承する例外。添字範囲外やnull参照などで発生する。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
- https://www.oracle.com/jp/education/certification/certification-exam-list/java-se-bronze-1z0-818-exam/
- https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-1.html
- https://docs.oracle.com/javase/specs/jls/se11/html/jls-12.html
- https://docs.oracle.com/javaee/6/firstcup/doc/gkhoy.html
- https://www.oracle.com/java/technologies/java-ee-glance.html
- https://www.oracle.com/java/technologies/javameoverview.html
- https://docs.oracle.com/en/java/javase/11/tools/javac.html
- https://docs.oracle.com/en/java/javase/11/tools/java.html
確認問題の出題・採点や学習履歴の保存にはログインが必要です。