JDK(Java Development Kit」)とは
Java言語でソフトウェア開発を行うのに必要なツールを一つにまとめたパッケージ。各OS用のものが用意されている。また、JREも含まれているので、JREを個別にセットアップしなくてOK。
ちなみにJavaの実行環境で、異なるプログラミング言語のコンパイラでコンパイルされた実行可能ファイルは処理できないい。
JRE(Java Runtime Environment)とは
JREは、Javaアプリケーションを実行するための環境を提供する。hava11からは単体配布はされていない。
IDE(Integrated Development Environment)とは
ソフトウェア開発に必要なツールをまとめて提供してくれるソフト。Eclipseなど。IDEをインストールしても、JDKが同時にインストールされるわけではない。また必ずしも先にJDKのインストールが必要ではない。
Javaプログラム実行の流れ
Javaプログラムは以下の流れで実行していく
①コンパイル
javacコマンドを利用して、ソースファイルをコンパイルする。コンパイルすることで、JVM(Java Virtual Machine)が解釈できるクラスファイルが生成される。
コンパイラはコンパイルをする際に、コードを実行する対象のプラットフォームを考慮しない。あくまでJVMが読みこめる形式に翻訳するだけ。そのため実行環境で動作できるかのテストは行わず、各プラットフォームで実行できる形式にコードを翻訳するのはJVMの役割。
コマンド
javac ソースファイル名.java
クラスファイルは中間ファイルであり、特定のOSに依存しない。
②実行
javaコマンドでプログラムを実行する。Javaは必要に応じて必要なクラスファイルを読み込む。
コマンド
java ソースファイル名
ソースコードの直接実行
javacを実行せずに、直接javaコマンドでプログラムを実行することをソースコードの直接実行という。この時、クラスファイルは生成されない。つまりメモリ上のみでコンパイルが行われる。
コマンド
java ソースファイル名.java
javacコマンドの応用
以下のソースを用意する。
package a;
import b.B;
public class A{
public static void main(String[] args){
B b = new B();
}
}
package b;
public class B{
}
以下のコマンドを実施する。
javac a/A.java
これでAクラスだけでなくBクラスのクラスファイルも生成される。これはAをコンパイルすることで、Aクラスが依存するBクラスも自動的にコンパイルされるから。
ガベージコレクタ
Javaコードを実行している間、JVMではガベージコレクタが任意のタイミングで稼働し、プログラムが使用しなくなったメモリ領域を解放する。このガベージコレクタはスレッドで稼働し、優先度は低いため基本的にメモリが圧迫されると稼働する。
スレッド
プログラム上で複数の処理を同時に動かす仕組み。複数のスレッドから同時に呼び出されても正常に動作するプログラムのことを 「スレッドセーフ」 であると表現する
イミュータブルとミュータブル
イミュータブルとは後から変えられないことを言う。Javaでもイミュータブル(不変)なオブジェクトを作成する場面はある。イミュータブルなオブジェクトの特長は以下。
- どのメソッドもオーバーライドできない
- どのメソッドもフィールドの値を変更できない
- 全てのフィールドをfinalかつprivateにする
- staticなメソッドを提供しない
- 参照型のフィールドで使用するgetterメソッドで参照を戻さず、新しいコピーを作って戻す。setterも同様
まとめ
- JDKとはJavaでソフトウェア開発を行うのに必要なツールを一つにまとめたパッケージ
- JREとはJavaアプリケーションを実行するための環境を提供するソフトウェア
- IDEとはソフトウェア開発に必要なツールをまとめて提供してくれるソフト
- Javaプログラムはコンパイルを行ってクラスファイルを生成してから実行する
- コンパイルはjavacコマンド、実行はjavaコマンドを使う
- Javaではガベージコレクタが任意のタイミングで稼働し、プログラムが使用しなくなったメモリを解放する
- イミュータブルなオブジェクトは後から帰ることができない