スッキリわかるJava入門 第6章 複数のクラスを用いた開発②
- 第6章 複数のクラスを用いた開発②
第6章 複数のクラスを用いた開発②
Java API
javaコマンドに特殊なオプションを指定してHelloWorldプログラムを実行。
java -verbose:class HelloWorld
API利用の例(並べ替え)
- java.utilパッケージのArraysクラスにあるsortメソッドを呼び出している。
- java.util.ArraysはJavaが標準で提供するAPIの一部である。
- APIに含まれる3,500個を超えるクラスは、それぞれクラスファイル(Arrays.classなど)の形で、JDKをインストールした際にコンピュータにコピーされている。
public class Main { public static void main(String[] args) { int[] heights = {172, 149, 152, 191, 155}; java.util.Arrays.sort(heights); for (int h : heights) { System.out.println(h); } } }
APIで提供されるパッケージ
代表的なAPIパッケージ
APIリファレンス
- ①左上のフレーム:調べたいクラスが所属するパッケージ名をクリック
- ②左下のフレーム:調べたいクラス名をクリック
- ③右側のフレーム:表示されるクラスの説明を読む
クラスが読み込まれるしくみ
- JVMが必要なクラスファイルを読み込む処理をクラスローディング(class loading)と言う。
- JVMは起動直後にすべてのクラスを読み込むようなことはしない。使わないクラスまでロードしていたらムダにメモリを消費し、動作も遅くなる。
- 一部の例外を除いて「必要になった時に、必要なクラスだけ」読み込む。
- JVMの中でクラスファイルを読み込む仕事をしているのはクラスローダー(class loader)という部分。
- JVMがクラスローダーに対して「Calc」クラスを利用するから読み込んで利用可能にしなさい」と指示を出す。クラスローダーはコンピュータのハードディスクの中にあるCalc.classを読み込む。JVMは使いたいクラス名を指定しているだけであって、クラスファイルがハードディスクのどこのフォルダにあるのかを一切指定していない。
- クラスローダーはクラスパス(classpath)というヒント情報をを使うことで、極めて高速に目的のクラスファイルを探し出す。クラスパスとは「クラスローダーがクラスファイルを探す際に、見に行くべきフォルダの場所」のこと。
クラスパスの指定方法
方法1:起動時にjavaコマンドで指定する。
方法2:検索場所をOSに登録しておく
- OSの「環境変数」にクラスパスを登録する。
方法3:特に指定しない
- 上記1、2の指定が無い場合、デフォルトではjavaコマンドが実行されたフォルダがクラスパスとなる。
クラスパスで指定できる対象
対象1:フォルダの場所
- クラスファイルが置かれているフォルダの場所(絶対パス)を指定する。
- 「c:\work」を指定すると、フォルダ内のクラスファイルが検索対象となる。
対象2:クラスファイルが入ったJARファイルやZIPファイル
- クラスファイルが入っているJARファイルやZIPファイルの場所(絶対パス)を指定する。
クラスパスに自動的に加わるrt.jar
java と javac の引数
クラスローダーの動作原則
- あるパッケージx.y.zに属するクラスCを探す場合、クラスローダーは「クラスパスで指定されたフォルダ\x\y\z\C.class」というファイルを読み込もうとする。
- 現在のクラスパスを基準場所にしてパッケージ階層に対応したフォルダ階層を作り、その中に必要なクラスファイルを配置しておく必要がある。
- 例)「c:\work」をクラスパスとする場合
Calc.class(package calcapp.main) ⇒c:\work\calcapp\main フォルダへ
CalcLogic.class(package calcapp.logics) ⇒c:\work\calcapp\logics フォルダへ