Chapter 19

疑問点 (後にAppendix)

KeitoYuasa
KeitoYuasa
2023.02.04に更新
  • Java (JDK, JRE, JVMの違い)
  • コンパイルエラーと実行エラーの違い
  • 修飾子(メソッドのところで触れている)

Java (JDK, JRE, JVMの違い)

要点

  • JDKをインストールすれば、JRE, JVMも使える
  • つまり、JDKをインストールする事でJavaで実行、またはアプリ開発ができる
  • JavaはOS上ではなく、JVM上で実行される

JDK(Java Development Kit)

Javaでプログラムを開発するために必要なソフトウェアの事

  • JRE、コンパイラやデバッガーなどを含む

JRE(Java Runtime Environment)

Javaを実行させるために必要なソフトウェアの事

  • JVM、APIなどを含む

JVM(Java Virtual Machine)

Javaのソースコードを機械語(=ネイティブコード)に変換するソフトウェアの事

OSに依存しない

JavaはOSに依存しないことから特性として、「一度書けばどこでも実行できる」ことが有名。
Javaは、JVM上で実行される。

コンパイルファイルはOS共通。実行環境JVMが各OS特有のもの。
つまり、JVMがOSの依存関係を吸収してくれる。

また、JVMはJDKに含まれている。JDKをインストールする際にOSを選択する画面がある。
(これは、各OSに対応したJVMを含んだJDKをインストールするということ)

コンパイルエラーと実行エラーの違い

javaにはエラーと一言で言っても2種類のエラーがある。

エラーの違い 説明
コンパイルエラー 文法エラーの事。文法を修正すればいいので最終的に発生しなくなる。
実行エラー 文法は正しいが処理としておかしい場合に起きるエラーのこと。このエラーの場合、エラー発生の可能性を潰し切ることがほぼ不可能なのでtry, catch文(例外処理)が用意されている。

コンパイルエラー

javaは、コンパイル言語なので、実行前にコンパイル(ソースコードを機械語に変換)する必要がある。
これを行うのがjavaのコンパイラで、コンパイルと同時にソースコードの文法チェックまで行ってくれる。
そのため、文法が間違っていた時に出力されるのがコンパイルエラー。

しかし、コンパイラは文法をチェックするだけでどんな値を定義しているのかまではわからない。

実行エラー

以下では、数値を0で割っている。これは、暗黙の領域でもちろんエラーになる。しかし、文法的には間違っていない。(ただ割り算しているだけなので)この場合、実行エラーになる。
System.out.println(10 / 0);

その他、以下のように配列のインデックスを超えたものを指定した場合だ。
文法的には、間違っていない。しかし、コンパイラは配列の要素数やインデックス間ではわからない。これは実行して初めてわかることなので、実行エラーになる。

int[] arr = {1, 2};
System.out.println(arr[2]);