java.langパッケージは、Javaプログラム言語の基本的なクラスを提供する。java.langパッケージに限り、コンパイラによって暗黙的にimportされるため、明示的にimportする必要はない。
java.lang.ClassLoaderクラスは、クラスのロードを担当する抽象(abstract)クラスである。
ClassLoaderのコンストラクタで新しいクラスローダーを作成できる。
protected ClassLoader()
指定したクラスローダーを使って、新しいクラスローダーを作成することもできる。
protected ClassLoader(ClassLoader parent)
java.lang.Object
└─ java.lang.ClassLoader
URL url = null;
ClassLoader cl = this.getClass().getClassLoader();
if (null != cl) {
url = cl.getResorce("sample.properties");
} else {
url = ClassLoader.getSystemResource("sample.properties");
}
Java.lang.Runtime は、Java アプリケーションとアプリケーション実行環境のインタフェースになるクラスである。アプリケーション実行環境とは、Java 仮想マシンと OS のことである。
アプリケーションは Runtime クラスの単一のインスタンスを持ち、そのインスタンスは Runtime.getRuntime メソッドで取得できる。アプリケーションは別のインスタンスを生成することはできない。
Javaアプリケーションが終了する際に必ず行いたい処理があれば、シャットダウン・フックを登録します。シャットダウン・フックとは、Java仮想マシンがシャットダウンする際、その通知を受けてスレッドを実行させることです。
Java仮想マシンは、次の2種類のイベントによってシャットダウンします。
仮想マシンシャットダウン・フックを登録するには、Runtime.addShutdownHook()メソッドを使用します。
java.lang.Object
└─ java.lang.Runtime
シャットダウン・フックを登録するJavaソース・コードの例を次に示します。
Runtime runtime = Runtime.getRuntime();
runtime.addShutdownHook(new Thread("Shutdown thread") {
public void run() {
...
}
}
現在のクラス名、メソッド名、ファイル名および行番号を取得する。
java.lang.Object
└─ java.lang.StackTraceElement
メソッド | 説明 |
---|---|
getClassName | クラスの完全修飾名を返す。 |
getFileName | ソースファイルの名前を返す。 |
getLineNumber | ソースファイルの行番号を返す。 |
getMethodName | メソッドの名前を返す。 |
StackTraceElement[] ste = Thread.currentThread().getStackTrace();
String className = ste[1].getClassName();
String methodName = ste[1].getMethodName();
String fileName = ste[1].getFileName();
int lineNumber = ste[1].getLineNumber();
String getClassName()
String getMethodName()
String getFileName()
int getLineNumber()
java.lang.System はシステムの機能を提供するクラスである。
public final class System extends Object
java.lang.Object
└─ java.lang.System
java.lang.System クラスはコンストラクタを提供しておらず、インスタンス化できない。そのため、System クラスの全てのフィールド及びメソッドは static であり、インスタンス化せずに使用できる。
標準エラー出力ストリーム
static PrintStream err
標準入力ストリーム
static InputStream in
標準出力ストリーム
static PrintStream out
配列をコピーする。
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
ミリ秒で表される現在の時間を返す。
static long currentTimeMills()
経過時間を取得する例を次に示す。
long t1 = System.currentTimeMills();
// 時間のかかる処理
long t2 = System.currentTimeMills();
System.out.println("Processing time = " + (t2 - t1));
java.lang.Systemには次に示すがある。
指定したキーのシステムプロパティを返す。
String getProperty(String key)
java.lang.Object
└─ java.lang.Thread
メソッド | 説明 |
---|---|
run() |
このスレッドが別個のRunnable実行オブジェクトを使用して作成された場合、そのRunnableオブジェクトのrun メソッドが呼び出される。
|
start() |
このスレッドの実行を開始する。 |
sleep(long millis) |
指定したミリ秒数の間、現在実行中のスレッドをスリープさせる。 |
join() |
このスレッドが終了するのを待機する。 |
join(long millis) |
このスレッドが終了するのを、最高で
millis
ミリ秒待機する
|
getStackTrace |
スタックダンプを表すスタックトレース要素の配列を返す。 |
スレッドを作成するには、Threadクラスを継承したクラスを作成します。
class MyThread extends Thread {
public void run() {
// 実行する処理
}
}
このスレッドで実際に行う処理は、run()
メソッドをオーバーライドして記述します。
スレッドの実行を開始するには、実行するスレッドのインスタンスを作成して、Thread.start()メソッドを呼び出します。
void start()
スレッドの実行を開始するJavaソース・コードの例を次に示します。
MyThread thread = new MyThread();
thread.start();
現在実行しているスレッドをスリープさせるには、Thread.sleep()メソッドを使用します。
static void sleep(long millis) throws InterruptedException
引数millisには、スレッドをスリープさせる時間をミリ秒単位で指定します。
現在のスレッドをスリープさせるJavaソース・コードの例を次に示します。
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
スレッドの終了を待つには、Thread.join()メソッドを使用します。
void join() throws InterruptedException
void join(long millis) throws InterruptedException
引数millisには、スレッドの終了を待つ時間をミリ秒単位で指定します。
スレッドの終了を永遠に待つJavaソース・コードの例を次に示します。
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
void run()
void start()
static void sleep(long millis)
void join()
void join(long millis)
StackElement getStackTrace()
スタックダンプを表すスタックトレース要素の配列を返す。
java.lang.Object
└─ java.lang.reflect.AccessibleObject
└─ java.lang.reflect.Executable
└─ java.lang.reflect.Method
メソッド | 説明 |
---|---|
String getName() |
このメソッドの名前を返す。 |
Object invoke(Object obj, Object ... args) |
指定したパラメータを渡して、このメソッドを呼び出す。 |
Methodクラスは、メソッドの情報を取得したり、メソッドを操作するクラスである。
クラス(オブジェクト)のメソッド名を取得する例を次に示す。
import java.lang.reflect.Method;
class Sample {
public static void main(String[] args) {
Sample sample = new Sample();
Method[] methods = sample.getClass().getMethods();
for (int i = 0; i < methods.length; i++) {
System.out.println(methods[i].getName());
}
}
}
import java.lang.reflect.Method;
class Sample {
public static void main(String[] args) {
Sample sample = new Sample();
Method[] methods = sample.getClass().getMethods();
for (int i = 0; i < methods.length; i++) {
if ("set".equals(SringUtils.mid(methods[i].getName(), 0, 3))) {
methods[i].invoke(this, new Object { new Boolean(true) });
}
}
}
}