java.langパッケージは、Javaプログラム言語の基本的なクラスを提供する。java.langパッケージに限り、コンパイラによって暗黙的にimportされるため、明示的にimportする必要はない。
java.lang.ClassLoaderクラスは、クラスのロードを担当する抽象(abstract)クラスである。
ClassLoaderのコンストラクタで新しいクラスローダーを作成できる。
protected ClassLoader()
指定したクラスローダーを使って、新しいクラスローダーを作成することもできる。
protected ClassLoader(ClassLoader parent)
URL url = null;
ClassLoader cl = this.getClass().getClassLoader();
if (null != cl) {
url = cl.getResorce("sample.properties");
} else {
url = ClassLoader.getSystemResource("sample.properties");
}
すべてのJavaアプリケーションはRuntimeクラスのインスタンスをひとつ持っています。
現在のJavaアプリケーションに関連付けられたランタイム・オブジェクトを取得するには、Runtime.getRuntime()メソッドを使用します。
Javaアプリケーションが終了する際に必ず行いたい処理があれば、シャットダウン・フックを登録します。シャットダウン・フックとは、Java仮想マシンがシャットダウンする際、その通知を受けてスレッドを実行させることです。
Java仮想マシンは、次の2種類のイベントによってシャットダウンします。
仮想マシンシャットダウン・フックを登録するには、Runtime.addShutdownHook()メソッドを使用します。
シャットダウン・フックを登録するJavaソース・コードの例を次に示します。
Runtime runtime = Runtime.getRuntime();
runtime.addShutdownHook(new Thread("Shutdown thread") {
public void run() {
...
}
}
現在のクラス名、メソッド名、ファイル名および行番号を取得する。
メソッド | 説明 |
---|---|
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.StringBufferクラスは、可変の文字列を扱う文字列バッファクラスである。String と似ているが、文字列を変更できる点が異なる。
コンストラクタ | 説明 |
---|---|
StringBuffer() | 中身が空の文字列バッファを構築する。 |
StringBuffer(String str) | 引数strで指定した文字列を初期値として持つ文字列バッファを構築する。 |
メソッド | 説明 |
---|---|
StringBuffer append(String str) | 引数strで指定した文字列を、現在の文字列バッファの末尾に追加する。 |
StringBuffer append(StringBuffer sb) | 引数sbで指定した文字列を、現在の文字列バッファの末尾に追加する。 |
StringBuffer sb = new StringBuffer();
sb.append("first string");
sb.append("next string");
java.lang.Systemには次に示すフィールドがある。
フィールド | 説明 |
---|---|
PrintStream err |
標準エラー出力ストリーム |
InputStream in |
標準入力ストリーム |
PrintStream out |
標準出力ストリーム |
java.lang.Systemには次に示すメソッドがある。
メソッド | 説明 |
---|---|
static long currentTimeMills() |
ミリ秒で表される現在の時間を返す。 |
String getProperty(String key) |
指定したキーのシステムプロパティを返す。 |
経過時間を取得する例を次に示す。
long t1 = System.currentTimeMills();
// 時間のかかる処理
long t2 = System.currentTimeMills();
System.out.println("Processing time = " + (t2 - t1));
メソッド | 説明 |
---|---|
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()
スタックダンプを表すスタックトレース要素の配列を返す。
メソッド | 説明 |
---|---|
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) });
}
}
}
}