目次 | |

20. パッケージjava.lang


パッケージ java.langには,Java言語の設計にとって基本的なクラスが収められている。最も重要なクラスは Object 及び Class とする。 Object は,クラス階層のルートであり,Class は,そのインスタンスによって実行時のクラスを表現する。

プリミティブ型の値は,あたかもオブジェクトであるかのように表現する必要がある場合が多い。ラッパークラスであるBooleanCharacterIntegerLongFloat,及び Double はこの目的のために使用する。例えば,型 Double のオブジェクトは,型 double のフィールドをもち,その値への参照が、参照型の変数に格納できる方法によって、その値を表現している。これらのクラスは又,プリミティブ値の間で相互に変換するためのいくつかのメソッドを提供している。同様にequals,hashCode などの標準メソッドを使用可能とする。

クラス Math では,サイン,コサイン,平方根など広く使用されている数値演算を提供している。同様にクラス String 及び クラス StringBuffer では,広く使用されている文字列演算を提供している。

ClassLoaderProcessRuntimeSecurityManager,及びクラス System では,クラスの動的ロード,外部プロセスの作成,時刻などのホスト環境の照会,及びセキュリティ規則を管理する“システム処理”を提供している。

クラス Throwable は,throw(14.16)によって投げられるオブジェクトを含んでいる。Throwable のサブクラスには,エラーと例外がある。

次にパッケージ java.lang で定義されるクラスの階層構造を示す。

Object                                                  20.1    
    interface Cloneable                                 20.2
    Class                                               20.3
    Boolean                                             20.4
    Character                                           20.5     
    Number                                              20.6
        Integer                                         20.7     
        Long                                            20.8
        Float                                           20.9
        Double                                          20.10
    Math                                                20.11
    String                                              20.12
    StringBuffer                                        20.13
    ClassLoader                                         20.14
    Process                                             20.15
    Runtime                                             20.16
    SecurityManager                                     20.17
    System                                              20.18
    interface Runnable                                  20.19
    Thread                                              20.20
    ThreadGroup                                         20.21
    Throwable                                           20.22
        Error
            LinkageError
                ClassCircularityError
                ClassFormatError
                ExceptionInInitializerError
                IncompatibleClassChangeError
                    AbstractMethodError
                    IllegalAccessError
                    InstantiationError
                    NoSuchFieldError
                    NoSuchMethodError
                NoClassDefFoundError
                UnsatisfiedLinkError
                VerifyError
            VirtualMachineError
                InternalError
                OutOfMemoryError
                StackOverflowError
                UnknownError
            ThreadDeath
        Exception
            ClassNotFoundException
            CloneNotSupportedException
            IllegalAccessException
            InstantiationException
            InterruptedException
                RuntimeException
                    ArithmeticException
                    ArrayStoreException
                    ClassCastException
                    IllegalArgumentException
                        IllegalThreadStateException
                        NumberFormatException
                    IllegalMonitorStateException
                    IndexOutOfBoundsException
                    NegativeArraySizeException
                    NullPointerException
                    SecurityException

20.1 クラス java.lang.Object

クラス Object は,クラス階層の唯一のルートとする。配列を含むすべてのオブジェクトは クラス Object のメソッドを実装する。

public class Object {
    public final Class getClass();
    public String toString();
    public boolean equals(Object obj);
    public int hashCode();
    protected Object clone()
        throws CloneNotSupportedException;
    public final void wait()
throws IllegalMonitorStateException,
InterruptedException; public final void wait(long millis)
throws IllegalMonitorStateException,
InterruptedException; public final void wait(long millis, int nanos)
throws IllegalMonitorStateException, InterruptedException; public final void notify() throws IllegalMonitorStateException; public final void notifyAll() throws IllegalMonitorStateException; protected void finalize()
throws Throwable; }

20.1.1 public final Class getClass()

このメソッドは,このオブジェクトのクラスを表現する型 Class の一意のオブジェクト (20.3)への参照を返す。このオブジェクト Class は,表現されたクラスの static メソッド synchronized によってロックされたオブジェクトである。

20.1.2 public String toString()

toString は,このオブジェクトをテキストで表す文字列を返す。これは,その文字列を読む人にとって簡潔で有用な情報を与える。

メソッド toString は クラス Object で定義され,そのオブジェクトインスタンスのクラス名,アットマーク @,オブジェクトのハッシュコード値の符号なし 16進数表現から構成される文字列を返す。つまり,このメソッドは,次の式の値に等しい文字列を返す。

getClass().getName() +
 '@' + Integer.toHexString(hashCode())
このメソッドは,次のクラスで上書きされる。Class (20.3)Boolean (20.4)Character (20.5)Integer (20.7)Long (20.8)Float (20.9)Double (20.10)String (20.12)StringBuffer (20.13)Thread (20.20)ThreadGroup (20.21)Throwable (20.22.4),及びBitSet (21.2)

20.1.3 public boolean equals(Object obj)

このメソッドは,あるオブジェクトがこのオブジェクトと,“等しい”かを判定する。

equals に実装されている等価関係の一般規則を以下に挙げる。

クラス Object で定義される メソッド equals は,オブジェクトの等価関係を最も厳密に区別する。つまり,任意の参照値 x 及び y について,x 及び yが同一のオブジェクトを参照している場合かつその場合にだけ,((Object)x).equals(y)true を返す。

このメソッドは,次のクラスで上書きされる。Boolean (20.4)Character (20.5)Integer (20.7)Long (20.8)Float (20.9)Double (20.10)String (20.12),及び BitSet (21.2)

20.1.4 public int hashCode()

このメソッドは,Javaライブラリクラス java.util.Hashtable (21.5)で提供されているハッシュテーブルを利用するために使用する。

hashCode の一般規則を以下に挙げる。

クラス Object で定義された メソッド hashCodeは,実用的な範囲で,異なるオブジェクトに対しては異なる整数を返す。

このメソッドは,次のクラスで上書きされる。Boolean (20.4)Character (20.5)Integer (20.7)Long (20.8)Float (20.9)Double (20.10)String (20.12),及び BitSet (21.2)

20.1.5 protected Object clone()
throws CloneNotSupportedException

cloneは,このオブジェクトの複写を作成し,それを返す。“複写”の正確な意味は,オブジェクトのクラスによって異なる。通常,任意のオブジェクト x に対して,次の式は true になる。

x.clone() != x
次の式も true になる。

x.clone.getClass() == x.getClass()
ただし,これも絶対条件ではない。また,次の式も true になる。

x.clone.equals(x)
オブジェクトを複写すると,通常はオブジェクトのクラスのインスタンスが新しく作成されるが,内部データ構造を複写することが必要な場合もある。

クラス Object の メソッド clone は,特定の処理を行ってクローンを作成する。最初に,このオブジェクトのクラスが,インタフェースCloneableを実装していなければ,CloneNotSupportedExceptionが投げられる。すべての配列は インタフェースCloneNotSupportedExceptionを実装していると見なされる。その他の場合,このメソッドは,このオブジェクトのクラスの新しいインスタンスを作成し,すべてのフィールドを初期化し,このオブジェクトの対応するフィールドと同一の内容に,代入文と同じ方法で書き替える。つまり,フィールドの内容そのものがクローンされるのではない。したがって,このメソッドでは“深い複写”ではなく“浅い複写”を行なう。

クラス Object 自体は インタフェースCloneableを実装していない。したがってクラス Objectのオブジェクトに対して メソッド cloneを呼び出すと,実行時に例外が投げられる。メソッド clone は,クラス Object で実装されている。クラス Object の メソッド clone は,インタフェースCloneableを実装するサブクラス用の汎用ユーティリティとして実装されている。メソッド cloneは,上書きされることがある。この場合,次の呼び出しを行えば,上書きした定義から上書きされたクラス Object の メソッド clone を参照できる。

super.clone()

20.1.6 public final void wait()
throws IllegalMonitorStateException, InterruptedException

このメソッドは,別のスレッドがこのオブジェクトに対して メソッド notify (20.1.9)又は,メソッド notifyAll (20.1.10)を呼び出すまで,現在のスレッドを待機させる。

言い換えれば,このメソッドの動作は,単に wait(0) (20.1.7)の呼び出しを行うのと同じとする。

20.1.7 public final void wait(long millis)
throws IllegalMonitorStateException, InterruptedException

このメソッドは,別のスレッドがこのオブジェクトに対してメソッド notify (20.1.9) 又は,メソッド notifyAll (20.1.10)を呼び出すか,指定された実時間が経過するまで,現在のスレッドを待機させる。このメソッドは,現在のスレッドがこのオブジェクトに対して既に同期化されている場合にだけ,呼び出すことができる。現在のスレッドがこのオブジェクトのロックを所有していない場合,IllegalMonitorStateExceptionが投げられる。

このメソッドは,現在のスレッド (これを T とする)をこのオブジェクトの待機集合 (17.14)に入れ,このオブジェクトに対するすべての同期化の要求を放棄させる。スレッドTは,スレッドのスケジューリング上は無効になり,次の四つのいずれかが行われるまでスリープ状態になる。

待機の後,スレッド Tは,このオブジェクトの待機集合から削除され,スレッドスケジューリングが開始される。その後に,通常通り,他のスレッドとオブジェクトに対する同期化の権利を競合する。このオブジェクトの制御権を取得すると,そのオブジェクトに対するすべての同期化の要求が以前の状態,つまりメソッド wait が呼び出されたときの状態に復元する。この後,スレッド T はメソッド waitの呼び出しから戻る。したがって,メソッド waitから戻った際,オブジェクトとスレッド T の同期化の状態は,メソッド wait が呼び出されたときと同じになる。

現在のスレッドが待機中に,他のスレッドによって割り込まれた場合(20.20.31)InterruptedException が投げられる。この例外は,前述したように,このオブジェクトのロック状態が復元されるまで投げられない。

メソッド waitは,現在のスレッドをこのオブジェクトの待機集合に入れる時に,このオブジェクトのロックだけを解除する。現在のスレッドが同期化の対象にしている他のオブジェクトは,スレッドが待機している間,ロックされたままとする。

20.1.8 public final void wait(long millis, int nanos)
throws IllegalMonitorStateException, InterruptedException

このメソッドは,別のスレッドがこのオブジェクトに対して メソッド notify (20.1.9)又は,メソッド notifyAll (20.1.10)を呼び出すか,別のスレッドが現在のスレッドに割り込むか,指定された実時間が経過するまで,現在のスレッドを待機させる。

この時間はナノ秒単位で,次の式で求められる。

1000000*millis+nanos
ナノ秒単位で表す点を除き,このメソッドの動作は,パラメータを 一つ取るメソッド wait (20.1.7)同じとする。特に,wait(0, 0)wait(0) と同じとする。

20.1.9 public final void notify()
throws IllegalMonitorStateException

このオブジェクトに対して待機中 (20.1.7)のスレッドがある場合,そのうちの一つが選択されて再開される。この選択は任意であり、処理系の実装によって決定される。 メソッド notifyは,現在のスレッドがこのオブジェクトに対して既に同期化されている場合しか,呼び出すことができない。現在のスレッドがこのオブジェクトのロックを所有していない場合,IllegalMonitorStateExceptionが投げられる。

再開されたスレッドは,現在のスレッドがこのオブジェクトに対してかけたロックを放棄するまで,処理を進めることができない。再開されたスレッドは,通常通り,このオブジェクトに対する同期化をめぐって他のスレッドと競合することになる。例えば,再開したスレッドであっても,次にこのオブジェクトにロックをかける際に,有利も不利も受けない。

20.1.10 public final void notifyAll()
throws IllegalMonitorStateException

このオブジェクトに対して待機中(20.1.7)のすべてのスレッドを再開する。

メソッド notifyAllは,現在のスレッドがこのオブジェクトに対して既に同期化されている場合にだけ,呼び出すことができる。現在のスレッドがこのオブジェクトのロックを所有していない場合,IllegalMonitorStateExceptionが投げられる。

再開されたスレッドは,現在のスレッドがこのオブジェクトに対してかけたロックを放棄するまで,処理を進めることができない。再開されたスレッドは,通常通り,このオブジェクトに対する同期化をめぐって他のスレッドと競合することになる。例えば,再開したスレッドであっても,次にこのオブジェクトにロックをかける際に,有利も不利も受けない。

20.1.11 protected void finalize() throws Throwable

メソッド finalize (12.7) は,Java 仮想計算機が,まだ消滅していないスレッドがこのオブジェクトにアクセスできる方法がまったくないと判断した場合に呼び出される。ただし,終了できる状態にある他のオブジェクトやクラスを終了した結果,このオブジェクトにアクセスできる方法がなくなる場合は除く。メソッド finalize は,このオブジェクトを再び他のスレッドが利用できるようにするなど,あらゆる動作を実行できる。しかし,finalizeの通常の動作は,オブジェクトが完全に破棄される前にその後始末を行うことである。たとえば,入出力接続を表すオブジェクトに対して呼び出される メソッド finalizeは,オブジェクトが永久に破棄される前に,明示的に入出力トランザクションを実行して接続を切断する。

クラス Object の メソッド finalizeは,特別な動作は何も行わない。単に,正常終了する。Objectのサブクラスは,この定義を上書きすることができる。

Javaでは,あるオブジェクトに対してどのスレッドが メソッドfinalizeを呼び出すのか保証していない。ただし,finalizeが呼び出された際,それを呼び出したスレッドがユーザに見える同期化ロックを保持しないことは保証されている。捕捉されない例外がメソッド finalize によって投げられると,その例外は無視され,そのオブジェクトのファイナライズは終了する。

あるオブジェクトに対して メソッド finalizeが呼び出された後,Java仮想計算機がまだ消滅していないスレッドがこのオブジェクトにアクセスできる方法がないと再度判断するまでは,何も実行されない。終了できる状態にあり,オブジェクトを破棄できる状態にある他のオブジェクトやクラスが行う可能性のある動作も実行されない。

Java仮想計算機は,あるオブジェクトに対して メソッド finalize を 2回以上呼び出すことはできない。

20.2 インタフェースjava.lang.Cloneable

インタフェースCloneableは メソッド clone (20.1.5)を使用又は上書きするクラスによって実装される。

public interface Cloneable { 

}
インタフェースCloneableは,メソッドを宣言しない。

20.3 クラス java.lang.Class

クラス Classのインスタンスは,実行中のJavaプログラムが操作できる方法でクラスとインタフェースを表現する。すべての配列は,要素型と次元が同じ他のすべての配列によって共有されるClassオブジェクト で表現されるクラスに属する。

クラス Classには,public宣言されたコンストラクタはない。Java仮想計算機は,クラスがロードされると自動的にClassオブジェクトを生成する。このようなオブジェクトはユーザプログラムでは生成できない。

public final class Class {
    public String toString();
    public String getName();
    public boolean isInterface();
    public Class getSuperclass();
    public Class[] getInterfaces();
    public Object newInstance()
        throws InstantiationException, IllegalAccessException;
    public ClassLoader getClassLoader();
    public static Class forName(String className)
throws ClassNotFoundException; }

20.3.1 public String toString()

Classオブジェクト が表現するのは,宣言クラス又は配列クラス,class という内容の文字列,スペース,及びメソッド getName (20.3.2)の返すクラス名とする。このClassオブジェクトがインタフェースを表現する場合,interfaceという内容の文字列,スペース,及びメソッドgetName が返すインタフェースの名前とする。

つまり,このメソッドは次の式の値に等しい文字列を返す。

(isInterface() ? "interface " : "class ") + getName()
このメソッドは,Objectの メソッド toString (20.1.2)を上書きする。

20.3.2 public String getName()

このClassオブジェクト によって表されるクラス又はインタフェースの完全限定名が String として返される。次の例は,"java.lang.Object" を返す。 例

new Object().getClass().getName()

このクラスのオブジェクトが配列のクラスを表現する場合,その名前は,配列の入れ子の深さを表現する 一つ以上の"["と,Javaシグネチャ形式で表わされた要素型の名前から構成される。例えば,次の例は "[Ljava.lang.Object;" を返す。

(new Object[3]).getClass().getName()
また,次の例は,"[[[[[[[I" を返す。

(new int[3][4][5][6][7][8][9]).getClass().getName()
要素型の名前は,次のように符号化される。

B                byte
C                char
D                double
F                float
I                int
J                long
Lclassname;      class or interface
S                short
Z                boolean
クラス名又は インタフェース名(classname) は,前述の例で示したように完全限定名で記述される。型記述子の詳細については,Java Virtual Machine Specification のクラスファイル形式の章を参照のこと。

20.3.3 public boolean isInterface()

このClassオブジェクト がインタフェースを表現する場合,true を返す。このClassオブジェクトがクラスを表す場合,false を返す。

20.3.4 public Class getSuperclass()

このClassオブジェクト が,クラス Object 以外のクラスを表現する場合,そのクラスが属するスーパクラスを表現する Class を返す。このClassオブジェクト が,クラス Objectを表現するものである場合,又は,インタフェースを表現する場合,nullを返す。このClassオブジェクト が配列クラスを表現する場合,クラス Object を表現する Class を返す。

20.3.5 public Class[] getInterfaces()

このメソッドは,インタフェースを表現するオブジェクトの配列を返す。

この配列は空である場合もある。このClassオブジェクトがクラスを表現する場合,この配列は,そのクラスによって直接実装されるすべてのインタフェースを表現するオブジェクトを含む。配列中のインタフェースオブジェクトの順序は,Classオブジェクト によって表現されるクラス宣言のimplements節でのインタフェースの名前の順序と対応する。例えば,次のクラス宣言を例に挙げる。

class Shimmer implements FloorWax, DessertTopping {
 ... }
ここで,s の値が Shimmer のインスタンスであると考える。すると,

s.getClass().getInterfaces()[0]
is the Class object that represents interface FloorWax; and the value of:

s.getClass().getInterfaces()[1]
この式の値は,インタフェース FloorWax を表現するオブジェクト Class とする。また, s.getClass().getInterfaces()[1]この式の値は,インタフェース DessertTopping を表現するClassオブジェクトとする。

このClassオブジェクトがインタフェースを表現する場合,配列は,そのインタフェースによって直接継承されるすべてのインタフェース---つまり,インタフェースの直接のスーパインタフェース---を表現するオブジェクトを含む。配列中のインタフェースオブジェクトの順序は,Classオブジェクト によって表現されるインタフェース宣言の extends 節でのインタフェース名の順序と対応する。

20.3.6 public Object newInstance()
throws InstantiationException, IllegalAccessException

このメソッドは,このClassオブジェクトによって表現されるクラスのインスタンスを新しく作成し,それを返す。これは,空の実引数リストである時のクラスインスタンス作成式 (15.8)と同じ動作をする。例えば,t をクラス Thread を表すClassオブジェクト とすると,t.newInstance()は,new Thread()と同じとする。このようなクラスインスタンス作成式の評価が突然終了すると,メソッド newInstance の呼び出しも同じ理由により突然終了する。InstantiationException の詳細は,11.5.1.2も参照のこと。

20.3.7 public ClassLoader getClassLoader()

このメソッドは,このクラスをロードしたクラスローダ (20.14)への参照を返す。このクラスにクラスローダがない場合は,null を返す。

20.3.8 public static Class forName(String className)
throws ClassNotFoundException

このメソッドは,クラスの完全限定名が文字列で指定されると,クラスの検索,ロード (12.2),及びリンク (12.3)を試みる。成功すると,クラスのClassオブジェクト への参照を返す。失敗すると,ClassNotFoundException が投げられる。

20.4 クラス java.lang.Boolean

Boolean のオブジェクトは,型 boolean のプリミティブ値を表現する。

public final class Boolean {
    public static final Boolean TRUE = new Boolean(true);
    public static final Boolean FALSE = new Boolean(false);
    public Boolean(boolean value);
    public Boolean(String s);
    public String toString();
    public boolean equals(Object obj);
    public int hashCode();
    public boolean booleanValue();
    public static Boolean valueOf(String s);
    public static boolean getBoolean(String name);
}

20.4.1 public static final Boolean TRUE = new Boolean(true);

このフィールドの定数値は,プリミティブ値 true に対応するBooleanオブジェクト とする。

20.4.2 public static final Boolean FALSE = new Boolean(false);

このフィールドの定数値は,プリミティブ値 false に対応するBooleanオブジェクト とする。

20.4.3 public Boolean(boolean value)

このコンストラクタは,実引数で指定されたプリミティブ値を表すBooleanオブジェクト を新しく作成する。

20.4.4 public Boolean(String s)

このコンストラクタは,Booleanオブジェクト を新しく作成し,実引数が null ではなく,大文字小文字の区別なしで "true" と一致する場合に,またその場合にだけ,それを true で初期化する。

次に例を挙げる。


Boolean("True") は,true を表すBooleanオブジェクト を新しく作成する。
Boolean ("yes")はfalse を表すBooleanオブジェクト を新しく作成する。

20.4.5 public String toString()

このBooleanオブジェクト が true を表現する場合,"true" と等しい文字列を返す。このBooleanオブジェクトが false を表現する場合,"false" と等しい文字列を返す。

このメソッドは,Object (20.1.2)のメソッド toString を上書きする。

20.4.6 public boolean equals(Object obj)

実引数が null でなく,それがこのBooleanオブジェクトと等しい boolean 値を表すBooleanオブジェクトである場合に,またその場合にだけ true が結果として返される。

このメソッドは,Objectの メソッド equals (20.1.3)を上書きする。

20.4.7 public int hashCode()

このBooleanオブジェクト が true を表現する場合,整数 1231 を返す。このBooleanオブジェクト が false を表現する場合,整数 1237 を返す。

このメソッドは,Objectの メソッド hashCode(20.1.4)を上書きする。

20.4.8 public boolean booleanValue()

このBooleanオブジェクト によって表現されるプリミティブな boolean 値を返す。

20.4.9 public static boolean valueOf(String s)

実引数が空でなく,かつ大文字小文字の区別を無視して,文字列 "true" と等しい場合,またその場合にだけ結果が true になる。

例えば,Boolean.valueOf("True")true を返す。

例えば,Boolean.valueOf("yes")false を返す。

20.4.10 public static boolean getBoolean(String name)

実引数により名前が付けられたシステム属性 (20.18.9)の値が,大文字小文字の区別を無視して,文字列 "true"と等しい場合,またその場合にだけ結果が true になる。

20.5 クラス java.lang.Character

Character のオブジェクトは 型 charのプリミティブな値を表現する。


public final class Character {
    public static final char MIN_VALUE = '\u0000';
    public static final char MAX_VALUE = '\uffff';
    public static final int MIN_RADIX = 2;
    public static final int MAX_RADIX = 36;
    public Character(char value);
    public String toString();
    public boolean equals(Object obj);
    public int hashCode();
    public char charValue();
    public static boolean isDefined(char ch);
    public static boolean isLowerCase(char ch);
    public static boolean isUpperCase(char ch);
    public static boolean isTitleCase(char ch);
    public static boolean isDigit(char ch);
    public static boolean isLetter(char ch);
    public static boolean isLetterOrDigit(char ch);
    public static boolean isJavaLetter(char ch);
    public static boolean isJavaLetterOrDigit(char ch);)
    public static boolean isSpace(char ch);
    public static char toLowerCase(char ch);
    public static char toUpperCase(char ch);
    public static char toTitleCase(char ch);
    public static int digit(char ch, int radix);
    public static char forDigit(int digit, int radix);
}
クラス Character のメソッドの多くは,“Unicode属性テーブル”によって定義される。このテーブルは,定義済みのすべてのUnicode文字と,10進数字,大文字,小文字,及び対応するタイトルケースなどの属性を指定する。Java 1.1以前では,これらのメソッドは,ここで説明するようにUnicode 1.1.5に基づいたJavaコンパイラの内部メソッドである。これらのメソッドの最新バージョンは,これらのメソッドを組み込んでいないJavaシステム上で動作するJavaコンパイラで使用する。

Unicode 1.1.5 属性テーブルは,次の URL で WWW から入手できる。

ftp://unicode.org/pub/MappingTables/UnicodeData-1.1.5.txt
ただし,このファイルは若干のエラーを含んでいる。以下で“Unicode属性テーブル”に言及する場合は,このファイルを修正を加えたものを指す。

Unicode第2.0版では,これらの問題は訂正されていると予測される。

Java 1.1では,Unicode第1.1.5版に基づいてここで定義されるメソッド,又は,希望的観測では,新しいUnicode第2.0版を使用した新しいバージョンのメソッドが利用できるようになる予定である。Unicode第2.0版の文字属性テーブルは,現在WWWでファイルとして公開され,次のURLから入手可能である。

ftp://unicode.org/pub/MappingTables/UnicodeData-2.0.12.txt
Unicode に依存するメソッドに関する情報は,随時更新される予定になっている。

Unicode第2版での,もっとも大きな変更点は,朝鮮語(チョソノ)のハングルを大きく配置しなおしたことである。また,その他,細かい修正も加えられている。

20.5.1 public static final char MIN_VALUE = '\u0000';

このフィールドの定数値は,型 char の最小値とする。

[このフィールドは,Java Version 1.1 で導入される予定]

20.5.2 public static final char MAX_VALUE = '\uffff';

このフィールドの定数値は,型 char の最大値とする。

[このフィールドは,Java Version 1.1 で導入される予定]

20.5.3 public static final int MIN_RADIX = 2;

このフィールドの定数値は,クラス Integer (20.7) のメソッド digit (20.5.23),メソッド forDigit (20.5.24),及びメソッドtoString など基数に関係するメソッドの実引数 radix として指定可能な最小値とする。

20.5.4 public static final int MAX_RADIX = 36;

このフィールドの定数値は,クラス Integer (20.7)のメソッド digit(20.5.23),メソッド forDigit (20.5.24),及びメソッド toString など基数に関係するメソッドの実引数 radix として指定可能な最大値とする。

20.5.5 public Character(char value)

このコンストラクタは,実引数で指定されたプリミティブ値を表すオブジェクト Character を作成する。

20.5.6 public String toString()

このメソッドは,長さが 1 で,このCharacterオブジェクト の表すプリミティブ値 char を唯一の要素とする String を返す。

Object のメソッド toString (20.1.2)を上書きする。

20.5.7 public boolean equals(Object obj)

実引数が空でなく,かつこのCharacterオブジェクト と同じ char 値を持つCharacterオブジェクトである場合,またその場合にだけ結果が true になる。

オブジェクトのメソッド equals を上書きする(20.1.3)

20.5.8 public int hashCode()

このCharacterオブジェクト で表現される char プリミティブの値が型 int にキャストされたものを返す。

オブジェクトのメソッド hashCode(20.1.4)を上書きする。

20.5.9 public char charValue()

このCharacterオブジェクト で表現される char プリミティブの値を返す。

20.5.10 public static boolean isDefined(char ch)

文字実引数が定義済みUnicode文字である場合,またその場合にだけ,true が結果として返される。

文字は,次の条件のうち少なくとも一つが真である場合に,またその場合にだけ,定義済みUnicode文字とする。

従って,前述したUnicode第1.1.5版では,定義済みUnicode文字のコードは,次に挙げる文字コードあるいは文字コード領域のリストに含まれている。

0000-01F5, 01FA-0217, 0250-02A8, 02B0-02DE, 02E0-02E9, 0300-0345, 0360-0361, 0374-0375, 037A, 037E, 0384-038A, 038C, 038E-03A1, 03A3-03CE, 03D0-03D6, 03DA, 03DC, 03DE, 03E0, 03E2-03F3, 0401-040C, 040E-044F, 0451-045C, 045E-0486, 0490-04C4, 04C7-04C8, 04CB-04CC, 04D0-04EB, 04EE-04F5, 04F8-04F9, 0531-0556, 0559-055F, 0561-0587, 0589, 05B0-05B9, 05BB-05C3, 05D0-05EA, 05F0-05F4, 060C, 061B, 061F, 0621-063A, 0640-0652, 0660-066D, 0670-06B7, 06BA-06BE, 06C0-06CE, 06D0-06ED, 06F0-06F9, 0901-0903, 0905-0939, 093C-094D, 0950-0954, 0958-0970, 0981-0983, 0985-098C, 098F-0990, 0993-09A8, 09AA-09B0, 09B2, 09B6-09B9, 09BC, 09BE-09C4, 09C7-09C8, 09CB-09CD, 09D7, 09DC-09DD, 09DF-09E3, 09E6-09FA, 0A02, 0A05-0A0A, 0A0F-0A10, 0A13-0A28, 0A2A-0A30, 0A32-0A33, 0A35-0A36, 0A38-0A39, 0A3C, 0A3E-0A42, 0A47-0A48, 0A4B-0A4D, 0A59-0A5C, 0A5E, 0A66-0A74, 0A81-0A83, 0A85-0A8B, 0A8D, 0A8F-0A91, 0A93-0AA8, 0AAA-0AB0, 0AB2-0AB3, 0AB5-0AB9, 0ABC-0AC5, 0AC7-0AC9, 0ACB-0ACD, 0AD0, 0AE0, 0AE6-0AEF, 0B01-0B03, 0B05-0B0C, 0B0F-0B10, 0B13-0B28, 0B2A-0B30, 0B32-0B33, 0B36-0B39, 0B3C-0B43, 0B47-0B48, 0B4B-0B4D, 0B56-0B57, 0B5C-0B5D, 0B5F-0B61, 0B66-0B70, 0B82-0B83, 0B85-0B8A, 0B8E-0B90, 0B92-0B95, 0B99-0B9A, 0B9C, 0B9E-0B9F, 0BA3-0BA4, 0BA8-0BAA, 0BAE-0BB5, 0BB7-0BB9, 0BBE-0BC2, 0BC6-0BC8, 0BCA-0BCD, 0BD7, 0BE7-0BF2, 0C01-0C03, 0C05-0C0C, 0C0E-0C10, 0C12-0C28, 0C2A-0C33, 0C35-0C39, 0C3E-0C44, 0C46-0C48, 0C4A-0C4D, 0C55-0C56, 0C60-0C61, 0C66-0C6F, 0C82-0C83, 0C85-0C8C, 0C8E-0C90, 0C92-0CA8, 0CAA-0CB3, 0CB5-0CB9, 0CBE-0CC4, 0CC6-0CC8, 0CCA-0CCD, 0CD5-0CD6, 0CDE, 0CE0-0CE1, 0CE6-0CEF, 0D02-0D03, 0D05-0D0C, 0D0E-0D10, 0D12-0D28, 0D2A-0D39, 0D3E-0D43, 0D46-0D48, 0D4A-0D4D, 0D57, 0D60-0D61, 0D66-0D6F, 0E01-0E3A, 0E3F-0E5B, 0E81-0E82, 0E84, 0E87-0E88, 0E8A, 0E8D, 0E94-0E97, 0E99-0E9F, 0EA1-0EA3, 0EA5, 0EA7, 0EAA-0EAB, 0EAD-0EB9, 0EBB-0EBD, 0EC0-0EC4, 0EC6, 0EC8-0ECD, 0ED0-0ED9, 0EDC-0EDD, 10A0-10C5, 10D0-10F6, 10FB, 1100-1159, 115F-11A2, 11A8-11F9, 1E00-1E9A, 1EA0-1EF9, 1F00-1F15, 1F18-1F1D, 1F20-1F45, 1F48-1F4D, 1F50-1F57, 1F59, 1F5B, 1F5D, 1F5F-1F7D, 1F80-1FB4, 1FB6-1FC4, 1FC6-1FD3, 1FD6-1FDB, 1FDD-1FEF, 1FF2-1FF4, 1FF6-1FFE, 2000-202E, 2030-2046, 206A-2070, 2074-208E, 20A0-20AA, 20D0-20E1, 2100-2138, 2153-2182, 2190-21EA, 2200-22F1, 2300, 2302-237A, 2400-2424, 2440-244A, 2460-24EA, 2500-2595, 25A0-25EF, 2600-2613, 261A-266F, 2701-2704, 2706-2709, 270C-2727, 2729-274B, 274D, 274F-2752, 2756, 2758-275E, 2761-2767, 2776-2794, 2798-27AF, 27B1-27BE, 3000-3037, 303F, 3041-3094, 3099-309E, 30A1-30FE, 3105-312C, 3131-318E, 3190-319F, 3200-321C, 3220-3243, 3260-327B, 327F-32B0, 32C0-32CB, 32D0-32FE, 3300-3376, 337B-33DD, 33E0-33FE, 3400-9FA5, F900-FA2D, FB00-FB06, FB13-FB17, FB1E-FB36, FB38-FB3C, FB3E, FB40-FB41, FB43-FB44, FB46-FBB1, FBD3-FD3F, FD50-FD8F, FD92-FDC7, FDF0-FDFB, FE20-FE23, FE30-FE44, FE49-FE52, FE54-FE66, FE68-FE6B, FE70-FE72, FE74, FE76-FEFC, FEFF, FF01-FF5E, FF61-FFBE, FFC2-FFC7, FFCA-FFCF, FFD2-FFD7, FFDA-FFDC, FFE0-FFE6, FFE8-FFEE, FFFD

[このメソッドは,ここで定義されている通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入される予定である。 20.5を参照のこと。]

20.5.11 public static boolean isLowerCase(char ch)

文字実引数が小文字である場合に,またその場合にだけ,true が結果として返される。

文字は,次の条件のすべてを満たす場合に,またその場合にだけ,小文字であると見なされる。

従って,前述したUnicode第1.1.5版では,Unicode文字の小文字のコードは,次に挙げる文字コードあるいは文字コード領域のリストに含まれていることになる。

0061-007A, 00DF-00F6, 00F8-00FF, 0101-0137 (奇数だけ), 0138-0148 (偶数だけ), 0149-0177 (奇数だけ), 017A-017E (偶数だけ), 017F-0180, 0183, 0185, 0188, 018C-018D, 0192, 0195, 0199-019B, 019E, 01A1-01A5 (奇数だけ), 01A8, 01AB, 01AD, 01B0, 01B4, 01B6, 01B9-01BA, 01BD, 01C6, 01C9, 01CC-01DC (偶数だけ), 01DD-01EF (奇数だけ), 01F0, 01F3, 01F5, 01FB-0217 (奇数だけ), 0250-0261, 0263-0269, 026B-0273, 0275, 0277-027F, 0282-028E, 0290-0293, 029A, 029D-029E, 02A0, 02A3-02A8, 0390, 03AC-03CE, 03D0-03D1, 03D5-03D6, 03E3-03EF (奇数だけ), 03F0-03F1, 0430-044F, 0451-045C, 045E-045F, 0461-0481 (奇数だけ), 0491-04BF (奇数だけ), 04C2, 04C4, 04C8, 04CC, 04D1-04EB (奇数だけ), 04EF-04F5 (奇数だけ), 04F9, 0561-0587, 1E01-1E95 (奇数だけ), 1E96-1E9A, 1EA1-1EF9 (奇数だけ), 1F00-1F07, 1F10-1F15, 1F20-1F27, 1F30-1F37, 1F40-1F45, 1F50-1F57, 1F60-1F67, 1F70-1F7D, 1F80-1F87, 1F90-1F97, 1FA0-1FA7, 1FB0-1FB4, 1FB6-1FB7, 1FC2-1FC4, 1FC6-1FC7, 1FD0-1FD3, 1FD6-1FD7, 1FE0-1FE7, 1FF2-1FF4, 1FF6-1FF7, FB00-FB06, FB13-FB17, FF41-FF5A

Unicode文字の最初の128文字のうち,次の26文字だけが小文字であると見なされる。

abcdefghijklmnopqrstuvwxyz
[メソッド isLowerCase の仕様は,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.12 public static boolean isUpperCase(char ch)

文字実引数が大文字である場合に,またその場合にだけ true が結果として返される。

文字は,次の条件のすべてを満たす場合に,またその場合にだけ,大文字であると見なされる。

従って,前述したUnicode第1.1.5版では,Unicode文字の大文字のコードは,次に挙げる文字コードあるいは文字コード領域のリストに含まれていることになる。

0041-005A, 00C0-00D6, 00D8-00DE, 0100-0136 (偶数だけ), 0139-0147 (奇数だけ), 014A-0178 (偶数だけ), 0179-017D (奇数だけ), 0181-0182, 0184, 0186, 0187, 0189-018B, 018E-0191, 0193-0194, 0196-0198, 019C-019D, 019F-01A0, 01A2, 01A4, 01A7, 01A9, 01AC, 01AE, 01AF, 01B1-01B3, 01B5, 01B7, 01B8, 01BC, 01C4, 01C7, 01CA, 01CD-01DB (奇数だけ), 01DE-01EE (偶数だけ), 01F1, 01F4, 01FA-0216 (偶数だけ), 0386, 0388-038A, 038C, 038E, 038F, 0391-03A1, 03A3-03AB, 03E2-03EE (偶数だけ), 0401-040C, 040E-042F, 0460-0480 (偶数だけ), 0490-04BE (偶数だけ), 04C1, 04C3, 04C7, 04CB, 04D0-04EA (偶数だけ), 04EE-04F4 (偶数だけ), 04F8, 0531-0556, 10A0-10C5, 1E00-1E94 (偶数だけ), 1EA0-1EF8 (偶数だけ), 1F08-1F0F, 1F18-1F1D, 1F28-1F2F, 1F38-1F3F, 1F48-1F4D, 1F59-1F5F (奇数だけ), 1F68-1F6F, 1F88-1F8F, 1F98-1F9F, 1FA8-1FAF, 1FB8-1FBC, 1FC8-1FCC, 1FD8-1FDB, 1FE8-1FEC, 1FF8-1FFC, FF21-FF3A

Unicode文字の最初の128文字のうち,次の26文字だけが大文字だと見なされる。

ABCDEFGHIJKLMNOPQRSTUVWXYZ
[メソッド isUpperCase の仕様は,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。 20.5を参照のこと。]

20.5.13 public static boolean isTitleCase(char ch)

文字実引数がタイトルケースである場合に,またその場合にだけ,true が結果として返される。

“タイトルケース”という概念がUnicodeに導入されたのは,ある特殊な状況に対処するためであった。Unicodeには,1文字として扱われながら見た目には二つの普通のラテン文字に見える文字がある。例えば,Unicodeには‘LJ’(\u01C7)という文字がある。これは,‘L’と‘J’という二つの文字が続いたように見えるが,1文字である。また,対応する小文字‘lj’(\u01C9)もある。これらの文字がUnicodeにあるのは,主に,セルビアなどで使われているキリルアルファベットから,例えばラテンアルファベットへの,一対一転記を可能にするためである。ここで,“LJUBINJE”という単語を考えてみるが(これは,おそらくキリル文字を転記したものであり,‘LJ’と‘NJ’がそれぞれ1文字であるので,8文字ではなく,6文字(six) である),書名の一部に使う場合には,大文字と小文字で書くことになっている。初めの文字を大文字にし,それ以外の文字を小文字にするという方法では,“LJubinje”となってしまい,具合が悪い。この解決策として,タイトルケース と呼ばれる三つめの形を使うことになった。‘LJ’のタイトルケースは‘Lj’(\u01C8)であり,‘NJ’のタイトルケースは‘Nj’とする。書名に出てくる単語の場合,可能であれば初めの文字をタイトルケースに変換し,そうでなければ大文字に変換する。その他の文字は,小文字に変換される。

文字は,次の条件の両方が真である場合に,またその場合にだけ,タイトルケースであると見なされる。

Unicode1.1.5では,次の4つの文字が isTitleCase に対して true を返す。

\u01C5     LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
\u01C8     LATIN CAPITAL LETTER L WITH SMALL LETTER J
\u01CB     LATIN CAPITAL LETTER N WITH SMALL LETTER J
\u01F2     LATIN CAPITAL LETTER D WITH SMALL LETTER Z
[このメソッドは,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.14 public static boolean isDigit(char ch)

文字実引数が数字である場合に,またその場合にだけ true が結果として返される。

文字は,次の条件の両方が真である場合に,またその場合にだけ,数字であると見なされる。

数字は次のコードを持つ文字とする。

0030-0039    ISO-Latin-1 (及びASCII) 数字 ('0'-'9')
0660-0669    アラビアインド数字
06F0-06F9    東方アラビアインド数字
0966-096F    デーバナーガーリ数字
09E6-09EF    ベンガル数字
0A66-0A6F    グルムキ数字
0AE6-0AEF    グジャラート数字
0B66-0B6F    オーリヤ数字
0BE7-0BEF    タミル数字 (9文字だけ。0はない)
0C66-0C6F    テルグ数字
0CE6-0CEF    カンナダ数字
0D66-0D6F    マラヤラム数字
0E50-0E59    タイ数字
0ED0-0ED9    ラオ数字
FF10-FF19    全角数字
Unicode文字の最初の128文字のうち,次の10文字だけが数字であると見なされる。

0123456789
[このメソッドは,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.15 public static boolean isLetter(char ch)

文字実引数が文字(letter)である場合に,またその場合にだけ,true が結果として返される。

文字が letter又は数字 (20.5.16) のいずれかであり,かつ数字 (20.5.14) ではない場合に,またその場合にだけ,文字は letter と見なされる。

[このメソッドは,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.16 public static boolean isLetterOrDigit(char ch)

文字実引数が文字か数字(letter-or-digit)の場合に,またその場合にだけ,true を結果として返す。

文字は,定義済みUnicode文字(20.5.10)であり,その文字コードが次の範囲に該当する場合に,またその場合にだけ,文字か数字(letter-or-digit)と見なされる。

0030-0039    ISO-Latin-1 (及びASCII) ('0'-'9')
0041-005A    ISO-Latin-1 (及びASCII) ラテン大文字 ('A'-'Z')
0061-007A    ISO-Latin-1 (及びASCII) ラテン小文字 ('a'-'z')
00C0-00D6    ISO-Latin-1 補助文字
00D8-00F6    ISO-Latin-1 補助文字
00F8-00FF    ISO-Latin-1 補助文字
0100-1FFF    拡張ラテンA,拡張ラテンB,IPA拡張,幅付き修飾記号,発音区分符,
             基本ギリシャ文字,ギリシャ文字記号及びコプト文字,アルメニア文字, 
             拡張ヘブライ文字A,基本ヘブライ文字,拡張ヘブライ文字B,基本アラビア文字, 
             拡張アラビア文字,デーバナーガリ文字,ベンガル文字,グルムキ文字,グジャラティ文字,
             オリヤ文字,タミル文字,テルグ文字,カナダ文字,マラヤラム文字,タイ文字, 
             ラオス文字,基本グルジア文字,拡張グルジア文字,ハングルジャモ, 
             拡張ラテン文字補助,拡張ギリシャ文字
3040-9FFF    平仮名,片仮名,ボポモフォ,ハングル互換ジャモ,その他のCJK漢字,
             かっこ付きCJK文字及び月,CJK互換,ハングル,ハングル補足A,ハングル補足B,
             CJK統合漢字
F900-FDFF    CJK互換漢字 ,アルファベット表現形 ,アラビア文字表現形A
FE70-FEFE    アラビア文字表現形B
FF10-FF19    全角数字
FF21-FF3A    全角ラテン大文字
FF41-FF5A    全角ラテン小文字
FF66-FFDC    半角片仮名及びハングル
したがって,前述した修正を加えたUnicode1.1.5では,Unicode文字及び数字は,以下に挙げたコード及びコード領域のリストにあるいずれかのコードを持つ。

0030-0039, 0041-005A, 0061-007A, 00C0-00D6, 00D8-00F6, 00F8-01F5, 01FA-0217, 0250-02A8, 02B0-02DE, 02E0-02E9, 0300-0345, 0360-0361, 0374-0375, 037A, 037E, 0384-038A, 038C, 038E, 038F-03A1, 03A3-03CE, 03D0-03D6, 03DA-03E2, 03DA, 03DC, 03DE, 03E0, 03E2-03F3, 0401-040C, 040E-044F, 0451-045C, 045E-0486, 0490-04C4, 04C7-04C8, 04CB-04CC, 04D0-04EB, 04EE-04F5, 04F8-04F9, 0531-0556, 0559-055F, 0561-0587, 0589, 05B0-05B9, 05BB-05C3, 05D0-05EA, 05F0-05F4, 060C, 061B, 061F, 0621, 0622-063A, 0640-0652, 0660-066D, 0670-06B7, 06BA-06BE, 06C0-06CE, 06D0-06ED, 06F0-06F9, 0901-0903, 0905-0939, 093C-094D, 0950-0954, 0958-0970, 0981-0983, 0985-098C, 098F-0990, 0993-09A8, 09AA-09B0, 09B2, 09B6-09B9, 09BC, 09BE, 09BF-09C4, 09C7-09C8, 09CB-09CD, 09D7, 09DC-09DD, 09DF-09E3, 09E6-09FA, 0A02, 0A05-0A0A, 0A0F-0A10, 0A13-0A28, 0A2A-0A30, 0A32-0A33, 0A35-0A36, 0A38-0A39, 0A3C, 0A3E, 0A3F-0A42, 0A47-0A48, 0A4B-0A4D , 0A59-0A5C, 0A5E, 0A66-0A74, 0A81-0A83, 0A85-0A8B, 0A8D, 0A8F, 0A90-0A91, 0A93-0AA8, 0AAA-0AB0, 0AB2-0AB3, 0AB5-0AB9, 0ABC-0AC5, 0AC7-0AC9, 0ACB-0ACD, 0AD0, 0AE0, 0AE6-0AEF, 0B01-0B03, 0B05-0B0C, 0B0F-0B10, 0B13-0B28, 0B2A-0B30, 0B32-0B33, 0B36-0B39, 0B3C-0B43, 0B47-0B48, 0B4B-0B4D, 0B56-0B57, 0B5C-0B5D, 0B5F-0B61, 0B66-0B70, 0B82-0B83, 0B85-0B8A, 0B8E-0B90, 0B92-0B95, 0B99-0B9A, 0B9C, 0B9E, 0B9F, 0BA3-0BA4, 0BA8-0BAA, 0BAE-0BB5, 0BB7-0BB9, 0BBE-0BC2, 0BC6-0BC8, 0BCA-0BCD, 0BD7, 0BE7-0BF2, 0C01-0C03, 0C05-0C0C, 0C0E-0C10, 0C12-0C28, 0C2A-0C33, 0C35-0C39, 0C3E-0C44, 0C46-0C48, 0C4A-0C4D, 0C55-0C56, 0C60-0C61, 0C66-0C6F, 0C82-0C83, 0C85-0C8C, 0C8E-0C90, 0C92-0CA8, 0CAA-0CB3, 0CB5-0CB9, 0CBE-0CC4, 0CC6-0CC8, 0CCA-0CCD, 0CD5-0CD6, 0CDE, 0CE0, 0CE1, 0CE6-0CEF, 0D02-0D03, 0D05-0D0C, 0D0E-0D10, 0D12-0D28, 0D2A-0D39, 0D3E-0D43, 0D46-0D48, 0D4A-0D4D, 0D57, 0D60-0D61, 0D66-0D6F, 0E01-0E3A, 0E3F-0E5B, 0E81-0E82, 0E84, 0E87-0E88, 0E8A, 0E8D, 0E94-0E97, 0E99-0E9F, 0EA1-0EA3, 0EA5, 0EA7, 0EAA-0EAB, 0EAD-0EB9, 0EBB-0EBD, 0EC0-0EC4, 0EC6, 0EC8, 0EC9-0ECD, 0ED0-0ED9, 0EDC-0EDD, 10A0-10C5, 10D0-10F6, 10FB, 1100-1159, 115F-11A2, 11A8-11F9, 1E00-1E9A, 1EA0-1EF9, 1F00-1F15, 1F18-1F1D, 1F20-1F45, 1F48-1F4D, 1F50-1F57, 1F59, 1F5B, 1F5D, 1F5F-1F7D, 1F80-1FB4, 1FB6-1FC4, 1FC6-1FD3, 1FD6-1FDB, 1FDD-1FEF, 1FF2-1FF4, 1FF6-1FFE, 3041-3094, 3099-309E, 30A1-30FE, 3105-312C, 3131-318E, 3190-319F, 3200-321C, 3220-3243, 3260-327B, 327F-32B0, 32C0-32CB, 32D0-32FE, 3300-3376, 337B-33DD, 33E0-33FE, 3400-9FA5, F900-FA2D, FB00-FB06, FB13-FB17, FB1E-FB36, FB38-FB3C, FB3E, FB40, FB41, FB43, FB44, FB46, FB47-FBB1, FBD3-FD3F, FD50-FD8F, FD92-FDC7, FDF0-FDFB, FE70-FE72, FE74, FE76, FE77-FEFC, FF10-FF19, FF21-FF3A, FF41-FF5A, FF66-FFBE, FFC2-FFC7, FFCA-FFCF, FFD2-FFD7, FFDA-FFDC

[このメソッドは,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.17 public static boolean isJavaLetter(char ch)

文字実引数がJava識別子の先頭に来ることのできる文字である場合に,またその場合にだけ,true を結果として返す。

実引数は,文字(20.5.15)又はドル記号 '$'(\u0024)又は下線 '_' (\u005F)である場合に,またその場合にだけ,Java文字と見なされる。

[このメソッドは,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.18 public static boolean isJavaLetterOrDigit(char ch)

文字実引数がJava識別子の2文字目以降に現われることのできる文字である場合に,またその場合にだけ,true を結果として返す。

文字は,文字又は数字(letter-or-digit) (20.5.16)又はドル記号 '$' (\u0024)又は下線 '_' (\u005F)である場合に,またその場合にだけ,Java文字・数字と見なされる。

[このメソッドは,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.19 public static boolean isSpace(char ch)

実引数 ch が次のいずれかの文字に該当する場合,true を結果として返す。


'\t'        \u0009            HT        水平タブ
'\n'        \u000A            LF        ラインフィード (改行)
'\f'        \u000C            FF        フォームフィード
'\r'        \u000D            CR        復帰
' '         \u0020            SP        空白
それ以外の場合は,false を返す。

20.5.20 public static char toLowerCase(char ch)

文字 ch に対応する小文字がUnicode属性テーブルで定義されている場合,その対応する小文字を返す。それ以外は,実引数 ch を返す。

前述した修正を加えたUnicode1.1.5のUnicode属性テーブルで定義される小文字の対応表を次に挙げる。次の表では矢印の左側の文字に対応する小文字が矢印の右側に示されている。

0041-005A 0061-007A, 00C0-00D6 00E0-00F6, 00D8-00DE 00F8-00FE, 0100-012E 0101-012F (偶数から奇数), 0132-0136 0133-0137 (偶数から奇数), 0139-0147 013A-0148 (奇数から偶数), 014A-0176 014B-0177 (偶数から奇数), 0178 00FF, 0179-017D 017A-017E (奇数から偶数), 0181 0253, 0182 0183, 0184 0185, 0186 0254, 0187 0188, 018A 0257, 018B 018C, 018E 0258, 018F 0259, 0190 025B, 0191 0192, 0193 0260, 0194 0263, 0196 0269, 0197 0268, 0198 0199, 019C 026F, 019D0272, 01A0-01A4 01A1-01A5 (偶数から奇数), 01A7 01A8, 01A9 0283, 01AC 01AD, 01AE 0288, 01AF 01B0, 01B1 028A, 01B2 028B, 01B3 01B4, 01B5 01B6, 01B7 0292, 01B8 01B9, 01BC 01BD, 01C401C6, 01C5 01C6, 01C7 01C9, 01C8 01C9, 01CA 01CC, 01CB-01DB 01CC-01DC (奇数から偶数), 01DE-01EE 01DF-01EF (偶数から奇数), 01F1 01F3, 01F2 01F3, 01F4 01F5, 01FA-0216 01FB-0217 (偶数から奇数), 0386 03AC, 0388-038A 03AD-03AF, 038C03CC, 038E03CD, 038F03CE, 0391-03A1 03B1-03C1, 03A3-03AB 03C3-03CB, 03E2-03EE 03E3-03EF (偶数から奇数), 0401-040C 0451-045C, 040E045E, 040F045F, 0410-042F 0430-044F, 0460-0480 0461-0481 (偶数から奇数), 0490-04BE 0491-04BF (偶数から奇数), 04C1 04C2, 04C3 04C4, 04C7 04C8, 04CB 04CC, 04D0-04EA 04D1-04EB (偶数から奇数), 04EE-04F4 04EF-04F5 (偶数から奇数), 04F8 04F9, 0531-0556 0561-0586, 10A0-10C5 10D0-10F5, 1E00-1E94 1E01-1E95 (偶数から奇数), 1EA0-1EF8 1EA1-1EF9 (偶数から奇数), 1F08-1F0F 1F00-1F07, 1F18-1F1D 1F10-1F15, 1F28-1F2F 1F20-1F27, 1F38-1F3F 1F30-1F37, 1F48-1F4D 1F40-1F45, 1F591F51, 1F5B1F53, 1F5D1F55, 1F5F1F57, 1F68-1F6F 1F60-1F67, 1F88-1F8F 1F80-1F87, 1F98-1F9F 1F90-1F97, 1FA8-1FAF 1FA0-1FA7, 1FB81FB0, 1FB91FB1, 1FBA1F70, 1FBB1F71, 1FBC1FB3, 1FC8-1FCB 1F72-1F75, 1FCC1FC3, 1FD81FD0, 1FD91FD1, 1FDA1F76, 1FDB1F77, 1FE81FE0, 1FE91FE1, 1FEA1F7A, 1FEB1F7B, 1FEC1FE5, 1FF81F78, 1FF91F79, 1FFA1F7C, 1FFB1F7D, 1FFC1FF3, 2160-216F 2170-217F, 24B6-24CF 24D0-24E9, FF21-FF3A FF41-FF5A

メソッド isLowerCase(20.5.11)は,メソッド toLowerCase の戻り値を実引数とした場合,必ずしも true を返すとは限らない。

[メソッド toLowerCase についての仕様は,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.21 public static char toUpperCase(char ch)

文字 ch に対応する大文字がUnicode属性テーブルで定義されている場合,その対応する大文字を返す。それ以外は,実引数 ch を返す。

前述した修正を加えたUnicode1.1.5のUnicode属性テーブルで定義される大文字の対応表を次に挙げる。次の表では矢印の左側の文字に対応する大文字が矢印の右側に示されている。

0061-007A 0041-005A, 00E0-00F6 00C0-00D6, 00F8-00FE 00D8-00DE, 00FF0178, 0101-012F 0100-012E (奇数から偶数), 0133-0137 0132-0136 (奇数から偶数), 013A-0148 0139-0147 (偶数から奇数), 014B-0177 014A-0176 (奇数から偶数), 017A-017E 0179-017D (偶数から奇数), 017F 0053, 0183-0185 0182-0184 (奇数から偶数), 0188 0187, 018C 018B, 0192 0191, 0199 0198, 01A1-01A5 01A0-01A4 (奇数から偶数), 01A8 01A7, 01AD 01AC, 01B0 01AF, 01B4 01B3, 01B6 01B5, 01B9 01B8, 01BD 01BC, 01C5 01C4, 01C601C4, 01C801C7, 01C901C7, 01CB01CA, 01CC01CA, 01CE-01DC 01CD-01DB (偶数から奇数), 01DF-01EF 01DE-01EE (奇数から偶数), 01F2 01F1, 01F3 01F1, 01F5 01F4, 01FB-0217 01FA-0216 (奇数から偶数), 0253 0181, 0254 0186, 0257018A, 0258018E, 0259018F, 025B0190, 02600193, 02630194, 02680197, 02690196, 026F019C, 0272019D, 028301A9, 028801AE, 028A01B1, 028B01B2, 029201B7, 03AC0386, 03AD-03AF 0388-038A, 03B1-03C1 0391-03A1, 03C203A3, 03C3-03CB 03A3-03AB, 03CC038C, 03CD038E, 03CE038F, 03D00392, 03D10398, 03D503A6, 03D603A0, 03E3-03EF 03E2-03EE (奇数から偶数), 03F0 039A, 03F103A1, 0430-044F 0410-042F, 0451-045C 0401-040C, 045E040E, 045F040F, 0461-0481 0460-0480 (奇数から偶数), 0491-04BF 0490-04BE (奇数から偶数), 04C2 04C1, 04C4 04C3, 04C8 04C7, 04CC 04CB, 04D1-04EB 04D0-04EA (奇数から偶数), 04EF-04F5 04EE-04F4 (奇数から偶数), 04F9 04F8, 0561-0586 0531-0556, 1E01-1E95 1E00-1E94 (奇数から偶数), 1EA1-1EF9 1EA0-1EF8 (奇数から偶数), 1F00-1F07 1F08-1F0F, 1F10-1F15 1F18-1F1D, 1F20-1F27 1F28-1F2F, 1F30-1F37 1F38-1F3F, 1F40-1F45 1F48-1F4D, 1F511F59, 1F531F5B, 1F551F5D, 1F571F5F, 1F60-1F67 1F68-1F6F, 1F701FBA, 1F711FBB, 1F72-1F75 1FC8-1FCB, 1F761FDA, 1F771FDB, 1F781FF8, 1F791FF9, 1F7A1FEA, 1F7B 1FEB, 1F7C 1FFA, 1F7D 1FFB, 1F80-1F87 1F88-1F8F, 1F90-1F97 1F98-1F9F, 1FA0-1FA7 1FA8-1FAF, 1FB01FB8, 1FB11FB9, 1FB31FBC, 1FC31FCC, 1FD01FD8, 1FD11FD9, 1FE01FE8, 1FE11FE9, 1FE51FEC, 1FF31FFC, 2170-217F 2160-216F, 24D0-24E9 24B6-24CF, FF41-FF5A FF21-FF3A

メソッド isUpperCase(20.5.12)は,メソッド toUpperCase の戻り値を実引数とした場合,必ずしも true を返すとは限らない。

[メソッド toUpperCase についての仕様は,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.22 public static char toTitleCase(char ch)

文字 ch に対応するタイトルケースがUnicode属性テーブルに定義されている場合,その対応するタイトルケース文字を返す。それ以外は,実引数 ch を返す。

メソッド isTitleCase (20.5.13)は,メソッド toTitleCase の戻り値を実引数とした場合,必ずしも trueを返すとは限らない。Unicode属性テーブルは,大文字を持つが独立したタイトルケースを持たない文字に対しても,常に大文字属性に対応するタイトルケース属性を持つ。

例: Character.toTitleCase('a') 'A' を返す

例: Character.toTitleCase('Q') 'Q' を返す

例: Character.toTitleCase('lj') 'Lj' を返す。この時,'lj' はUnicode文字 \u01C9 であり,'Lj' に対応するtitlecase文字 \u01C8 とする。

[このメソッドは,バージョン1.1のJavaで導入予定である。]

20.5.23 public static int digit(char ch, int radix)

文字 ch を実引数 radixで指定された整数を基数とする数字と見なし,その数値を返す。radixの値が有効な基数ではない場合,又は文字 chが指定された基数で有効な数字ではない場合,-1 を返す

基数は,その値がCharacter.MIN_RADIX(20.5.3)より小さくなく,かつCharacter.MAX_RADIX(20.5.4)より大きくない場合に,またその場合にだけ,有効とする。

文字は,次のいずれかが成り立つ場合に,またその場合にだけ,有効な数字だと判定される。

[メソッド digitについてのこの仕様は,ここで定義された通りに,又はUnicode2.0に対応した形で,バージョン1.1のJavaから導入の予定である。20.5を参照のこと。]

20.5.24 public static char forDigit(int digit, int radix)

指定された基数で与えられた数字を表現する文字を返す。radix の値が有効な基数ではない場合,又は digit の値が指定された基数で有効な数字ではない場合,null文字 '\u0000' を返す。

基数は,その値がCharacter.MIN_RADIX (20.5.3) より小さくなく,及びCharacter.MAX_RADIX(20.5.4)より大きくない場合に,またその場合にだけ,有効とする。

数値は,負でなく,radixより小さい場合に,またその場合にだけ,有効とする。

数値が 10 より小さい場合,文字値 '0'+digitを返す。それ以外の場合は,'a'+digit-10を返す。従って,forDigitで生成される数字は,次の昇順のASCII文字になる。

0123456789abcdefghijklmnopqrstuvwxyz
(これらの文字は,'\u0030' から '\u0039' 及び'\u0061' から '\u007a'である。大文字にする場合は,戻り値に対して次のようにメソッドtoUpperCase を呼び出す。

Character.toUpperCase(Character.forDigit(digit, radix))

20.6 クラス java.lang.Number

抽象クラス Number には,サブクラスとして IntegerLongFloat,及び Double がある。これらのサブクラスは,表現された数値を intlongfloat,及び double に変換する抽象メソッドを定義して,プリミティブ型をラップする。

public abstract class Number {
    public abstract int intValue();
    public abstract long longValue();
    public abstract float floatValue();
    public abstract double doubleValue();
}

20.6.1 public abstract int intValue()

メソッド intValue は,このNumberオブジェクトによって表現される数値を型 int に変換した後,その値を返す。

Integer (20.7.8)Long (20.8.8)Float (20.9.12)及び Double (20.10.11)によって上書きされる。

20.6.2 public abstract long longValue()

メソッド longValue は,このNumberオブジェクト によって表現される数値を型 long に変換した後,その値を返す。

Integer (20.7.9)Long (20.8.9),Float (20.9.13)及び Double (20.10.12)によって上書きされる。

20.6.3 public abstract float floatValue()

メソッド floatValue は,このNumberオブジェクト によって表現される数値を型 float に変換した後,その値を返す。

Integer (20.7.10)Long (20.8.10)Float (20.9.14)及び Double(20.10.13)によって上書きされる。

20.6.4 public abstract double doubleValue()

メソッド doubleValue は,このNumberオブジェクトによって表現される数値を型 double に変換した後,その値を返す。

Integer(20.7.10)Long(20.8.10)Float (20.9.14)及び Double (20.10.13)によって上書きされる。

20.7 クラス java.lang.Integer

public final class Integer extends Number {
    public static final int MIN_VALUE = 0x80000000;
    public static final int MAX_VALUE = 0x7fffffff;
    public Integer(int value);
    public Integer(String s)
throws NumberFormatException; public String toString(); public boolean equals(Object obj); public int hashCode(); public int intValue(); public long longValue(); public float floatValue(); public double doubleValue(); public static String toString(int i); public static String toString(int i, int radix); public static String toHexString(long i); public static String toOctalString(long i); public static String toBinaryString(long i); public static int parseInt(String s)
throws NumberFormatException; public static int parseInt(String s, int radix)
throws NumberFormatException; public static Integer valueOf(String s)
throws NumberFormatException; public static Integer valueOf(String s, int radix)
throws NumberFormatException; public static Integer getInteger(String nm); public static Integer getInteger(String nm, int val); public static Integer getInteger(String nm, Integer val); }

20.7.1 public static final int MIN_VALUE = 0x80000000;

このフィールドの定数値は,型 int の最小値 -2147483648 とする。

20.7.2 public static final int MAX_VALUE = 0x7fffffff;

このフィールドの定数値は,型 int の最大値 2147483647 とする。

20.7.3 public Integer(int value)

このコンストラクタは, Integerオブジェクト を新しく作成し,実引数に指定されたプリミティブ値で初期化する。

20.7.4 public Integer(String s) throws NumberFormatException

このコンストラクタは, Integerオブジェクト を新しく作成し,それを10進表記の文字列によって表現された整数で初期化する。文字列は,メソッド parseInt(20.7.18) が基数10に対して行うのと同じ方法で int 値に変換される。

20.7.5 public String toString()

このIntegerオブジェクト によって表現される整数値を符号付き10進表現に変換し,その値を文字列として返す。これは,実引数を一つ取るメソッド toString(20.7.12)の実引数として,この整数値を渡すのと同じとする。

このメソッドは,Object のメソッド toString (20.1.2)を上書きする。

20.7.6 public boolean equals(Object obj)

実引数が null でなく,このIntegerオブジェクトと同じ int 値を表現するIntegerオブジェクトである場合に,またその場合にだけ,true を返す。

オブジェクトのメソッド equals (20.1.3)を上書きする。

20.7.7 public int hashCode()

このInteger オブジェクトによって表現されるプリミティブの int 値を返す。

Object のメソッド hashCode (20.1.4)を上書きする。

20.7.8 public int intValue()

このIntegerオブジェクト によって表現される int 値を返す。

Number のメソッド intValue (20.6.1)を上書きする。

20.7.9 public long longValue()

このIntegerオブジェクト によって表現される int 値が,型 long に変換(5.1.2)され,その変換結果を返す。

Number のメソッド longValue (20.6.2)を上書きする。

20.7.10 public float floatValue()

このIntegerオブジェクト によって表現される int 値が,型 float に変換(5.1.2)され,その変換結果を返す。

Number のメソッド floatValue (20.6.3)を上書きする。

20.7.11 public double doubleValue()

このIntegerオブジェクト によって表現される int 値が,型 double に変換 (5.1.2)され,その変換結果を返す。

Number のメソッド doubleValue (20.6.4)を上書きする。

20.7.12 public static String toString(int i)

実引数を符号付き10進数表現に変換し,文字列として返す。これは,実引数を二つ取るメソッド toString (20.7.13)の実引数として,この実引数と基数10 を渡すのと同じとする。

20.7.13 public static String toString(int i, int radix)

一つ目の実引数の整数値を2番目の実引数で指定された整数を基数とする数値の符号付き表現に変換し,その値を文字列として返す。

基数が Character.MIN_RADIX (20.5.3)より小さいか,Character.MAX_RADIX (20.5.4)より大きい場合,代わりに 10 が基数として使用される。

一つ目の実引数が負の場合,戻り値の最初の文字は '-'('\u002d')になる。一つ目の実引数が負でない場合,戻り値に符号は付かない。

戻り値から符号を取った残りの文字は,一つ目の実引数の絶対値を表現する。絶対値がゼロの場合,一つのゼロ文字 '0'('\u0030')で表現される。それ以外の場合,絶対値の先頭文字は,ゼロ文字にならない。数字として使用できるASCII文字は,次の通りとする。

0123456789abcdefghijklmnopqrstuvwxyz
これらの文字の範囲は,'\u0030' から '\u0039' まで,及び '\u0061' から '\u007a'とする。radixN とすると,このうちの最初の N 個の文字が上記の順序で基数 Nの数字として使用される。したがって,16進数(基数16)での数字は,0123456789abcdefになる。大文字にする場合は,戻り値に対して次のようにクラスString のメソッド toUpperCase (20.12.36)を呼び出す。

Integer.toString(n, 16).toUpperCase()

20.7.14 public static String toHexString(int i)

実引数を符号なし16進数(基数16)に変換し,その値を文字列として返す。

戻り値は,実引数の符号なしの絶対値を表現する。実引数が負の場合,戻り値は実引数にを加えた値になる。それ以外の場合は,実引数と同じ値を返す。

符号なしの絶対値がゼロの場合,一つのゼロ文字 '0'('\u0030')で表現される。それ以外は,符号なしの絶対値の先頭文字は,ゼロ文字にならない。16進数字として使用できる文字は,次の通りとする。

0123456789abcdef
これらの文字の範囲は,'\u0030' から '\u0039' まで,及び '\u0061' から '\u0066' までとする。大文字にする場合は,戻り値に対して次のようにクラス String のメソッド toUpperCase (20.12.36) を呼び出す。

Long.toHexString(n).toUpperCase()

20.7.15 public static String toOctalString(int i)

実引数を符号なし8進数(基数8)に変換し,その値を文字列として返す。

戻り値は,実引数の符号なしの絶対値を表現する。実引数が負の場合,戻り値は実引数にを加えた値になる。それ以外の場合は,実引数と同じ値を返す。

符号なしの絶対値がゼロの場合,一つのゼロ文字 '0'('\u0030')で表現される。それ以外は,符号なしの絶対値の先頭文字は,ゼロ文字にならない。8進数字として使用できる文字は,次の通りとする。

01234567
これらの文字の範囲は,'\u0030' から '\u0037' までとする。

20.7.16 public static String toBinaryString(int i)

実引数を符号なし2進数(基数2)に変換し,その値を文字列として返す。

戻り値は,実引数の符号なしの絶対値を表現する。実引数が負の場合,戻り値は実引数にを加えた値になる。それ以外の場合は,実引数と同じ値を返す。

符号なしの絶対値がゼロの場合,一つのゼロ文字 '0'('\u0030')で表現される。それ以外は,符号なしの絶対値の先頭文字は,ゼロ文字にならない。2進数字として使用できる文字は,'0'('\u0030')と '1'('\u0031')とする。

20.7.17 public static int parseInt(String s)
throws NumberFormatException

実引数は,符号付き10進整数を表現していると解釈される。文字列内の文字はすべて10進数字であることが必要である。ただし,先頭文字が負の値を示す '-'('\u002d')になる場合もある。この結果として取得された整数値を返す。これは,実引数を二つ取るメソッド parseInt(20.7.18)の実引数として,この実引数と基数 10 を渡すのと同じとする。

20.7.18 public static int parseInt(String s, int radix)
throws NumberFormatException

一つ目の実引数は,二つ目の実引数で指定された整数を基数とする符号付き整数として解釈される。文字列内の文字は,すべて指定された基数にとって有効な文字であることが必要である(有効な文字かどうかは,Character.digit(20.5.23)が負でない値を返すかどうかで判定できる)。ただし,先頭文字が負の値を示す '-'('\u002d')になる場合もある。この結果として取得された整数値を返す。

次のいずれかの場合,型 NumberFormatException の例外が投げられる。

次に例を挙げる。

parseInt("0", 10) は 0 を返す
parseInt("473", 10) は 473 を返す
parseInt("-0", 10) は 0 を返す
parseInt("-FF", 16) は -255 を返す
parseInt("1100110", 2) は 102 を返す
parseInt("2147483647", 10) は 2147483647 を返す
parseInt("-2147483648", 10) は -2147483648 を返す
parseInt("2147483648", 10) は a NumberFormatException を投げる
parseInt("99", 8) は a NumberFormatException を投げる
parseInt("Kona", 10) は a NumberFormatException を投げる
parseInt("Kona", 27) は 411787 を返す

20.7.19 public static Integer valueOf(String s)
throws NumberFormatException

実引数は,符号付き10進整数を表現していると解釈される。これは,実引数を一つ取るメソッドparseInt(20.7.17)に,この実引数を渡す場合と同じとする。文字列で指定された整数値を表すIntegerオブジェクトを返す。

言い換えれば,このメソッドは,次の式の値に等しいIntegerオブジェクト を返す。

new Integer(Integer.parseInt(s))

20.7.20 public static Integer valueOf(String s, int radix)
throws NumberFormatException

一つ目の実引数は,二つ目の実引数で指定された整数を基数とする符号付き整数として解釈される。これは,実引数を二つ取るメソッド parseInt(20.7.18)に,この実引数を渡す場合と同じとする。文字列で指定された整数値を表すIntegerオブジェクト を返す。

言い換えれば,このメソッドは,次の式の値に等しいIntegerオブジェクト を返す。

new Integer(Integer.parseInt(s, radix))

20.7.21 public static Integer getInteger(String nm)

実引数は,メソッド System.getProperty(20.18.9)で取得されるものと同じシステム属性の名前として扱われる。この属性の文字列値は,整数値として解釈され,この値を表現するIntegerオブジェクトを返す。指定した名前の属性がない場合,又は属性の値が数値として正しい書式でない場合,null を返す。

言い換えれば,このメソッドは,次の式の値に等しいIntegerオブジェクト を返す。

getInteger(nm, null)

20.7.22 public static Integer getInteger(String nm, int val)

一つ目の実引数は,メソッド System.getProperty(20.18.9)で取得されるものと同じシステム属性の名前として扱われる。この属性の文字列値は,整数値として解釈され,この値を表現するIntegerオブジェクト を返す。属性の値が数値として正しい書式でない場合,二つ目の実引数の値を表現するIntegerオブジェクト を返す。

言い換えれば,このメソッドは,次の式の値に等しいIntegerオブジェクト を返す。

getInteger(nm, new Integer(val))
しかし,実際には,次のように実装することもある。

Integer result = getInteger(nm, null);
return (result == null) ? new Integer(val) : result;
このように実装することで,デフォルト値が必要ない場合に不要なIntegerオブジェクト の割り当てを回避できる。

20.7.23 public static Integer getInteger(String nm, Integer val)

一つ目の実引数は,メソッド System.getProperty( 20.18.9)で取得されるものと同じシステム属性の名前として扱われる。この属性の文字列値は,整数値として解釈され,この値を表現するIntegerオブジェクト を返す。

二つ目の実引数は,デフォルト値として使われる。指定された名前の属性が存在しない場合,又は属性の値が数値として正しい書式ではない場合,二つ目の実引数を返す。

20.8 クラス java.lang.Long

public final class Long extends Number {
    public static final long MIN_VALUE =0x8000000000000000L;
    public static final long MAX_VALUE =0x7fffffffffffffffL;
    public Long(long value);
    public Long(String s)
throws NumberFormatException; public String toString(); public boolean equals(Object obj); public int hashCode(); public int intValue(); public long longValue(); public float floatValue(); public double doubleValue(); public static String toString(long i); public static String toString(long i, int radix); public static String toHexString(long i); public static String toOctalString(long i); public static Strin toBinaryString(long i); public static long parseLong(String s)
throws NumberFormatException; public static long parseLong(String s, int radix)
throws NumberFormatException; public static Long valueOf(Strings)
throws NumberFormatException; public static Long valueOf(String s, int radix)
throws NumberFormatException; public static Long getLong(String nm); public static Long getLong(String nm, long val); public static Long getLong(String nm, Long val); }

20.8.1 public static final long MIN_VALUE = 0x8000000000000000L;

このフィールドの定数値は,型 long の最小値とする。

20.8.2 public static final long MAX_VALUE = 0x7fffffffffffffffL;

このフィールドの定数値は,型 long の最大値とする。

20.8.3 public Long(long value)

このコンストラクタは,Longオブジェクトを新しく作成し,実引数に指定されたプリミティブ値で初期化する。

20.8.4 public Long(String s) throws NumberFormatException

このコンストラクタは,Longオブジェクト を新しく作成し,それを10進表記の文字列によって表現された整数で初期化する。文字列は,メソッド parseLong(20.8.17)が基数10に対して行うのと同じ方法で long 値に変換される。

20.8.5 public String toString()

このLongオブジェクト によって表現される型 long整数値を符号付き10進表現に変換し,その値を文字列として返す。これは,実引数を一つ取るメソッド toString(20.7.12)の実引数として,この整数値を渡すのと同じとする。

このメソッドは,Object のメソッド toString (20.1.2)を上書きする。

20.8.6 public boolean equals(Object obj)

実引数が null でなく,このLongオブジェクト と同じ long 値を表現するLongオブジェクト である場合に,またその場合にだけ,true を返す。

オブジェクトのメソッド equals (20.1.3)を上書きする。

20.8.7 public int hashCode()

このLongオブジェクト によって表現されるプリミティブな long 値の上位半分と下位半分の排他的論理和を返す。つまり,ハッシュコードは,次の式の値になる。

(int)(this.longValue()^(this.longValue()>>>32))
オブジェクトのメソッド hashCode (20.1.4)を上書きする。

20.8.8 public int intValue()

このLongオブジェクト によって表現される long 値が型 int に変換 (5.1.3)され,その変換結果を返す。

Number のメソッド intValue (20.6.1)を上書きする。

20.8.9 public long longValue()

このLongオブジェクト によって表現される long 値を返す。

Number のメソッド longValue(20.6.2)を上書きする。

20.8.10 public float floatValue()

このLongオブジェクト によって表現される long 値が,型 float に変換 (5.1.2)され,その変換結果を返す。

Number のメソッド floatValue (20.6.3)を上書きする。

20.8.11 public double doubleValue()

このLongオブジェクト によって表現される long 値が,型 double に変換 (5.1.2)され,その変換結果を返す。

Number のメソッド doubleValue (20.6.4)を上書きする。

20.8.12 public static String toString(long i)

実引数を符号付き10進数表現に変換し,文字列として返す。これは,実引数を二つ取るメソッド toString(20.8.13)の実引数として,この実引数と基数 10 を渡すのと同じとする。

20.8.13 public static String toString(long i, int radix)

一つ目の実引数の整数値を2番目の実引数で指定された整数を基数とする数値の符号付き表現に変換し,その値を文字列として返す。

radixCharacter.MIN_RADIX (20.5.3)より小さいか,Character.MAX_RADIX (20.5.4)より大きい場合,代わりに 10 が基数として使用される。

一つ目の実引数が負の場合,戻り値の最初の文字は '-' ('\u002d')になる。一つ目の実引数が負でない場合,戻り値に符号は付かない。

戻り値から符号を取った残りの文字は,一つ目の実引数の絶対値を表現する。絶対値がゼロの場合,一つのゼロ文字'0'('\u0030')で表現される。それ以外の場合,絶対値の先頭文字は,ゼロ文字にならない。数字として使用できるASCII文字は,次の通りとする。

0123456789abcdefghijklmnopqrstuvwxyz
これらの文字の範囲は,'\u0030' から '\u0039' まで,及び '\u0061' から '\u007a' とする。radixN とすると,このうちの最初の N 個の文字が上記の順序で基数 N の数字として使用される。したがって,16進数(基数16)での数字は,0123456789abcdef になる。大文字にする場合は,戻り値に対して次のようにクラス String のメソッド toUpperCase (20.12.36)を呼び出す。

Long.toString(n, 16).toUpperCase()

20.8.14 public static String toHexString(long i)

実引数を符号なし16進数(基数16)に変換し,その値を文字列として返す。

戻り値は,実引数の符号なしの絶対値を表現する。実引数が負の場合,戻り値は実引数にを加えた値になる。それ以外の場合は,実引数と同じ値を返す。

符号なしの絶対値がゼロの場合,一つのゼロ文字 '0'('\u0030')で表現される。それ以外は,符号なしの絶対値の先頭文字は,ゼロ文字にならない。16進数字として使用できる文字は,次の通りとする。

0123456789abcdef
これらの文字の範囲は,'\u0030' から '\u0039' まで,及び '\u0061' から '\u0066' までとする。大文字にする場合は,戻り値に対して次のようにクラス String のメソッド toUpperCase(20.12.36) を呼び出す。

Long.toHexString(n).toUpperCase()

20.8.15 public static String toOctalString(long i)

実引数を符号なし8進数(基数8)に変換し,その値を文字列として返す。

戻り値は,実引数の符号なしの絶対値を表現する。実引数が負の場合,戻り値は実引数にを加えた値になる。それ以外の場合は,実引数と同じ値を返す。

符号なしの絶対値がゼロの場合,一つのゼロ文字 '0'('\u0030')で表現される。それ以外は,符号なしの絶対値の先頭文字は,ゼロ文字にならない。8進数字として使用できる文字は,次の通りとする。

01234567
これらの文字の範囲は,'\u0030' から '\u0037' までとする。

20.8.16 public static String toBinaryString(long i)

実引数を符号なし2進数(基数2)に変換し,その値を文字列として返す。

戻り値は,実引数の符号なしの絶対値を表現する。実引数が負の場合,戻り値は実引数に を加えた値になる。それ以外の場合は,実引数と同じ値を返す。

符号なしの絶対値がゼロの場合,一つのゼロ文字'0'('\u0030')で表現される。それ以外は,符号なしの絶対値の先頭文字は,ゼロ文字にならない。2進数字として使用できる文字は,'0'('\u0030')と '1'('\u0031')とする。

20.8.17 public static long parseLong(String s)
throws NumberFormatException

実引数は,符号付き10進整数を表現していると解釈される。文字列内の文字はすべて10進数字であることが必要である。ただし,先頭文字が負の値を示す '-'('\u002d')になる場合もある。この結果として取得された整数値を返す。これは,実引数を二つ取るメソッドparseInt(20.8.18)の実引数として,この実引数と基数 10 を渡すのと同じとする。

Javaのソースコード(3.10.1)の場合とは異なり,L又はlを文字列の最後に型指示子として使うことはできない。

20.8.18 public static long parseLong(String s, int radix)
throws NumberFormatException

一つ目の実引数は,二つ目の実引数で指定された整数を基数とする符号付き整数として解釈される。文字列内の文字は,すべて指定された基数にとって有効な文字であることが必要である(有効な文字かどうかは,Character.digit (20.5.23)が負でない値を返すかどうかで判定できる)。ただし,先頭文字が負の値を示す'-'('\u002d')になる場合もある。この結果として取得された long 値を返す。

Javaのソースコード(3.10.1)の場合とは異なり,L又はlを文字列の最後に型指示子として使うことはできない。ただし,基数が 22 以上の場合に数字として L 又は l が使われる場合を除く。

次のいずれかの場合,型 NumberFormatExceptionの例外が投げられる。

次に例を挙げる。

parseLong("0", 10) は 0L を返す
parseLong("473", 10) は 473L を返す
parseLong("-0", 10) は 0L を返す
parseLong("-FF", 16) は -255L を返す
parseLong("1100110", 2) は 102L を返す
parseLong("99", 8) は a NumberFormatException を投げる
parseLong("Hazelnut", 10) は a NumberFormatExceptionを投げる
parseLong("Hazelnut", 36) は 1356099454469L を返す

20.8.19 public static Long valueOf(String s)
throws NumberFormatException

実引数は,符号付き10進整数を表現していると解釈される。これは,実引数を一つ取るメソッド parseLong (20.8.17)に,この実引数を渡す場合と同じとする。文字列で指定された整数値を表すLongオブジェクト を返す。

言い換えれば,このメソッドは,次の式の値に等しいLongオブジェクト を返す。

new Long(Long.parseLong(s))

20.8.20 public static Long valueOf(String s, int radix)
throws NumberFormatException

一つ目の実引数は,二つ目の実引数で指定された整数を基数とする符号付き整数として解釈される。これは,実引数を二つ取るメソッドparseLong (20.8.18)に,この実引数を渡す場合と同じとする。文字列で指定された整数値を表すLongオブジェクト を返す。

言い換えれば,このメソッドは,次の式の値に等しいLongオブジェクト を返す。

new Long(Long.parseLong(s, radix))

20.8.21 public static Long getLong(String nm)

実引数は,メソッド System.getProperty( 20.18.9)で取得されるものと同じシステム属性の名前として扱われる。この属性の文字列値は,整数値として解釈され,この値を表現するLongオブジェクトを返す。指定した名前の属性がない場合,又は属性の値が数値として正しい書式でない場合,nullを返す。

言い換えれば,このメソッドは,次の式の値に等しいLongオブジェクト を返す。

getLong(nm, null)

20.8.22 public static Long getLong(String nm, long val)

一つ目の実引数は,メソッド System.getProperty(20.18.9)で取得されるものと同じシステム属性の名前として扱われる。この属性の文字列値は,整数値として解釈され,この値を表現するオブジェクト Long を返す。属性の値が数値として正しい書式でない場合,二つ目の実引数の値を表現するLongオブジェクト を返す。

言い換えれば,このメソッドは,次の式の値に等しいオブジェクト Long を返す。

getLong(nm, new Long(val))
しかし,実際には,次のように実装することもある。

Long result = getLong(nm, null);
return (result == null) ? new Long(val) : result;
このように実装することで,デフォルト値が必要ない場合に不要なオブジェクト Long の割り当てを回避できる。

20.8.23 public static Long getLong(String nm, Long val)

一つ目の実引数は,メソッド System.getProperty(20.18.9)で取得されるものと同じシステム属性の名前として扱われる。この属性の文字列値は,整数値として解釈され,この値を表現するLongオブジェクト を返す。

いずれの場合でも,Javaのソースコード(3.10.1)の場合とは異なり,L 又は l を文字列の最後に型指示子として使うことはできない。

二つ目の実引数は,デフォルト値として使われる。指定された名前の属性が存在しない場合,又は属性の値が数値として正しい書式ではない場合,二つ目の実引数を返す。

20.9 クラス java.lang.Float

public final class Float extends Number {
    public static final float MIN_VALUE = 1.4e-45f;
    public static final float MAX_VALUE = 3.4028235e+38f;
    public static final float NEGATIVE_INFINITY = -1.0f/0.0f;
    public static final float POSITIVE_INFINITY = 1.0f/0.0f;
    public static final float NaN = 0.0f/0.0f;
    public Float(float value);
    public Float(double value);
    public Float(String s)
        throws NumberFormatException;
    public String toString();
    public boolean equals(Object obj);
    public int hashCode();
    public int intValue();
    public long longValue();
    public float floatValue();
    public double doubleValue();
    public static String toString(float f);
    public static Float valueOf(String s)
        throws NullPointerException, NumberFormatException;
    public boolean isNaN();
    public static boolean isNaN(float v);
    public boolean isInfinite();
    public static boolean isInfinite(float v);
    public static int floatToIntBits(float value);
    public static float intBitsToFloat(int bits);
}

20.9.1 public static final float MIN_VALUE = 1.4e-45f;

このフィールドの定数値は,型 floatのゼロ以外の正の最小値とする。この値は,Float.intBitsToFloat(0x1)が返す値と等しい。

20.9.2 public static final float MAX_VALUE = 3.4028235e+38f;

このフィールドの定数値は,型 floatの正の有限な最大値とする。この値は,Float.intBitsToFloat(0x7f7fffff)が返す値と等しい。

20.9.3 public static final float NEGATIVE_INFINITY =
-1.0f/0.0f;

このフィールドの定数値は,型 floatの負の無限大とする。この値は,Float.intBitsToFloat(0xff800000)が返す値と等しい。

20.9.4 public static final float POSITIVE_INFINITY =
1.0f/0.0f;

このフィールドの定数値は,型 floatの正の無限大とする。この値は,Float.intBitsToFloat(0x7f800000)が返す値と等しい。

20.9.5 public static final float NaN = 0.0f/0.0f;

このフィールドの定数値は,型 floatのNaN値とする。この値は,Float.intBitsToFloat(0x7fc00000)が返す値と等しい。

20.9.6 public Float(float value)

このコンストラクタは,Floatオブジェクトを新しく作成し,実引数に指定されたプリミティブ値で初期化する。

20.9.7 public Float(double value)

このコンストラクタは,Floatオブジェクトを新しく作成し,実引数を型 double から型 floatに下位変換(5.1.3)した値でそれを初期化する。

20.9.8 public Float(String s) throws NumberFormatException

このコンストラクタは,Floatオブジェクトを新しく作成し,文字列で表現される型 float の浮動小数点値で初期化する。文字列は,メソッド valueOf(20.9.17)と同じ方法で float 値に変換される。

20.9.9 public String toString()

このFloatオブジェクト によって表現されるプリミティブなfloat 値は,実引数を一つ取るメソッド toString (20.9.16)と全く同じように,文字列に変換される。

オブジェクトのメソッド toString を上書きする(20.1.2)

20.9.10 public boolean equals(Object obj)

実引数が null でなく,このFloatオブジェクト と同じfloat値を表現する場合に,またその場合にだけ,trueを返す。ここでは,二つの float 値をそれぞれメソッドfloatToIntBits(20.9.22)に渡し,同じ int 値が返された場合に限り,二つの float値が同じだと見なす。左右のオペランドがNaNの場合,== 演算子は false を返すが,このメソッド equalsは,このFloatオブジェクトと実引数の両方がNaNを表現している場合,true を返す。一方,片方のオペランドが正のゼロで,もう片方が負のゼロである場合,== 演算子は true を返すが,このFloatオブジェクト と実引数が,それぞれ符号の異なるゼロを表現している場合,このメソッド equalsfalseを返す。この仕様により,ハッシュテーブルが正しく動作するようになる。

オブジェクトのメソッド equals(20.1.3)を上書きする。

20.9.11 public int hashCode()

このFloatオブジェクト によって表現される型 float のプリミティブ値の整数ビット表現を返す。この値は,メソッド floatToIntBits(20.9.22)と同じ方法で取得される。

Object のメソッド hashCode(20.1.4)を上書きする。

20.9.12 public int intValue()

このFloatオブジェクト によって表現される float 値が,型 int に変換(5.1.3)され,その変換結果を返す。

Number のメソッド intValue(20.6.1)を上書きする。

20.9.13 public long longValue()

このFloatオブジェクト によって表現される float値が,型 long に変換(5.1.3)され,その変換結果を返す。

Number のメソッド longValue(20.6.2)を上書きする。

20.9.14 public float floatValue()

このFloatオブジェクト によって表現される float値を返す

Number のメソッド floatValue(20.6.3)を上書きする。

20.9.15 public double doubleValue()

このFloatオブジェクト によって表現される float値が,型 double に変換(5.1.2)され,その変換結果を返す。

Number のメソッド doubleValue(20.6.4)を上書きする。

20.9.16 public static String toString(float f)

実引数は,以下に示す判読可能な文字列形式に変換される。すべての文字及び文字列は,ASCII文字とする。

ma の小数部は,何桁まで出力する必要があるだろうか。少なくとも1桁は小数部を表現する必要がある。そして,それ以上の場合は,その実引数の値を隣接する型 float の値から区別できるだけの桁数が必要である。つまり,このメソッドによってゼロ以外の有限の実引数 f に対して生成される10進表現の正確な値を x とすると,fx に最も近い float 値になる。二つの float 値が同等に x に近い場合,f はその有効数部の最上位ビットが 0 であるいずれかの値になる。

[メソッド toString は,バージョン1.1のJavaで導入予定である。]

20.9.17 public static Float valueOf(String s)
throws NullPointerException, NumberFormatException

文字列 s は,浮動小数点値表現として解釈され,その値を表すオブジェクト Float が作成され,それを返す。

snull である場合,NullPointerException が投げられる。

s の前後の空白類(20.5.19)は,無視される。s の残りの部分は,字句文法規則に記述された FloatValue を構成する必要がある。

    FloatValue:
        Signopt Digits . Digitsopt ExponentPartopt
        Signopt . Digits ExponentPartopt
SignDigits,及び ExponentPart は,3.10.2で定義されている。sFloatValue の形式を持たなかった場合,NumberFormatException が投げられる。それ以外の場合は,通常の“コンピュータ用科学表記”による正確な10進値を表現していると見なされ,“無限に正確な”2進値に概念上変換される。その後, IEEE 754浮動小数点演算の通常の丸め規則に従って型 float に丸められる。最後に,この float 値を表すクラス Float のオブジェクトが新しく作成される。

Javaのソースコード(3.10.1)の場合と異なり, F又はfを型指示子を文字列 s 中に使うことはできない。

20.9.18 public boolean isNaN()

このFloatオブジェクト によって表現される値がNaNである場合に,またその場合にだけ,true を返す。

20.9.19 public static boolean isNaN(float v)

実引数の値がNaNである場合に,またその場合にだけ,true を返す。

20.9.20 public boolean isInfinite()

このFloatオブジェクトによって表現される値が正又は負の無限大である場合に,またその場合にだけ,trueを返す。

20.9.21 public static boolean isInfinite(float v)

実引数の値が正又は負の無限大である場合に,またその場合にだけ,true を返す。

20.9.22 public static int floatToIntBits(float value)

浮動小数点の実引数を,IEEE 754の“単精度”ビットレイアウト表現に変換したものを返す。

いずれの場合も,返された整数値をメソッド intBitsToFloat(20.9.23)に渡すと,floatToIntBits に与えた実引数と同じ浮動小数点値を返す。

20.9.23 public static float intBitsToFloat(int bits)

実引数は,IEEE 754の“単精度”ビットレイアウト表現に変換したものであると見なされ,この値を返す。

int s = ((bits >> 31) == 0) ? 1 : -1;
int e = ((bits >> 23) & 0xff);
int m = (e == 0) ?
        (bits & 0x7fffff) << 1 :
        (bits & 0x7fffff) | 0x800000;
このとき,返される浮動小数点値は,数式 の値と等しくなる。

20.10 クラス java.lang.Double

public final class Double extends Number {
    public static final double MIN_VALUE =
5e-324; public static final double MAX_VALUE = 1.7976931348623157e+308; public static final double NEGATIVE_INFINITY = -1.0/0.0; public static final double POSITIVE_INFINITY = 1.0/0.0; public static final double NaN = 0.0/0.0; public Double(double value); public Double(String s)
throws NumberFormatException; public String toString(); public boolean equals(Object obj); public int hashCode(); public int intValue(); public long longValue(); public float floatValue(); public double doubleValue(); public static String toString(double d); public static Double valueOf(String s)
throws NullPointerException, NumberFormatException; public boolean isNaN(); public static boolean isNaN(double v); public boolean isInfinite(); public static boolean isInfinite(double v); public static long doubleToLongBits(double value); public static double longBitsToDouble(long bits); }

20.10.1 public static final double MIN_VALUE = 5e-324;

このフィールドの定数値は,型 double の正のゼロ以外の最小値とする。 この値は,Double.Double.longBitsToDouble(0x1L) が返す値と等しい。

20.10.2 public static final double MAX_VALUE = 1.7976931348623157e+308;

このフィールドの定数値は,型 double の正のゼロ以外の有限な最大値とする。この値は,次の式が返す値と等しい。

Double.longBitsToDouble(0x7fefffffffffffffL)

20.10.3 public static final double NEGATIVE_INFINITY = -1.0/0.0;

このフィールドの定数値は,型 double の負の無限大とする。この値は, Double.longBitsToDouble(0xfff0000000000000L) が返す値と等しい。

20.10.4 public static final double POSITIVE_INFINITY = 1.0/0.0;

このフィールドの定数値は,型 double の正の無限大とする。この値は,Double.longBitsToDouble(0x7ff0000000000000L) が返す値と等しい。

20.10.5 public static final double NaN = 0.0/0.0;

このフィールドの定数値は,型 double のNaN値とする。この値は,Double.longBitsToDouble(0x7ff8000000000000L) が返す値と等しい。

20.10.6 public Double(double value)

このコンストラクタは,Doubleオブジェクト を新しく作成し,実引数に指定されたプリミティブ値で初期化する。

20.10.7 public Double(String s)
throws NumberFormatException

このコンストラクタは,Doubleオブジェクト を新しく作成し,実引数に与えられた文字列によって表現される型 double の浮動小数点値で初期化する。文字列は,メソッド valueOf(20.9.17)と同じ方法で double 値に変換される。

20.10.8 public String toString()

このDoubleオブジェクト によって表現されるプリミティブな double 値は,実引数を一つ取るメソッド toString(20.10.15)と同じ方法で文字列に変換される。

オブジェクトのメソッド toString を上書きする(20.1.2)

20.10.9 public boolean equals(Object obj)

実引数が null でなく,このDoubleオブジェクト と同じ double 値を表現する場合に,またその場合にだけ,true を返す。ここでは,二つの double 値をそれぞれメソッド doubleToLongBits(20.10.21)に渡し,同じ long 値が返された場合に限り,二つの double 値が同じだと見なす。左右のオペランドがNaNの場合,== 演算子は false を返すが,このメソッド equals は,このDoubleオブジェクト と実引数の両方がNaNを表現している場合,true を返す。一方,片方のオペランドが正のゼロで,もう片方が負のゼロである場合,== 演算子は true を返すが,このDoubleオブジェクト と実引数が,それぞれ符号の異なるゼロを表現している場合,このメソッド equalsfalse を返す。一方,片方のオペランドが正のゼロで,もう片方が負のゼロである場合,== 演算子は true を返すが,このDoubleオブジェクト と実引数が,それぞれ符号の異なるゼロを表現している場合,このメソッド equalsfalse を返す。この仕様により,ハッシュテーブルを正しく操作できる。

オブジェクトのメソッド equals(20.1.3)を上書きする。

20.10.10 public int hashCode()

このDoubleオブジェクト によって表現されるプリミティブな double 値のlong整数ビット表現の上位ビットと下位ビットについて,メソッド doubleToLongBits(20.10.21)と同じ方法によって得られる排他的論理和を返す。つまり,ハッシュコード値は,次の式の値になる。

(int)(v^(v>>>32))
ここで,v は次の式の値とする。

long v = Double.doubleToLongBits(this.longValue());
オブジェクトのメソッド hashCode (20.1.4)を上書きする。

20.10.11 public int intValue()

このDoubleオブジェクト によって表現される double 値が,型 int に変換(5.1.3)され,その変換結果を返す。

Number のメソッド intValue(20.6.1)を上書きする。

20.10.12 public long longValue()

このDoubleオブジェクト によって表現される double 値が,型 long に変換(5.1.3)され,その変換結果を返す。

Number のメソッド longValue(20.6.2)を上書きする。

20.10.13 public float floatValue()

このDoubleオブジェクト によって表現される double 値が,型 float に変換(5.1.3)され,その変換結果を返す。

Number のメソッド floatValue(20.6.3)を上書きする。

20.10.14 public double doubleValue()

このDoubleオブジェクト によって表現される double 値を返す。

Number のメソッド doubleValue(20.6.4)を上書きする。

20.10.15 public static String toString(double d)

実引数は,以下に示す判読可能な文字列形式に変換される。すべての文字及び文字列は,ASCII文字とする。

ma の小数部は,何桁まで出力する必要があるだろうか。少なくとも1桁は小数部を表現する必要がある。そして,それ以上の場合は,その実引数の値を隣接する型 doubleの値から区別できるだけの桁数が必要である。つまり,このメソッドによってゼロ以外の有限の実引数 d に対して生成される10進表現の正確な値を x とすると,dx に最も近い double 値になる。二つの double 値が同等にxに近い場合,d はその有効数部の最上位ビットが 0 であるいずれかの値になる。

[メソッド toStringは,バージョン1.1のJavaで導入予定である。]

20.10.16 public static Double valueOf(String s)
throws NullPointerException, NumberFormatException

文字列 s は,浮動小数点値表現として解釈され,その値を表すDoubleオブジェクト が作成され,それを返す。

snullである場合,NullPointerException が投げられる。

s の前後の空白類(20.5.19)は,無視される。s の残りの部分は,字句文法規則に記述された FloatValue を構成する必要がある。

    FloatValue:
        Signopt Digits . Digitsopt ExponentPartopt
        Signopt . Digits ExponentPartopt
SignDigits,及び ExponentPart は,3.10.2で定義されているものとする。s がFloatValueの形式を持たなかった場合,NumberFormatException が投げられる。それ以外の場合は,通常の“コンピュータ用科学表記”による正確な10進値を表現していると見なされ,“無限に正確な”2進値に概念上変換される。その後,IEEE 754浮動小数点演算の通常の丸め規則に従って型 double に丸められる。最後に,この double 値を表すクラス Double のオブジェクトが新しく作成される。

Javaのソースコード(3.10.1)の場合と異なり,D 又は d を型指示子を文字列 s 中に使うことはできない。

20.10.17 public boolean isNaN()

このDoubleオブジェクト によって表現される値がNaNである場合に,またその場合にだけ,true を返す。

20.10.18 public static boolean isNaN(double v)

実引数の値がNaNである場合に,またその場合にだけ,true を返す。

20.10.19 public boolean isInfinite()

このDoubleオブジェクト で表現される値が,正又は負の無限大である場合に,またその場合にだけ,true を返す。

20.10.20 public static boolean isInfinite(double v)

実引数の値が正又は負の無限大である場合に,またその場合にだけ,true を返す。

20.10.21 public static long doubleToLongBits(double value)

浮動小数点の実引数を,IEEE 754の“倍精度”ビットレイアウト表現に変換したものを返す。

いずれの場合も,返された整数値をメソッド longBitsToDouble (20.10.22) に渡すと,doubleToLongBits に与えた実引数と同じ浮動小数点値を返す。

20.10.22 public static double longBitsToDouble(long bits)

実引数が,IEEE 754の“倍精度”ビットレイアウト表現に従って,浮動小数点表現であるとみなされ,その浮動小数点値が返されれる。

int s = ((bits >> 63) == 0) ? 1 : -1;
int e = (int)((bits >> 52) & 0x7ffL);
long m = (e == 0) ?
    (bits & 0xfffffffffffffL) << 1 :
    (bits & 0xfffffffffffffL) | 0x10000000000000L;
このとき,返される浮動小数点値は,数式の値と等しくなる。

20.11 クラス java.lang.Math

クラスMath は、役に立つ基本数値定数とメソッドがある。

public final class Math {
    public static final double E = 2.7182818284590452354;
    public static final double PI = 3.14159265358979323846;
    public static double sin(double a);
    public static double cos(double a);
    public static double tan(double a);
    public static double asin(double a);
    public static double acos(double a);
    public static double atan(double a);
    public static double atan2(double a, double b);
    public static double exp(double a);
    public static double log(double a);
    public static double sqrt(double a);
    public static double pow(double a, double b);
    public static double IEEEremainder(double f1, double f2);
    public static double ceil(double a);
    public static double floor(double a);
    public static double rint(double a);
    public static int round(float a);
    public static long round(double a);
    public static double random();
    public static int abs(int a);
    public static long abs(long a);
    public static float abs(float a);
    public static double abs(double a);
    public static int min(int a, int b);
    public static long min(long a, long b);
    public static float min(float a, float b);
    public static double min(double a, double b);
    public static int max(int a, int b);
    public static long max(long a, long b);
    public static float max(float a, float b);
    public static double max(double a, double b);
}
Javaプログラムの移植性を保つために,このパッケージの大半の数値関数の仕様では,特定の公開されたアルゴリズムと同じ結果が得られることが必要である。これらのアルゴリズムは,よく知られたネットワークライブラリ netlib から fdlibm (“Freely Distributable Math Library”) パッケージとして入手できる。これらのアルゴリズムはCプログラミング言語でコーディングされているが,すべての演算がJava の実行順序で実行され,すべての浮動小数点演算が Javaの浮動小数点代数規則に従っていると理解されたい。

Java数学ライブラリは,1995年1月4日版の fdlibm に基づいて定義されている。ある関数について fdlibm で複数の定義をしている場合(acosなど),“IEEE754コア関数”版が使用されている(これは,文字 e で始まるファイルに入っている)。

これらの関数で使用するアルゴリズムの完全な記述は,この仕様書の今後のバージョンで行なう。

20.11.1 public static final double E = 2.7182818284590452354;

このフィールドの定数値は,自然対数の底 e に最も近い double 値である。

20.11.2 public static final double PI = 3.14159265358979323846;

このフィールドの定数値は,円周率に最も近い double 値である。

20.11.3 public static double sin(double a)

このメソッドは,fdlibm(本節序文参照)に公開されている sin アルゴリズムを使用して,実引数のサインの近似値を計算する。

次は,特別な場合である。

20.11.4 public static double cos(double a)

このメソッドは,fdlibm(本節序文参照)に公開されている cos アルゴリズムを使用して,実引数のコサインの近似値を計算する。

次は,特別な場合である。

20.11.5 public static double tan(double a)

このメソッドは,fdlibm(本節序文参照)に公開されている tan アルゴリズムを使用して,実引数のタンジェントの近似値を計算する。

次は,特別な場合である。

20.11.6 public static double asin(double a)

このメソッドは,fdlibm(本節序文参照)に公開されている asin アルゴリズムを使用して,実引数のアークサインの近似値を計算する。

次は,特別な場合である。

20.11.7 public static double acos(double a)

このメソッドは,fdlibm(本節序文参照)に公開されている acos アルゴリズムを使用して,実引数のアークコサインの近似値を計算する。

次は,特別な場合である。

20.11.8 public static double atan(double a)

このメソッドは,fdlibm(本節序文参照)に公開されている atan アルゴリズムを使用して,実引数のアークタンジェントの近似値を計算する。

次は,特別な場合である。

20.11.9 public static double atan2(double y, double x)

このメソッドは,fdlibm に公開されているtan2アルゴリズムを使用して,二つの実引数の商のアークタンジェントの近似値を計算する。

次は,特別な場合である。

20.11.10 public static double exp(double a)

このメソッドは,fdlibm(本節序文参照)に公開されているexpアルゴリズムを使用して,実引数の指数関数の近似値(自然対数の底 e(20.11.1)を実引数で累乗)を計算する。

次は,特別な場合である。

20.11.11 public static double log(double a)

このメソッドは,fdlibm(本節序文参照)に公開されている log アルゴリズムを使用して,実引数の自然対数の近似値を計算する。

次は,特別な場合である。

20.11.12 public static double sqrt(double a)

このメソッドは,実引数の平方根の近似値を計算する。

次は,特別な場合である。

それ以外の場合は,実引数の値の正確な平行根に最も近い double 値を返す。

20.11.13 public static double pow(double a, double b)

このメソッドは,fdlibm(本節序文参照)に公開されている pow アルゴリズムを使用して,最初の実引数を 2 番目の実引数で累乗した値の近似値を計算する。

次は,特別な場合である。

(これまでの説明では,浮動小数点値は,その値をメソッド ceil(20.11.15)に渡した結果か,又は同じことだが,メソッドfloor (20.11.16)に渡した結果と同じになる場合に限り,整数と見なされる。値は,その値にメソッドを適用した結果が元の値と等しい場合に,またその場合にだけ,実引数を一つとるメソッドに渡した結果と同じになる。)

20.11.14 public static double IEEEremainder(double x, double y)

このメソッドは,IEEE 754規格に従って,二つの実引数の剰余を計算する。剰余の値は, と等しくなる。ここで, は正確な商 に最も近い整数でとする。二つの整数が同等に ;に近い場合,偶数の方が n になる。剰余がゼロの場合の符号は,最初の実引数の符号と同じになる。

次は,特別な場合である。

20.11.15 public static double ceil(double a)

このメソッドは,実引数以上の値を持つ最小の(負の無限大に最も近い)整数を double 値で返す。

次は,特別な場合である。

Math.ceil(x) の値は -Math.floor(-x) の値と同じとする。

20.11.16 public static double floor(double a)

このメソッドは,実引数以下の値を持つ最大の(正の無限大に最も近い)整数を double 値で返す。

次は,特別な場合である。

20.11.17 public static double rint(double a)

このメソッドは,実引数に最も近い整数を double 値で返す。整数である二つの double 値が同等に実引数の値に近い場合,偶数の方の整数を返す。

次は,特別な場合である。

20.11.18 public static int round(float a)

実引数にを加え,その小数点以下を取り,型 int にキャストした整数を返す。

言い換えれば,次の式の値と等しい結果が得られる。

(int)Math.floor(a + 0.5f)
次は,特別な場合である。

20.11.19 public static long round(double a)

このメソッドは,実引数にを加え,その小数点以下を取り,型 long にキャストした整数を返す。

言い換えれば,次の式の値と等しい結果が得られる。

(long)Math.floor(a + 0.5d)
次は,特別な場合である。

20.11.20 public static double random()

ゼロ以上でcode>1.0 より小さく,この範囲から(ほぼ)一律に選択された擬似乱数を正の符号を持つ double 値で返す。

このメソッドが初めて呼び出されるときに,次の式と同じ方法で一つの擬似乱数ジェネレータが新しく作成される。

new java.util.Random()
以降,この新しい擬似乱数ジェネレータは,このメソッドのすべての呼び出しで使用される。それ以外では,使用されない。

このメソッドは,複数のスレッドで正しく使用することができるように正しく同期化されている。ただし,多数のスレッドが高速で擬似乱数を発生する必要がある場合,各スレッドで独自の擬似乱数ジェネレータを所有すれば,競合を減らせる。

20.11.21 public static int abs(int a)

可能な場合,実引数の絶対値を返す。

実引数が負ではない場合,実引数を返す。

実引数が負の場合,実引数の符号を反転させた値を返す。実引数が Integer.MIN_VALUE (20.7.1)の値,つまり int で表現可能な最も小さい負の数値と等しい場合,実引数の値が負のまま返される。

20.11.22 public static long abs(long a)

可能な場合,実引数の絶対値を返す。

実引数が負ではない場合,実引数を返す。

実引数が負の場合,実引数の符号を反転させた値を返す。実引数が Long.MIN_VALUE (20.8.1)の値,つまり long で表現可能な最も小さい負の数値と等しい場合,実引数の値が負のまま返される。

20.11.23 public static float abs(float a)

実引数の符号を正にした値を返す。

次は,特別な場合である。

言い換えれば,戻り値は,次の式の値と等しくなる。

Float.intBitsToFloat(0x7fffffff & Float.floatToIntBits(a))
[メソッド abs についてのこの仕様は,バージョン1.1で導入される予定である。]

20.11.24 public static double abs(double a)

実引数の符号を正にした値を返す。

次は,特別な場合である。

言い換えれば,戻り値は,次の式の値と等しくなる。

Double.longBitsToDouble((Double.doubleToLongBits(a)<<1)>>>1)
[メソッド abs についてのこの仕様は,バージョン1.1で導入される予定である。]

20.11.25 public static int min(int a, int b)

二つの実引数のうちの小さい方が---つまり,Integer.MIN_VALUE (20.7.1)の値に近いほうを返す。二つの実引数が同じ値である場合,その同じ値を返す。

20.11.26 public static long min(long a, long b)

二つの実引数のうちの小さい方が---つまり,Long.MIN_VALUE (20.8.1)の値に近いほうを返す。二つの実引数が同じ値である場合,その同じ値を返す。

20.11.27 public static float min(float a, float b)

二つの実引数のうちの小さいほうが---つまり,負の無限大に近いほうを返す。二つの実引数が同じ値である場合,その同じ値を返す。

次は,特別な場合である。

[メソッド min についてのこの仕様は,バージョン1.1で導入される予定である。]

20.11.28 public static double min(double a, double b)

二つの実引数のうち小さい方が---つまり,負の無限大に近いほうを返す。二つの実引数が同じ値である場合,その同じ値を返す。

次は,特別な場合である。

[メソッド min についてのこの仕様は,バージョン1.1で導入される予定である。]

20.11.29 public static int max(int a, int b)

二つの実引数のうち大きい方が---つまり,Integer.MAX_VALUE (20.7.2)に近いほうを返す。二つの実引数が同じ値である場合,その同じ値を返す。

20.11.30 public static long max(long a, long b)

二つの実引数のうち大きい方が---つまり,Long.MAX_VALUE (20.8.2)に近いほうを返す。二つの実引数が同じ値である場合,その同じ値を返す。

20.11.31 public static float max(float a, float b)

二つの実引数のうち大きい方が---つまり,正の無限大に近いほうを返す。二つの実引数が同じ値である場合,その同じ値を返す。

次は,特別な場合である。

[メソッド max についてのこの仕様は,バージョン1.1で導入される予定である。]

20.11.32 public static double max(double a, double b)

二つの実引数のうち大きい方が---つまり,正の無限大に近いほうを返す。二つの実引数が同じ値である場合,その同じ値を返す。

次は,特別な場合である。

[メソッド max についてのこの仕様は,バージョン1.1で導入される予定である。]

20.12 クラス java.lang.String

String のオブジェクトは,一度作成すると変更できない。S型 tring のオブジェクトは,固定長の文字の並びを表現する。これに対し,クラス StringBuffer(20.13)は,変更可能な可変長の文字の並びを表現する。

クラス String には,文字列内の個々の文字の検査,文字列の比較,文字列の検索,部分文字列の抽出,文字列内のすべての文字の大文字又は小文字への変換などを行うメソッドがある。

public final class String {
    public String();
    public String(String value)
        throws NullPointerException;
    public String(StringBuffer buffer)
        throws NullPointerException;
    public String(char[] value)
        throws NullPointerException;
    public String(char[] value, int offset, int count)
        throws NullPointerException, IndexOutOfBoundsException;
    public String(byte[] ascii, int hibyte)
        throws NullPointerException;
    public String(byte[] ascii, int hibyte, int offset, int count)
        throws NullPointerException, IndexOutOfBoundsException;
    public String toString();
    public boolean equals(Object anObject);
    public int hashCode();
    public int length();
    public char charAt(int index);
    public void getChars(int srcBegin, int srcEnd, 
                          char dst[], int dstBegin)
        throws NullPointerException, IndexOutOfBoundsException;
    public void getBytes(int srcBegin, int srcEnd, 
                          byte dst[], int dstBegin)
        throws NullPointerException, IndexOutOfBoundsException;
    public char[] toCharArray();
    public boolean equalsIgnoreCase(String anotherString);
    public int compareTo(String anotherString)
        throws NullPointerException;
    public boolean regionMatches(int toffset, String other, 
                                   int ooffset, int len)
        throws NullPointerException;
    public boolean regionMatches(boolean ignoreCase, int toffset, 
                                   String other, int ooffset, int len)
        throws NullPointerException;
    public boolean startsWith(String prefix)
        throws NullPointerException;
    public boolean startsWith(String prefix, int toffset)
        throws NullPointerException;
    public boolean endsWith(String suffix)
        throws NullPointerException;
    public int indexOf(int ch);
    public int indexOf(int ch, int fromIndex);
    public int indexOf(String str)
        throws NullPointerException;
    public int indexOf(String str, int fromIndex)
        throws NullPointerException;
    public int lastIndexOf(int ch);
    public int lastIndexOf(int ch, int fromIndex);
    public int lastIndexOf(String str)
        throws NullPointerException;
    public int lastIndexOf(String str, int fromIndex)
        throws NullPointerException;
    public String substring(int beginIndex);
    public String substring(int beginIndex, int endIndex);
    public String concat(String str)
        throws NullPointerException;
    public String replace(char oldChar, char newChar);
    public String toLowerCase();
    public String toUpperCase();
    public String trim();
    public static String valueOf(Object obj);
    public static String valueOf(char[] data)
        throws NullPointerException;
    public static String valueOf(char[] data, int offset, int count)
        throws NullPointerException, IndexOutOfBoundsException;
    public static String valueOf(boolean b);
    public static String valueOf(char c);
    public static String valueOf(int i);
    public static String valueOf(long l);
    public static String valueOf(float f);
    public static String valueOf(double d);
    public String intern();
}

20.12.1 public String()

このコンストラクタはStringオブジェクト を新しく作成し,空の文字列で初期化する。

20.12.2 public String(String value)

このコンストラクタはStringオブジェクト を新しく作成し,実引数に指定された文字列で初期化する。言い換えれば,このコンストラクタで新しく作成された文字列は,実引数の文字列の複写とする。

20.12.3 public String(StringBuffer buffer)
throws NullPointerException

このコンストラクタはStringオブジェクト を新しく作成し,実引数 StringBuffer (20.13)に現在含まれている文字列で初期化する。文字列バッファの内容が複写される。これ以降,文字列バッファを変更しても,新しく作成した文字列には影響しない。

buffernull である場合,NullPointerException が投げられる。

20.12.4 public String(char[] data)
throws NullPointerException

このコンストラクタはStringオブジェクトを新しく作成し,実引数の文字配列に現在含まれている文字列で初期化する。文字配列の内容が複写される。これ以降,文字配列を変更しても,新しく作成した文字列には影響しない。

datanullの場合,NullPointerException が投げられる。

20.12.5 public String(char[] data, int offset, int count)
throws NullPointerException, IndexOutOfBoundsException

このコンストラクタはStringオブジェクトを新しく作成し,実引数の文字配列の部分配列に現在含まれている文字列で初期化する。文字配列の内容が複写される。これ以降,文字配列を変更しても,新しく作成した文字列には影響しない。実引数 offset には,部分配列の先頭文字のインデクスを指定する。実引数 countには,部分配列の長さを指定する。部分配列の内容が複写される。これ以降,文字配列を変更しても,新しく作成された文字列には影響しない。

datanull の場合,NullPointerException が投げられる。

offset が負である場合,又は count が負である場合,又は offsetcount の和が data.length より大きい場合,IndexOutOfBoundsException が投げられる。

20.12.6 public String(byte[] ascii, int hibyte)
throws NullPointerException

このコンストラクタはStringオブジェクトを新しく作成し,8ビット整数値の配列から構成される文字列で初期化する。戻り値の文字列の各文字 c は,バイト配列の対応する要素 b から次のように構成される。

c == ((hibyte & 0xff) << 8) | (b & 0xff)
asciinull の場合,NullPointerException が投げられる。

20.12.7 public String(byte[] ascii, int hibyte,
int offset, int count)
throws NullPointerException,
IndexOutOfBoundsException

このコンストラクタはStringオブジェクトを新しく作成し,8ビット整数値の配列の部分配列から構成される文字列で初期化する。実引数offset には,部分配列の先頭文字のインデクスを指定する。実引数countには,部分配列の長さを指定する。部分配列の内容が複写される。これ以降,文字配列を変更しても,新しく作成された文字列には影響しない。戻り値の文字列の各文字c は,バイト配列の対応する要素 bから次のように構成される。

c == ((hibyte & 0xff) << 8) | (b & 0xff)
asciinull の場合,NullPointerException が投げられる。

offset が負である場合,又は count が負である場合,又は offsetcount の和が data.length より大きい場合,IndexOutOfBoundsException が投げられる。

20.12.8 public String toString()

このオブジェクト(既に String になっている)への参照を返す。

このメソッドは,Object のメソッド toString(20.1.2)を上書きする。

20.12.9 public boolean equals(Object anObject)

実引数が null でなく,このStringオブジェクトと同じ文字列を表現するStringオブジェクトである場合に,またその場合にだけ,true を返す。

オブジェクトのメソッド equals(20.1.3)を上書きする。

メソッド equalsIgnoreCase(20.12.16)及びメソッド compareTo (20.12.17)もともに参照のこと。

20.12.10 public int hashCode()

オブジェクトの長さに応じて,このStringオブジェクト のハッシュコードを次のいずれかの方法で計算し,その値を返す。ここで,n を文字の並びの長さ(20.12.11) とし,をインデクス i の文字とする。

オブジェクトのメソッド hashCode を上書きする (20.1.4)

20.12.11 public int length()

このStringオブジェクト によって表現される文字列の長さを返す。

20.12.12 public char charAt(int index)
throws IndexOutOfBoundsException

このメソッドは,このStringオブジェクト によって表現される文字列から,実引数 index によって示される文字を返す。配列のインデクスと同じように,文字列の先頭の文字はインデクスは 0 で,次の文字はインデクス 1 で示される。実引数 index が負である場合,又はこの文字列の長さ (20.12.11) 以上である場合,IndexOutOfBoundsException が投げられる。

20.12.13 public void getChars(int srcBegin, int srcEnd,
char dst[], int dstBegin)
throws NullPointerException,
IndexOutOfBoundsException

このStringオブジェクト の文字を文字配列 dstに複写する。複写される先頭の文字はインデクス srcBegin で示される。複写される末尾の文字はインデクス srcEnd-1 で示される(したがって,複写される文字の総数はsrcEnd - srcBeginである)。文字は,インデクス dstBegin からインデクス dstBegin + (srcEnd - srcBegin) - 1 までの dst の部分配列に複写される。

dstnull である場合,NullPointerException が投げられる。

次のいずれかの条件が成り立つ場合,IndexOutOfBoundsException が投げられる。

20.12.14 public void getBytes(int srcBegin, int srcEnd,
byte dst[], int dstBegin)
throws NullPointerException,
IndexOutOfBoundsException

このStringオブジェクト の文字をバイト配列 dst に複写する。各バイトには,対応する文字の下位 8 ビットだけが入る。各文字の上位8ビットは複写されず,転送には関与しません。複写される先頭の文字はインデクス srcBegin で示される。複写される末尾の文字はインデクス srcEnd-1 で示される(したがって,複写される文字の総数は srcEnd-srcBegin である)。文字は,インデクス dstBegin からインデクス dstBegin+(srcEnd-srcBegin)-1 までのdstの部分配列に複写される。

dstnull である場合,NullPointerException が投げられる。

次のいずれかの条件が成り立つ場合,IndexOutOfBoundsException が投げられる。

20.12.15 public char[] toCharArray()

文字配列を新しく作成し,それを返す。配列の長さは,このオブジェクト String の長さ(20.12.11)と等しい。配列は初期化され,このオブジェクト String によって表現される文字列を含む。

20.12.16 public boolean equalsIgnoreCase(String anotherString)

実引数が nullでなく,かつ大文字小文字を区別せずに,このStringオブジェクトと同じ文字列を表現するStringオブジェクト である場合に,またその場合にだけ,true を返す。

少なくとも次のうち一つが成り立つ場合,二つの文字は,大文字小文字を区別せずに同じであると見なされる。

二つの文字列は,長さが同じで,対応する各文字が大文字小文字を区別せずに同じである場合,大文字小文字を区別せずに同じであると言える。

メソッド equals (20.12.9)もともに参照のこと。

20.12.17 public int compareTo(String anotherString)
throws NullPointerException

このStringオブジェクト によって表現される文字列を,辞書順で,実引数によって表現される文字列と比較する。このStringオブジェクトが,辞書順で実引数の文字列に先行する場合,負の整数を返す。このStringオブジェクトが,辞書順で実引数の文字列に後続する場合,正の整数を返す。文字列が等しい場合,ゼロを返す。compareToはメソッドequals(20.12.9)0 を返す場合には,ゼロを返す。

anotherStringnullである場合,NullPointerException が投げられる。

辞書順とは,次の定義による。二つの文字列が異なる場合,両方の文字列に対して有効なインデクス位置にある文字が異なるか,文字列の長さが異なるか,又はその両方とする。二つの文字列が,複数のインデクス位置で異なる場合,k をそのうちの最小のインデクスとする。位置 k にある文字の値を<演算子で比較し,小さいと判定された方の文字を含む文字列が辞書順でもう一方の文字列に先行する。この場合,compareToは位置 kにある二つの文字列の文字の値の差を返す---つまり,次の式の値を返す。

this.charAt(k)-anotherString.charAt(k)
どのインデクス位置でも文字の値に差がない場合,短い方の文字列が長い方の文字列より辞書順で先行する。この場合,compareToは,文字列の長さの差を返す。つまり,次の式の値を返す。

this.length()-anotherString.length()

20.12.18 public boolean regionMatches(int toffset,
String other, int ooffset, int len)
throws NullPointerException

このStringオブジェクト の部分文字列が,実引数 other の部分文字列と比較される。これらの部分文字列が同一の文字列を表現している場合,trueを返す。比較の対象になるこのStringオブジェクト の部分文字列は,インデクス toffset で始まり,長さがlen とする。比較の対象になる otherの部分文字列は,インデクス ooffset で始まり,長さがlenとする。次の条件の少なくとも一つが成り立つ場合,又はその場合にだけ,falseを返す。

othernullである場合,NullPointerException が投げられる。

20.12.19 public boolean regionMatches(boolean ignoreCase,
int toffset, String other, int ooffset, int len)
throws NullPointerException

このStringオブジェクト の部分文字列が,実引数 other の部分文字列と比較される。これらの部分文字列が,ignoreCasetrue である場合に,またその場合にだけ,大文字小文字を区別せずに同じ文字列を表現している場合,true を返す。比較の対象になるこのStringオブジェクト の部分文字列は,インデクス toffset で始まり,長さが len とする。比較の対象になる other の部分文字列は,インデクス ooffset で始まり,長さがlen とする。次の条件の少なくとも一つが成り立つ場合,又はその場合にだけ,false

Character.toLowerCase(this.charAt(toffset+k)) !=
    Character.toLowerCase(other.charAt(ooffset+k))
Character.toUpperCase(this.charAt(toffset+k)) !=
    Character.toUpperCase(other.charAt(ooffset+k))
othernull である場合,NullPointerException が投げられる。

20.12.20 public boolean startsWith(String prefix)
throws NullPointerException

実引数によって表現される文字列がこのStringオブジェクトで表現される文字列の先頭部分である場合,またその場合にだけ,true を返す。

prefixnull である場合,NullPointerException が投げられる。

実引数が空文字列である場合,又はメソッド equals(20.12.9)で等しいと判定された場合,true を返す。

20.12.21 public boolean startsWith(String prefix, int toffset)
throws NullPointerException

実引数によって表現される文字列がこのStringオブジェクト で表現される文字列のインデクス toffset で始まる部分文字列の先頭部分である場合,またその場合にだけ,true を返す。

prefixnull である場合,NullPointerException が投げられる。

toffset が負である場合,又はこのオブジェクト String の長さよりも大きい場合,false を返す。それ以外の場合は,次の式の値を返す。

this.subString(toffset).startsWith(prefix)

20.12.22 public boolean endsWith(String suffix)
throws NullPointerException

実引数によって表現される文字列がこのStringオブジェクト で表現される文字列の末尾部分である場合,またその場合にだけ,true を返す。

suffixnull である場合,NullPointerException が投げられる。

実引数が空文字列である場合,又はメソッド equals(20.12.9)で等しいと判定された場合,true を返す。

20.12.23 public int indexOf(int ch)

code>ch を値に持つ文字が,このStringオブジェクト で表現される文字列中にある場合,最初に現われるその文字のインデクスを返す---つまり,次の式が成り立つ最小の k を返す。

this.charAt(k) == ch
この文字列の中に該当する文字がない場合,-1 を返す。

20.12.24 public int indexOf(int ch, int fromIndex)

ch を値に持つ文字が,このStringオブジェクト で表現される文字列中のインデクス fromIndex 以降にある場合,最初に現われるその文字のインデクスを返す---つまり,次の式が成り立つ最小のk を返す。

(this.charAt(k) == ch) && (k >= fromIndex)
位置 fromIndex 以降にその文字が現われない場合,-1 を返す。

fromIndex の値に制限はない。fromIndex が負である場合,ゼロと同じ効果をもち,文字列全体が検索される。 fromIndex が文字列の長さより大きい場合,この文字列の長さと等しい値として扱われ, 1を返す。

20.12.25 public int indexOf(String str)
throws NullPointerException

文字列 str がこのStringオブジェクトの部分文字列として現われる場合,該当する最初の部分文字列の先頭の文字のインデクスを返す---つまり,次の値がtrueである最小値kを返す。

this.startsWith(str, k)
strがこの文字列の部分文字列として現われない場合,-1 を返す。

strnullである場合,NullPointerException が投げられる。

20.12.26 public int indexOf(String str, int fromIndex)
throws NullPointerException

文字列 str が,このStringオブジェクト の部分文字列としてインデクス fromIndex 以降に現われる場合,該当する最初の部分文字列の先頭の文字のインデクスを返す---つまり,次の式が成り立つ最小値 k を返す。

this.startsWith(str, k) && (k >= fromIndex)
str が位置 fromIndex 以降にこの文字列の部分文字列として現われない場合,-1 を返す。

fromIndex の値に制限はない。fromIndex が負である場合,ゼロと同じ効果をもち,文字列全体が検索される。fromIndexが文字列の長さより大きい場合,この文字列の長さと等しい値として扱われ,-1を返す。

strnull である場合,NullPointerException が投げられる。

20.12.27 public int lastIndexOf(int ch)

ch を値に持つ文字が,このStringオブジェクトで表現される文字列中にある場合,最後に現われるその文字のインデクスを返す---つまり,次の式が成り立つ最大の k を返す。

this.charAt(k) == ch
この文字列の中に該当する文字がない場合,-1 を返す。

20.12.28 public int lastIndexOf(int ch, int fromIndex)

code>ch を値に持つ文字が,このStringオブジェクトで表現される文字列中のインデクスfromIndex以前にある場合,最後に現われるその文字のインデクスを返す---つまり,次の式が成り立つ最大の k を返す。

(this.charAt(k) == ch) && (k <= fromIndex)
位置 fromIndex 以前に,この文字列の中に該当する文字がない場合,-1 を返す。

fromIndex の値に制限はない。fromIndex がこの文字列の長さ以上である場合は,この文字列の長さより1少ない値として扱われ,文字列全体が検索される。fromIndex が負である場合,-1 として扱われ,-1 を返す。

20.12.29 public int lastIndexOf(String str)
throws NullPointerException

文字列 str が,このStringオブジェクト の部分文字列として現われる場合,該当する最後の部分文字列の先頭の文字のインデクスを返す---つまり,次の値が true である最大の k を返す。

this.startsWith(str, k)
str がこの文字列の部分文字列として現われない場合,-1 を返す。

strnull である場合,NullPointerException が投げられる。

20.12.30 public int lastIndexOf(String str, int fromIndex)
throws NullPointerException

文字列 str が,このStringオブジェクト の部分文字列としてインデクス fromIndex 以前に現われる場合,該当する最後の部分文字列の先頭の文字のインデクスを返す---つまり,次の式が成り立つ最大の k を返す。

this.startsWith(str, k) && (k <= fromIndex)
str が,位置 fromIndex 以前にこの文字列の部分集合として現われない場合,-1 を返す。

fromIndex の値に制限はない。fromIndex がこの文字列の長さより大きい場合は,この文字列の長さと等しい値として扱われ,文字列全体が検索される。fromIndex が負である場合,-1 として扱われ,-1 を返す。

strnull である場合,NullPointerException が投げられる。

20.12.31 public String substring(int beginIndex)
throws IndexOutOfBoundsException

このStringオブジェクト によって表される部分文字列を表現するStringオブジェクト を新しく作成し,それを返す。この部分文字列は,位置 beginIndex の文字で始まり,文字列の末尾までとする。

beginIndex が負である,又はこのStringオブジェクト の長さより大きい場合,IndexOutOfBoundsException が投げられる。

次に例を挙げる。


"unhappy".substring(2) は "happy" を返す

"Harbison".substring(3) は "bison" を返す
"emptiness".substring(9) は "" (空文字列) を返す

20.12.32 public String substring(int beginIndex, int endIndex)
throws IndexOutOfBoundsException

このStringオブジェクト によって表される部分文字列を表現するStringオブジェクト を新しく作成し,それを返す。この部分文字列は,位置 beginIndex の文字で始まり,位置 endIndex-1の文字で終わる。したがって,部分文字列の長さは,endIndex-beginIndexとする。

beginIndex が負である場合,又は endIndex がこのStringオブジェクト の長さより大きい場合,又は,beginIndexendIndex より大きい場合,このメソッドはIndexOutOfBoundsException を投げる。

次に例を挙げる。


"hamburger".substring(4, 8) は "urge" を返す
"smiles".substring(1, 5) は "mile" を返す

20.12.33 public String concat(String str)
throws NullPointerException

実引数の文字列の長さがゼロである場合,このStringオブジェクト への参照を返す。それ以外の場合は,新しいStringオブジェクト が作成され,それを返す。このとき,新しく作成されたオブジェクトは,このStringオブジェクト によって表現される文字列と,実引数で表わされる文字列を連結した文字列を表現する。

次に例を挙げる。


"cares".concat("s") は "caress"を返す
"to".concat("get").concat("her") は "together"を返す
strnull である場合,NullPointerException が投げられる。

20.12.34 public String replace(char oldChar, char newChar)

文字 oldChar が,このStringオブジェクト によって表現される文字列の中に現われない場合,この文字列への参照を返す。それ以外の場合は,新しい Stringオブジェクトが作成され,それを返す。このとき,新しく作成されたオブジェクトは,このStringオブジェクト によって表現される文字列の中の oldChar をすべて newChar で置き換えた文字列を表現する。

次に例を挙げる。

"mesquite in your cellar".replace('e', 'o')
                    は "mosquito in your collar"を返す
"the war of baronets".replace('r', 'y')
                    は "the way of bayonets"を返す
"sparring with a purple porpoise".replace('p', 't')
                    は('p', 't') "starring with a turtle tortoise"を返す
"JonL".replace('q', 'x') は "JonL" を返す (変化しない) 

20.12.35 public String toLowerCase()

このStringオブジェクト がメソッド Character.toLowerCase(20.5.20)で異なる文字へマッピングされる文字を含まない場合,このStringオブジェクト への参照を返す。それ以外の場合,このメソッドは,このStringオブジェクト で表現される文字列の長さと同じ長さの文字列を表現する新しいStringオブジェクト を作成し,それを返す。このとき,新しく作成されたオブジェクトのすべての文字は,メソッド Character.toLowerCase をこのStringオブジェクト の対応する文字に実行し,取得された文字と等しくなる。

次に例を挙げる。

"French Fries".toLowerCase() は "french fries"を返す
"".toLowerCase() は "" を返す

20.12.36 public String toUpperCase()

このStringオブジェクト がメソッド Character.toUpperCase (20.5.21)で異なる文字へマッピングされる文字を含まない場合,このStringオブジェクト への参照を返す。それ以外の場合,このメソッドは,このStringオブジェクト で表現される文字列の長さと同じ長さの文字列を表現する新しいStringオブジェクト を作成し,それを返す。このとき,新しく作成されたオブジェクトのすべての文字は,メソッド Character.toUpperCase をこのStringオブジェクト の対応する文字に実行し,取得された文字と等しくなる。

次に例を挙げる。


"Fahrvergnügen".toUpperCase() は "FAHRVERGNÜGEN" を返す
"Visit Ljubinje!".toUpperCase() は "VISIT LJUBINJE!" を返す

20.12.37 public String trim()

このStringオブジェクト が空文字列を表現する場合,又はこのStringオブジェクト によって表現される文字列の先頭の文字と末尾の文字がともに \u0020(スペース文字)より大きいのコードを持つ場合,このStringオブジェクト への参照を返す。

それ以外の場合で,\u0020 より大きいコードを持つ文字がない場合,空文字列を表現するStringオブジェクト が新しく作成され,それを返す。

それ以外の場合で,k をこの文字列内でコードが \u0020 より大きい先頭文字のインデクスとし,m をこの文字列内でコードが \u0020 より大きい末尾文字のインデクスとすると,インデクス k にある文字で始まり,インデクス m にある文字で終わるこの文字列の部分文字列---つまり this.substring(k, m+1) の戻り値を表すStringオブジェクト---を新しく作成し,それを返す。

このメソッドは,空白類 (20.5.19)を文字列の先頭と末尾から削除する場合に使用する。実際には,すべてのASCII制御文字を削除できる。

20.12.38 public static String valueOf(Object obj)

実引数が null である場合,"null" と等しい文字列を返す。それ以外の場合,obj.toString() の値を返す。メソッド toString(20.1.2)を参照のこと。

20.12.39 public static String valueOf(char[] data)
throws NullPointerException

文字列が作成され,返される。この文字列は,文字配列実引数に現在含まれている文字列を表現する。文字配列の内容が複写される。これ以降,文字配列を変更しても,新しく作成された文字配列には影響しない。

20.12.40 public static String valueOf(char[] data,
int offset, int count)
throws NullPointerException,
IndexOutOfBoundsException

文字列が作成され,返される。この文字列は,文字配列実引数の部分配列に現在含まれている文字列を表現する。実引数 offset は,部分配列の先頭の文字であり,実引数 count は,部分配列の長さを指定する。部分配列の内容が複写される。これ以降,文字配列を変更しても,新しく作成された文字配列には影響しない。

datanull である場合,NullPointerException が投げられる。

offset が負である場合,あるいは count が負である場合,あるいは offset+countdata.length より大きい場合,IndexOutOfBoundsException が投げられる。

20.12.41 public static String valueOf(boolean b)

b の文字列表現を返す。

実引数が true であれば,文字列 "true" を返す。

実引数が false であれば,文字列 "false" を返す。

20.12.42 public static String valueOf(char c)

文字列が作成され,返される。文字列は,cと等しい一つの文字を含む。

20.12.43 public static String valueOf(int i)

文字列が作成され,返される。文字列は,実引数を一つ取るメソッド Integer.toString (20.7.12)によって得られるものと同じとする。

20.12.44 public static String valueOf(long l)

文字列が作成され,返される。文字列は,実引数を一つ取るメソッド Long.toString (20.8.12)によって得られるものと同じとする。

20.12.45 public static String valueOf(float f)

文字列が作成され,返される。文字列は,実引数を一つ取るメソッド Float.toString (20.9.16)によって得られるものと同じとする。

20.12.46 public static String valueOf(double d)

文字列が作成され,返される。文字列は,実引数を一つ取るメソッド Double.toString (20.10.15)によって得られるものと同じとする。

20.12.47 public String intern()

初期状態では空の文字列プールがクラス String 内だけで保持される。

メソッド intern が呼び出される際に,プールが,すでにこのStringオブジェクトと等しい文字列を含んでいる場合,プールからの文字列を返す。このとき,文字列が等しいかどうかは,メソッドequals (20.12.9)で判定される。それ以外の場合,このStringオブジェクト がプールに追加され,このStringオブジェクト への参照を返す。

したがって,任意の二つの文字列 stについて,s.equals(t)trueである場合,またその場合にだけ,s.intern() == t.intern()true になる。

すべての文字列リテラルと文字列値の定数式に対して,基準表現が作成される (3.10.5)

20.13 クラス java.lang.StringBuffer

文字列バッファは,String(20.12)と似ているが,変更することができる。 ある特定の時点では,文字列バッファには,ある特定の文字列が入っているが,その長さ及び内容は,特定のメソッドを呼び出すことによって変更できる。

public class StringBuffer {
    public StringBuffer();
    public StringBuffer(int length)
        throws NegativeArraySizeException;
    public StringBuffer(String str);
    public String toString();
    public int length();
    public void setLength(int newLength)
        throws IndexOutOfBoundsException;
    public int capacity();
    public void ensureCapacity(int minimumCapacity);
    public char charAt(int index)
        throws IndexOutOfBoundsException;
    public void setCharAt(int index, char ch)
        throws IndexOutOfBoundsException;
    public void getChars(int srcBegin, int srcEnd,
            char[] dst, int dstBegin)
        throws NullPointerException, IndexOutOfBoundsException;
    public StringBuffer append(Object obj);
    public StringBuffer append(String str);
    public StringBuffer append(char[] str)
        throws NullPointerException;
    public StringBuffer append(char[] str, int offset, int len)
        throws NullPointerException, IndexOutOfBoundsException;
    public StringBuffer append(boolean b);
    public StringBuffer append(char c);
    public StringBuffer append(int i);
    public StringBuffer append(long l);
    public StringBuffer append(float f);
    public StringBuffer append(double d);
    public StringBuffer insert(int offset, Object obj)
        throws IndexOutOfBoundsException;
    public StringBuffer insert(int offset, String str)
        throws IndexOutOfBoundsException;
    public StringBuffer insert(int offset, char[] str)
        throws NullPointerException, IndexOutOfBoundsException;
    public StringBuffer insert(int offset, boolean b)
        throws IndexOutOfBoundsException;
    public StringBuffer insert(int offset, char c)
        throws IndexOutOfBoundsException;
    public StringBuffer insert(int offset, int i)
        throws IndexOutOfBoundsException;
    public StringBuffer insert(int offset, long l)
        throws IndexOutOfBoundsException;
    public StringBuffer insert(int offset, float f)
        throws IndexOutOfBoundsException;
    public StringBuffer insert(int offset, double d)
        throws IndexOutOfBoundsException;
    public StringBuffer reverse();
}
文字列バッファは, 容量(capacity)をもつ。 文字列バッファに含まれる文字列の長さがその容量を超えない限り,新しい内部的なバッファ配列を生成する必要はない。

文字列バッファは,複数のスレッドで安全に使用できる。 メソッドは,任意の特定のインスタンスに対するすべての処理が,あたかも,関係する個々のスレッドが実行するメソッド呼出しの順序と整合する順序で発生するかのように振舞うように,必要に応じて同期化される。

文字列バッファは,コンパイラが二項文字列連結演算子 + (15.17.1)を実装するために使用することができる。 例えば,k が型 inta が型 Objectをもつと仮定する。 すると,

k + "/" + a
この式は,あたかも次の式であるかのようにコンパイルされる。

new StringBuffer().append(k).append("/").append(a).toString()
これは,文字列バッファを新しく生成し(初期値は,空),各オペランドの文字列表現を順に文字列バッファに追加し,それから文字列バッファの内容を文字列に変換する。 全体的には,これは,一時的な文字列を多数生成することを回避する。

StringBufferに対する主要な操作は,任意の型のデータを受け付けられるようにオーバロードされたappend及びinsertメソッドである。 いずれのメソッドも,与えられたデータを文字列に変換し,その文字列の各文字を文字列バッファの内容に追加する。 appendメソッドは,これらの文字を常にバッファの最後に追加する。 insertメソッドは,その文字を指定された位置に追加する。

例えば,zが,文字列バッファオブジェクトを参照しており,その内容が文字"start"である場合,メソッド呼出しz.append("le")は,文字列バッファの内容を文字列"startle"に変更し,z.insert(4, "le")は,文字列バッファの内容を文字列"starlet"に変更する。

一般に,sbStringBufferのインスタンスを参照している場合,sb.append(x) は,sb.insert(sb.length(), x) と同じ効果をもつ。

20.13.1 public StringBuffer()

このコンストラクタは,新しく生成されたStringBufferオブジェクトを,初期的に,空文字列を表し,容量16をもつように初期化する。

20.13.2 public StringBuffer(int length)
throws NegativeArraySizeException

このコンストラクタは,新しく生成されたStringBufferオブジェクトを,初期的に,空文字列を表し,容量は,実引数で指定された値をもつように初期化する。

実引数が負である場合,NegativeArraySizeException を投げる。

20.13.3 public StringBuffer(String str)

このコンストラクタは,新しく生成されたStringBufferオブジェクトを,実引数と同じ文字列を表すように初期化する。 言い替えれば,この文字列バッファの初期の内容は,実引数の文字列を複写したものと同じとする。 文字列バッファの初期の容量は,16に実引数の文字列の長さを加えたものとする。

20.13.4 public String toString()

新しいStringオブジェクトが生成され,文字列バッファによって現在表現されている文字列に初期化された後,その新しいStringを返す。 その後の,その文字列バッファに対する変更は,返された文字列の内容には影響しない。

実装上の助言。 このメソッドは,新しいStringオブジェクトを生成する際に,文字の並びの複製を保持するための新しいメモリを,割り当てないようにコーディングできる。 その代わりに,その文字列は,その文字列バッファが使用しているメモリを共有できる。 すべてのその後の,その文字列バッファの内容又は容量を変更するような処理では,その処理時に内部的なバッファの複製を作らなければならない。 この方法は,文字列連結演算を文字列バッファを使用して実装した時に,文字列連結演算(15.17.1)によって割り当てられるメモリ量を減らすのに効果的である。

Object(20.1.2)toStringメソッド を上書きする。

20.13.5 public int length()

このメソッドは,このStringBufferオブジェクトによって現在表現されている文字列の長さを返す。

20.13.6 public int capacity()

このStringBufferオブジェクトの,現在の容量を返す。

20.13.7 public void ensureCapacity(int minimumCapacity)

このStringBufferオブジェクトの現在の容量が実引数よりも小さい場合,より大きな容量をもつ新しい内部バッファを生成する。 新しい容量は,次のうちの大きいほうとする。

実引数minimumCapacityが正でない場合,このメソッドは,何の動作も行わずそのまま処理を戻す。

20.13.8 public void setLength(int newLength)
throws IndexOutOfBoundsException

この文字列バッファは,実引数で指定された長さの新しい文字列を表現するように変更される。 kが古い文字列の長さより小さい場合,負でないすべてのインデクス kについて,新しい文字列のインデクスkにある文字は,古い文字列のインデクスk にある文字と同じであるものとする。 そうでなければ,新しい文字列のインデクスk にある文字は,null文字 '\u0000'とする。
又,このメソッドは,ensureCapacityメソッド(20.13.7)を実引数 newLengthで呼び出す。

実引数が負である場合,IndexOutOfBoundsExceptionを投げる。

20.13.9 public char charAt(int index)
throws IndexOutOfBoundsException

文字列バッファによって現在表現されている文字列の,実引数indexで指定された文字を返す。 配列のインデクスと同じように,文字列の先頭の文字のインデクスは,0,次の文字のインデクスは,1とする。

実引数indexが,負又は文字列バッファの現在の長さ(20.13.5)よりも小さくない場合,IndexOutOfBoundsExceptionを投げる。

20.13.10 public void setCharAt(int index, char ch)
throws IndexOutOfBoundsException

文字列バッファは,位置indexに文字chを含むことを除いて,古い文字列と同一の新しい文字列を表現するように変更される。

実引数indexが,負又は文字列バッファの現在の長さ(20.13.5)よりも小さくない場合,IndexOutOfBoundsExceptionを投げる。

20.13.11 public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
throws NullPointerException, IndexOutOfBoundsException

このStringBufferオブジェクトから,配列dstに文字を複写する。 複写される最初の文字は,インデクスsrcBeginにあり,最後の文字は,srcEnd-1にある。 (したがって,複写される文字の総数は,srcEnd-srcBeginになる。) 文字は,インデクスdstBeginからインデクスdstBegin+(srcEnd-srcBegin)-1までの,dstの部分配列に複写される。

dstnullである場合,NullPointerException を投げる。

そうでなければ,次のいずれかが成り立つ場合,IndexOutOfBoundsExceptionを投げ,配列dstは,変更されない。

20.13.12 public StringBuffer append(Object obj)

実引数が,あたかもString.valueOfメソッド(20.12.38)によって変換されたかのように文字列に変換され,その文字列が,このStringBufferオブジェクトにappend(20.13.13)される。 このStringBufferオブジェクトへの参照を返す。

20.13.13 public StringBuffer append(String str)

実引数strの文字を,順にこの文字列バッファの内容に追加する。 この文字列バッファの長さは,実引数の長さの分だけ増加する。 strnullである場合,"null"の4文字を,この文字列バッファに追加する。 最初に,メソッドensureCapacity(20.13.7)を,この新しい文字列バッファの長さを実引数として呼び出す。 このStringBufferオブジェクトへの参照を返す。

ここで,nを,appendメソッドを実行する前に文字列バッファに含まれていた,古い文字列の長さであるとする。 このとき,knより小さい場合,新しい文字列のインデクスkの文字は,古い文字列のインデクスkの文字と同じとする。 そうでなければ,実引数strのインデクスk-nの文字と等しい。

20.13.14 public StringBuffer append(char[] str)
throws NullPointerException

配列実引数の文字が,順にこの文字列バッファに追加され,この文字列バッファの長さは,実引数の長さの分だけ増加する。 最初に,メソッドensureCapacity(20.13.7)を,この新しい文字列バッファの長さを実引数として呼び出す。 このStringBufferオブジェクトへの参照を返す。

結果としての効果は,あたかも,メソッド String.valueOf(20.12.39)によって実引数を文字列に変換し,その文字列の各文字を,このStringBufferオブジェクトにappend(20.13.13)した場合と同じとする。

20.13.15 public StringBuffer append(char[] str,
int offset, int len)
throws NullPointerException,
IndexOutOfBoundsException

インデクスoffsetから始まる文字配列strの文字が,順にこの文字列バッファの内容に追加され,この文字列バッファの長さは,lenの分だけ増加する。 最初に,メソッド ensureCapacity(20.13.7)を,この新しい文字列バッファの長さを実引数にして呼び出す。 このStringBufferオブジェクトへの参照を返す。

結果としての効果は,あたかも,実引数を三つ取るメソッドString.valueOf(20.12.40)によって実引数を文字列に変換し,その文字列の文字を,このStringBufferオブジェクトにappend(20.13.13)した場合と同じとする。

20.13.16 public StringBuffer append(boolean b)

実引数を,あたかも,メソッド String.valueOf(20.12.41)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトにappend(20.13.13)する。 このStringBufferオブジェクトへの参照を返す。

20.13.17 public StringBuffer append(char c)

実引数を,この文字列バッファの内容に追加し,この文字列バッファの長さを1だけ増加させる。 最初に,メソッドensureCapacity(20.13.7)を,この新しい文字列バッファの長さを実引数にして呼び出す。 このStringBufferオブジェクトへの参照を返す。

結果としての効果は,あたかも,実引数をメソッド String.valueOf(20.12.42)によって変換したかのように,文字列に変換し,その文字列の中の文字を,このStringBufferオブジェクトにappend(20.13.13)した場合と同じとする。

20.13.18 public StringBuffer append(int i)

実引数を,あたかも,メソッド String.valueOf(20.12.43)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトにappend(20.13.13)する。 このStringBufferオブジェクトへの参照を返す。

20.13.19 public StringBuffer append(long l)

実引数を,あたかも,メソッドString.valueOf(20.12.44)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトにappend(20.13.13)する。 このStringBufferオブジェクトへの参照を返す。

20.13.20 public StringBuffer append(float f)

実引数を,あたかも,メソッドString.valueOf(20.12.45)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトにappend(20.13.13)する。 このStringBufferオブジェクトへの参照を返す。

20.13.21 public StringBuffer append(double d)

実引数を,あたかも,メソッドString.valueOf(20.12.46)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトにappend(20.13.13)する。 このStringBufferオブジェクトへの参照を返す。

20.13.22 public StringBuffer insert(int offset, Object obj)
throws IndexOutOfBoundsException

実引数を,あたかも,メソッドString.valueOf(20.12.38)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトの中のoffsetで示される位置に,insert(20.13.23)する。 このStringBufferオブジェクトへの参照を返す。

20.13.23 public StringBuffer insert(int offset, String str)
throws IndexOutOfBoundsException

String実引数の文字を,その順に文字列バッファのoffsetで示される位置に挿入する。 もともと,それ以降の位置にあったすべての文字は,後ろに移動し,文字列バッファの長さは,実引数の長さの分だけ増加する。 strが,nullである場合,"null"の4文字を,この文字列バッファに挿入する。 最初に,メソッドensureCapacity(20.13.7)を,この新しい文字列バッファの長さを実引数にして呼び出す。 このStringBufferオブジェクトへの参照を返す。

新しい文字列内のインデクスkの位置にある文字は,次の文字と等しい。

20.13.24 public StringBuffer insert(int offset, char[] str)
throws NullPointerException,
IndexOutOfBoundsException

配列実引数の文字が,その順に,この文字列バッファに挿入され,文字列バッファの長さは,実引数の長さの分だけ増加する。 最初に,メソッドensureCapacity(20.13.7)を,この新しい文字列バッファの長さを実引数にして呼び出す。 このStringBufferオブジェクトへの参照を返す。

結果としての効果は,あたかも,実引数をメソッドString.valueOf(20.12.39)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトのoffset で示される位置にinsert(20.13.23)するのと同じものとする。

StringBufferクラスは,オフセット,文字配列,及びその他二つの実引数を取るappendメソッド(20.13.15)を提供しているが,現在は,オフセット,文字配列,及びその他二つの実引数を取るinsertメソッドを提供していないことに注意のこと。

20.13.25 public StringBuffer insert(int offset, boolean b)
throws IndexOutOfBoundsException

実引数を,あたかも,メソッド String.valueOf(20.12.41)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトのoffsetで示される位置にinsert(20.13.23)する。 このStringBufferオブジェクトへの参照を返す。

20.13.26 public StringBuffer insert(int offset, char c)
throws IndexOutOfBoundsException

実引数を,この文字列バッファの内容の,offsetで示される位置に挿入する。この文字列バッファの長さは,一つだけ増加する。 最初に,メソッドensureCapacity(20.13.7)を,この新しい文字列バッファを実引数として呼び出す。 このStringBufferオブジェクトへの参照を返す。

結果としての効果は,あたかも,実引数をメソッドString.valueOf(20.12.42)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトのoffsetで示される位置にinsert(20.13.23)するのと同じものとする。

20.13.27 public StringBuffer insert(int offset, int i)
throws IndexOutOfBoundsException

実引数を,メソッド String.valueOf(20.12.43)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトのoffsetで示される位置にinsert(20.13.23)する。 このStringBufferオブジェクトへの参照を返す。

20.13.28 public StringBuffer insert(int offset, long l)
throws IndexOutOfBoundsException

実引数を,メソッド String.valueOf(20.12.44)によって変換したかのように,文字列に変換し,その文字列の文字を,このStringBufferオブジェクトのoffsetで示される位置にinsert(20.13.23)する。 このStringBufferオブジェクトへの参照を返す。

20.13.29 public StringBuffer insert(int offset, float f)
throws IndexOutOfBoundsException

実引数を,メソッド String.valueOf(20.12.45)によって変換したかのように,文字列に変換し,その文字列の文字を,このオブジェクトStringBufferoffsetで示される位置にinsert(20.13.23)する。 このStringBufferオブジェクトへの参照を返す。

20.13.30 public StringBuffer insert(int offset, double d)
throws IndexOutOfBoundsException

実引数を,メソッド String.valueOf(20.12.46)によって変換したかのように,文字列に変換し,その文字列の文字を,このオブジェクトStringBufferoffsetで示される位置にinsert(20.13.23)する。 このStringBufferオブジェクトへの参照を返す。

20.13.31 public StringBuffer reverse()

このStringBufferオブジェクトに含まれる文字列を,それと逆順の文字列によって置き換える。 このStringBufferオブジェクトへの参照を返す。

ここで,nを,reverseメソッドを実行する前の文字列バッファに入っていた古い文字列の長さとする。 このとき,新しい文字列のインデクスkの文字は,古い文字列のインデクスn-k-1の文字と等しい。

20.14 クラス java.lang.ClassLoader

クラスローダは,クラスをローディングするオブジェクトとする。 クラス名が与えられると,クラスローダは,そのクラス定義を構成するデータの検索又は生成を試みなければならない。 通常は,クラス名をファイル名に変換し,ファイルシステムからその名前の“クラスファイル”を読み取ってこれを行う。

すべてのClassオブジェクトには,それを定義したClassLoader (20.3.7)への参照が含まれる。 実行可能なJavaコードが,それまでにロードされていないクラスを使う必要がある場合にはいつでも,そのコードを含むクラスのクラスローダに対してloadClassメソッドを呼び出す。

配列クラス用のClassオブジェクトは,クラスローダによっては生成されないが,Javaのランタイムによって要求されると自動的に生成される。 クラスClassのgetClassLoaderメソッド(20.3.7)で返される配列クラスのためのクラスローダは,その要素型のクラスローダと同じとする。 その要素型がプリミティブ型であれば,配列クラスは,クラスローダをもたない。

クラスローダは,通常,セキュリティマネージャ(20.17)によって,セキュリティドメインを示すために使用される。 二つのクラスは,同じクラスローダによって定義されている場合にだけ,互いに“友好的”又は“関係する”と見なしてよい。

public abstract class ClassLoader {
    protected ClassLoader() throws SecurityException;
    protected abstract Class loadClass(String name, boolean resolve)
        throws ClassNotFoundException;
    protected final Class defineClass(byte data[], int offset, int length)
        throws NullPointerException, IndexOutOfBoundsException, ClassFormatError;
    protected final void resolveClass(Class c)
        throws NullPointerException;
    protected final Class findSystemClass(String name)
        throws ClassNotFoundException;
}

20.14.1 protected ClassLoader() throws SecurityException

このコンストラクタは,すべての新しく生成されるクラスローダについて呼び出される。 クラスClassLoaderは,abstractクラスなので,クラスClassLoader自身のインスタンスを新しく生成することはできない。 しかしながら,ClassLoaderのサブクラスのためのすべてのコンストラクタは,必ずこのコンストラクタを,明示的又は暗示的に,直接的又は間接的に,呼び出さなければならない。

このコンストラクタが行なうのは,セキュリティチェックが必ず行われるようにすることだけとする。 セキュリティマネージャが存在する場合,そのcheckCreateClassLoaderメソッド(20.17.10)を呼び出す。

20.14.2 protected abstract Class loadClass(String name, boolean link)
throws ClassNotFoundException

それ自体が抽象クラスではないすべてのClassLoaderのサブクラスは,loadClassメソッドの実装を提供しなければならない。

loadClassが行なうのは,クラスの名前が与えられたときに,そのクラスのClassオブジェクトを返すか,又は ClassNotFoundExceptionを投げることとする。

Classオブジェクトが返され,かつ linktrueである場合,Classオブジェクトは,そのクラスオブジェクトを返す前に,link(12.320.14.4)されなければならない。

多くの場合,ClassLoader (20.14)のサブクラスに対して,loadClassメソッドを同期メソッドとして実装することが賢明である。

20.14.3 protected final Class defineClass(byte data[], int offset, int length)
throws NullPointerException, IndexOutOfBoundsException, ClassFormatError

このメソッドは,クラスローダによって,新しいクラスを定義するために使われる。

配列 dataoffset からoffset+length-1の位置にあるバイト形式は,Java Virtual Machine Specification で定義している有効なクラスファイルの形式をもたなければならない。

datanullである場合,NullPointerException を投げる。

次のいずれかが成り立つ場合,IndexOutOfBoundsExceptionを投げる。

dataの指定されたバイトが有効なクラス定義になっていない場合,ClassFormatErrorを投げる。 そうでなければ,このメソッドは,データバイトで記述されたClassオブジェクトを生成し,それを返す。

20.14.4 protected final void resolveClass(Class c)
throws NullPointerException

この(誤解を招くような名前の)メソッドは,クラスローダによって,クラスをリンク(12.320.14.4)するために使われる。

cnullである場合,NullPointerExceptionを投げる。

Classオブジェクトcがすでにリンクされている場合,このメソッドは,そのまま制御を戻す。

そうでなければ,クラスは,12.3で規定されているようにリンクされる。

20.14.5 protected final Class findSystemClass(String name)
throws ClassNotFoundException

このメソッドは,クラスローダによって,クラスローダをもたないクラスを検索するのに使われる。 検索されるクラスには,java.lang.Objectなどの組み込みクラスと同様に,ホストの実装が保持しているクラス,例えばローカルファイルシステム,が含まれる。

クラスの name が与えられると,このメソッドは,loadClassメソッド と同様に,そのクラスのためのClassオブジェクトを返すか又はClassNotFoundExceptionを投げる。

20.15 クラス java.lang.Process

クラス Runtime のメソッド exec(20.16.3)は,Processオブジェクトへの参照を返す。 クラスProcessは,プロセスからの入力,プロセスへの出力,プロセス終了の待機,プロセスの終了状態のチェック,及びプロセスの破棄(強制終了)を実行するメソッドを提供する。

Processインスタンスの最後の参照がなくなると,Processオブジェクトが破棄されるが,関連プロセスは,自動的には終了しない

Processオブジェクトを所有するJavaプロセスに対して,Processオブジェクトの表すプロセスを非同期的又は並行的に実行する必要はない。


public abstract class Process {
    public abstract OutputStream getOutputStream();
    public abstract InputStream getInputStream();
    public abstract InputStream getErrorStream();
    public abstract int waitFor()
        throws InterruptedException;
    public abstract int exitValue()
        throws IllegalThreadStateException;
    public abstract void destroy();
}

20.15.1 public abstract OutputStream getOutputStream()

このメソッドは,OutputStreamを返す。 出力ストリームへの出力は,このProcessオブジェクトによって表現されるプロセスの標準入力ストリームにパイプされる。

20.15.2 public abstract InputStream getInputStream()

このメソッドは,InputStreamを返す。 ストリームは,このProcessオブジェクトによって表現されるプロセスの標準出力ストリームからパイプされたデータを取得する。

20.15.3 public abstract InputStream getErrorStream()

このメソッドは,InputStreamを返す。 ストリームは,このProcessオブジェクトによって表現されるプロセスのエラー出力ストリームからパイプされたデータを取得する。

20.15.4 public abstract int waitFor()
throws InterruptedException

このメソッドは,必要な場合,このProcessオブジェクトが終了するまで,現在のスレッドを待機させる。 その後,プロセスの終了コードを返す。 慣例として,0は,正常終了を示す。

現在のスレッドが待機中に別のスレッドから割り込まれた場合(20.20.31),待機が終了し,InterruptedException を投げる。

20.15.5 public abstract int exitValue()
throws IllegalThreadStateException

このProcessオブジェクトによって表現されるプロセスがまだ終了していない場合,IllegalThreadStateExceptionを投げる。 そうでなければ,プロセスの終了コードを返す。 慣例として,0は,正常終了を示す。

20.15.6 public abstract void destroy()

このProcessオブジェクトによって表現されるプロセスを強制終了する。

20.16 クラス java.lang.Runtime

public class Runtime {
    public static Runtime getRuntime();
    public void exit(int status) throws SecurityException;
    public Process exec(String command)
        throws IOException,SecurityException,IndexOutOfBoundsException;
    public Process exec(String command, String envp[])
        throws IOException,SecurityException,IndexOutOfBoundsException;
    public Process exec(String cmdarray[])
        throws IOException,SecurityException,IndexOutOfBoundsException;
    public Process exec(String cmdarray[], String envp[])
        throws IOException,SecurityException,IndexOutOfBoundsException;
    public long totalMemory();
    public long freeMemory();
    public void gc();
    public void runFinalization();
    public void traceInstructions(boolean on);
    public void traceMethodCalls(boolean on);
    public void load(String filename)
        throws SecurityException, UnsatisfiedLinkError;
    public void loadLibrary(String libname)
        throws SecurityException, UnsatisfiedLinkError;
    public InputStream getLocalizedInputStream(InputStream in);
    public OutputStream getLocalizedOutputStream(OutputStream out);
}

20.16.1 public static Runtime getRuntime()

このメソッドは,現在のRuntimeオブジェクトを返す。 クラスRuntimeのメソッドの多くは,インスタンスメソッドであり,現在のRuntimeオブジェクトに対して呼び出される。

20.16.2 public void exit(int status)
throws SecurityException

まず,セキュリティマネージャが存在する場合,そのcheckExitメソッド(20.17.13)status値を実引数として呼び出す。

このメソッドは,現在の実行中のJava仮想計算機を終了させる。実引数は,状態コードとして使われる。慣例として,ゼロ以外の状況コードは,異常終了を示す。

このメソッドは,通常は,制御を戻さない。

クラスSystem のメソッドexit(20.18.11)も又参照のこと。 これは,このメソッドを呼び出すのによく使われる慣例的かつ便利な方法である。

20.16.3 public Process exec(String command)
throws IOException, SecurityException, IndexOutOfBoundsException

実引数commandは,トークンに解析され,別のプロセスでコマンドとして実行される。 トークンの解析は,次に示す呼出しで生成されるStringTokenizer (21.10)によって行われる。

new StringTokenizer(command)
この呼出しでは,これ以上の文字カテゴリは,変更されない。

このメソッドの振舞いは,次の呼出しと同じとする。

exec(command, null)
20.16.4を参照のこと。

20.16.4 public Process exec(String command, String envp[])
throws IOException, SecurityException, IndexOutOfBoundsException

実引数 command は,トークンに解析され,envpで指定された環境をもつ別のプロセスでコマンドとして実行される。 トークンの解析は,次に示す呼出しで生成されるStringTokenizer (21.10)によって行われる。

new StringTokenizer(command)
この呼出しでは,これ以上の文字カテゴリは,変更されない。

このメソッドは,文字列 commandをトークンに分解し,文字列トークナイザがそのトークンを分解した順番にトークンを含む,新しい配列cmdarrayを生成する。 このメソッドの振舞いは,次の呼出しと同じとする。

exec(cmdarray, envp)
20.16.6を参照のこと。

20.16.5 public Process exec(String cmdarray[])
throws IOException, SecurityException, NullPointerException, IndexOutOfBoundsException

cmdarrayのトークンで指定されたコマンドを,別のプロセスとして実行する。

このメソッドの振舞いは,次の呼出しと同じとする。

exec(cmdarray, null)
20.16.6を参照のこと。

20.16.6 public Process exec(String cmdarray[], String envp[])
throws IOException, SecurityException, NullPointerException, IndexOutOfBoundsException

まず,セキュリティマネージャが存在する場合,checkExecメソッド(20.17.14)を,cmdarrayの一つ目の要素を実引数として呼び出す。

cmdarraynullである場合,NullPointerExceptionを投げる。 cmdarray が空配列(長さ0)である場合,IndexOutOfBoundsExceptionを投げる。

このメソッドは,コマンドラインのトークンを表現する文字列配列cmdarray,システム属性を定義する“環境”を表す文字列配列envpが指定されると,指定されたコマンドを実行するプロセスを新しく生成し,新しいプロセスを表現するProcessオブジェクト(20.15)を返す。

20.16.7 public long totalMemory()

現在存在しているオブジェクト及び将来生成されるオブジェクトに対して,現在使用可能なメモリの総量をバイト単位で返す。 このメソッドから返される値は,ホスト環境に依存して,時間が経つと変化することがある。

ある型のオブジェクトを保持するのに必要なメモリ量は,実装によって異なる。

20.16.8 public long freeMemory()

将来生成されるオブジェクトに,現在使用できるメモリの総量の近似値を,バイト単位で返す。 この値は,必ずtotalMemoryメソッドから返される現在の値より小さくなる。 gcメソッドを呼び出すと,freeMemoryから返される値が増えることがある。

20.16.9 public void gc()

このメソッドを呼び出すと,破棄されたオブジェクトが現在占有しているメモリを,即座に再利用できるように,破棄されたオブジェクトの回収が試みられる。 メソッドの呼出しから制御が戻った時点で,Java仮想計算機は,すべての破棄されたオブジェクトを可能な限り回収する努力をしている(gc とは,“ガベージ コレクタ (garbage collector)”を表す)。

Javaランタイムシステムでは,gcメソッドが明示的に呼び出されないと,必要に応じて再利用プロセスが,別のスレッドで自動的に実行される。

クラス Systemgcメソッド(20.18.12)も又参照のこと。 これは,このメソッドを呼び出すのによく使われる慣例的かつ便利な方法である。

20.16.10 public void runFinalization()

このメソッドを呼び出すと,Java仮想計算機は,破棄されていると判定されているが,finalizeメソッド がまだ呼び出されていないオブジェクトのfinalizeメソッドの実行を試みる。 Java仮想計算機は,メソッド呼出しから制御が戻った時点で,未完了のファイナライズを可能な限り終了している。

Javaランタイムシステムでは,runFinalizationメソッド が明示的に呼び出されないと,必要に応じてファイナライズプロセスが別のスレッドで自動的に実行される。

クラス SystemrunFinalizationメソッド (20.18.13)も又参照のこと。 これは,このメソッドを呼び出すのによく使われる慣例的かつ便利な方法である。

20.16.11 public void traceInstructions(boolean on)

実引数に trueを指定してこのメソッドを呼び出すと,Java仮想計算機は,実行する命令単位のデバッグ情報を出力する。 この情報の形式と,それが出力されるファイル又はそのほかの出力ストリームは,ホスト環境によって異なる。

実引数に falseを指定してこのメソッドを呼び出すと,Java仮想計算機は,命令単位のデバッグ情報の出力を中止する。

20.16.12 public void traceMethodCalls(boolean on)

実引数に trueを指定してこのメソッドを呼び出すと,Java仮想計算機は,実行するメソッド呼出し単位のデバッグ情報を出力する。 この情報の形式と,それが出力されるファイル又はその他の出力ストリームは,ホスト環境によって異なる。

実引数に falseを指定してこのメソッドを呼び出すと,Java仮想計算機は,メソッド単位のデバッグ情報の出力を中止する。

20.16.13 public void load(String filename)

まず,セキュリティマネージャが存在する場合,そのcheckLinkメソッド (20.17.17)を,filenameを実引数として呼び出す。

これは,メソッド loadLibrary(20.16.14)に似ているが,実引数としてライブラリの名前でなく,一般的なファイルの名前を取り,ネイティブコードのファイルもロードできる。

クラス System のメソッド load(20.18.14)も又参照のこと。 これは,このメソッドを呼び出すのによく使われる慣例的かつ便利な方法である。

20.16.14 public void loadLibrary(String libname)

まず,セキュリティマネージャが存在する場合,そのcheckLinkメソッド (20.17.17)を,libnameを実引数として呼び出す。

ネイティブコードで記述されたファイルが,ローカルのファイルシステムでライブラリファイルが格納されている場所からロードされる。 このプロセスの細部は,処理系によって異なる。

クラス System のメソッド loadLibrary(20.18.15)も又参照のこと。 これは,このメソッドを呼び出すのによく使われる慣例的かつ便利な方法である。 クラスの実装でメソッドnativeを使用する場合,その一般的なやり方は,ネイティブコードをライブラリファイル(ここでは,LibFile)に入れ,クラス宣言の中で次の静的初期化子を入れる。

static { System.loadLibrary("LibFile"); }
クラスがロードされ,初期化される(12.4)と,メソッドnativeに必要なネイティブコードの実装もロードされる。

20.16.15 public InputStream getLocalizedInputStream(InputStream in)

このメソッドは,InputStream(22.3)を実引数として,ローカライズされている点だけが実引数と異なる InputStreamを返す。 データは,ストリームから読み取られる際に,自動的にローカル書式から Unicodeに変換される。 実引数がすでにローカライズされたストリームの場合,それをそのまま戻り値として返す。

20.16.16 public OutputStream getLocalizedOutputStream(OutputStream out)

このメソッドは,OutputStream (22.15)を実引数として取り,ローカライズされている点だけが実引数と異なる OutputStreamを返す。 データは,ストリームに書き込まれる際に,自動的に Unicodeからローカル書式に変換される。 実引数が既にローカライズされたストリームの場合,それをそのまま戻り値として返す。

20.17 クラス java.lang.SecurityManager

public abstract class SecurityManager {
    protected boolean inCheck;
    protected SecurityManager()
        throws SecurityException;
    protected Class[] getClassContext();
    protected int classDepth(String name);
    protected boolean inClass(String name);
    protected ClassLoader currentClassLoader();
    protected int classLoaderDepth();
    protected boolean inClassLoader();
    public boolean getInCheck();
    public void checkCreateClassLoader()
        throws SecurityException;
    public void checkAccess(Thread t)
        throws SecurityException;
    public void checkAccess(ThreadGroup g)
        throws SecurityException;
    public void checkExit(int status)
        throws SecurityException;
    public void checkExec(String cmd)
        throws SecurityException;
    public void checkPropertiesAccess()
        throws SecurityException;
    public void checkPropertyAccess(String key)
        throws SecurityException;
    public void checkLink(String libname)
        throws SecurityException;
    public void checkRead(int fd)
        throws SecurityException;
    public void checkRead(String file)
        throws SecurityException;
    public void checkWrite(int fd)
        throws SecurityException;
    public void checkWrite(String file)
        throws SecurityException;
    public void checkDelete(String file)
        throws SecurityException;
    public void checkConnect(String host, int port)
        throws SecurityException;
    public void checkListen(int port)
        throws SecurityException;
    public void checkAccept(String host, int port)
        throws SecurityException;
    public void checkSetFactory()
        throws SecurityException;
    public boolean checkTopLevelWindow()
        throws SecurityException;
    public void checkPackageAccess(String packageName)
        throws SecurityException;
    public void checkPackageDefinition(String packageName)
        throws SecurityException;
}
実行中のJavaプログラムには,セキュリティマネージャが設定されていることがある。 これは,クラスSecurityManagerのインスタンスである。 現在のセキュリティマネージャは,System.getSecurityManager()メソッド(20.18.4)を呼び出せば確認できる。

クラスSecurityManagerには,名前が"check"で始まるメソッドが多数ある。 これらのメソッドは,Javaライブラリのさまざまなメソッドが重要な処理を行う前に呼び出される。 チェックメソッドの呼出しは,次のようにして行われる。


SecurityManager security = System.getSecurityManager();
if (security != null) {
    security.checkXXX(arguments);
}
セキュリティマネージャは,このコードで例外を投げて,処理の実行を中止できる。 通常,ルーチンをチェックするセキュリティマネージャは,処理を許可する場合は,何も実行しないで制御を戻し,処理を禁止する場合は,SecurityExceptionを投げる。 ただし,checkTopLevelWindow(20.17.27)は,例外で,このメソッドは,許可レベルのいずれか一方を示すために,必ず boolean 値を返す。

20.17.1 protected boolean inCheck = false;

通常,このフィールドには,セキュリティチェックの進行中,必ず trueが代入されている。 これは,チェックするルーチンが外部コードを呼び出す必要がある場合に重要である。 この後,外部コードでメソッド getInCheck(20.17.9)を使用すれば,このフラグの状態を確認できる。

20.17.2 protected SecurityManager()
throws SecurityException

このコンストラクタは,セキュリティマネージャを生成する前に,セキュリティマネージャが既にインストール(20.18.5)されているかどうか確認する。 インストールされている場合,別のセキュリティマネージャの生成は,禁止されているので,SecurityExceptionを投げる。

20.17.3 protected Class[] getClassContext()

このセキュリティマネージャ用のユティリティメソッドは,現在のスレッドの実行スタックを取得し,スタックフレームごとに一つの要素をもつ配列を返す。インデクスが0の位置にある要素がスタックの一番上に対応する。 要素がClassオブジェクトの場合,そのスタックフレームは,そのClassオブジェクトによって表現されるクラスのメソッド呼出しに対応する。

20.17.4 protected int classDepth(String name)

このセキュリティマネージャ用のユティリティメソッドは,現在のスレッドの実行スタックを検索し,実行がまだ終了していない,nameをクラスの完全限定名としてもつメソッドのうち,最後に呼び出されたものを探し出す。 該当するメソッドが見つかると,スタックの一番上からの距離を,負でない整数として返す。 そうでなければ,-1 を返す。

20.17.5 protected boolean inClass(String name)

このセキュリティマネージャ用のユティリティメソッドは,現在のスレッドの実行スタックを検索し,実行がまだ終了していない,nameをクラスの完全限定名としてもつメソッドのうち,最後に呼び出されたものを探し出す。 該当するメソッドが見つかると,trueを返す。 そうでなければ,false を返す。

20.17.6 protected ClassLoader currentClassLoader()

このセキュリティマネージャ用のユティリティメソッドは,現在のスレッドの実行スタックを検索し,実行がまだ終了していない,クラスローダ(20.14)によって生成されたクラスをもつメソッドのうち,最後に呼び出されたものを探し出す。 該当するメソッドが見つかると,オブジェクトClassLoaderへの参照を返す。 そうでなければ,null を返す。

20.17.7 protected int classLoaderDepth()

このセキュリティマネージャ用のユティリティメソッドは,現在のスレッドの実行スタックを検索し,実行がまだ終了していない,クラスローダ(20.14)によって生成されたクラスをもつメソッドのうち,最後に呼び出されたものを探し出す。 該当するメソッドが見つかると,スタックの一番上からの距離を,負でない整数として返す。 そうでなければ,-1を返す。

20.17.8 protected boolean inClassLoader()

このセキュリティマネージャ用のユティリティメソッドは,現在のスレッドの実行スタックを検索し,実行がまだ終了していない,クラスローダ(20.14)によって生成されたクラスをもつメソッドのうち,最後に呼び出されたものを探し出す。 該当するメソッドが見つかると,trueを返す。 そうでなければ,false を返す。

20.17.9 public boolean getInCheck()

inCheck フィールド(20.17.1)の値を返す。

20.17.10 public void checkCreateClassLoader()
throws SecurityException

このメソッドは,クラスローダの生成が禁止されている場合,SecurityException を投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,クラス ClassLoader(20.14.1)のコンストラクタによって呼び出される。

クラス SecurityManagerによって定義されたcheckCreateClassLoaderメソッドは,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでクラスローダの生成が許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.11 public void checkAccess(Thread t)
throws SecurityException

このメソッドは,スレッド tの変更が禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,クラスThreadcheckAccessメソッド(20.20.12)によって呼び出される。

クラス SecurityManagerによって定義されたcheckAccessメソッドは,常にSecurityExceptionを投げる。 インストールされたセキュリティマネージャでスレッドの変更が許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.12 public void checkAccess(ThreadGroup g)
throws SecurityException

このメソッドは,スレッドグループ gの変更が禁止されている場合,SecurityException を投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,クラスThreadGroupcheckAccessメソッド(20.21.4)によって呼び出される。

クラス SecurityManagerによって定義されたcheckAccessメソッド は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでスレッドグループの変更が許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.13 public void checkExit(int status)
throws SecurityException

このメソッドは,実行中のJava仮想計算機を終了させる処理が禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,クラスRuntime のメソッドexit(20.16.2)によって呼び出される。

クラス SecurityManagerによって定義されたcheckExitメソッドは,常にSecurityExceptionを投げる。 インストールされたセキュリティマネージャで終了が許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.14 public void checkExec(String cmd)
throws SecurityException

このメソッドは,execコマンドの実行が禁止されている場合,SecurityExceptionを投げる。 実引数 cmd は,実行するコマンドの名前とする。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,クラスRuntimeのメソッドexec(20.16.6)によって呼び出される。

クラスSecurityManagerによって定義されたcheckExecメソッドは,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでexecコマンドが許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.15 public void checkPropertiesAccess()
throws SecurityException

このメソッドは,システム属性データ構造の取得や設定が禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,クラスSystemのメソッドgetProperties(20.18.7)及びsetProperties(20.18.8)によって呼び出される。

クラス SecurityManagerによって定義されたメソッドcheckPropertiesAccessは,常にSecurityExceptionを投げる。 インストールされたセキュリティマネージャで属性へのアクセスが許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.16 public void checkPropertyAccess(String key)
throws SecurityException

このメソッドは,keyで指定されたシステム属性の値の取得が禁止されている場合,SecurityExceptionを投げる。

このメソッドは′サ在のセキュリティマネージャ(20.18.4)のために,クラスSystemの実引数を一つ取るメソッド getProperty(20.18.9) 及び実引数を二つ取るメソッドgetProperty(20.18.10)によって呼び出される。

クラス SecurityManager によって定義されたメソッドcheckPropertiesAccess は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでシステム属性の値へのアクセスが許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.17 public void checkLink(String libname)
throws SecurityException

このメソッドは,指定されたライブラリコードファイルの動的リンクが禁止されている場合,SecurityExceptionを投げる。 実引数として,単純ライブラリ名か,完全ファイル名を取る。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために, クラスSystemのメソッドload(20.16.13) 及びメソッドloadLibrary(20.16.14)によって呼び出される。

クラス SecurityManagerによって定義されたcheckLinkメソッド は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャで動的コードリンクが許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.18 public void checkRead(int fd)
throws SecurityException

このメソッドは,指定されたファイル記述子を使用した入力ストリームの生成が禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,java.io.FileInputStream (22.4.3)のいずれかのコンストラクタによって呼び出される。

クラス SecurityManager によって定義されたメソッドcheckReadは,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャで既存のファイル記述子からの入力ストリームの生成が許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.19 public void checkRead(String file)
throws SecurityException

このメソッドは,指定されたファイルやディレクトリの読み取り,対応するファイルシステム情報の検査,又はその存在の有無を確認することが禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために, java.io.FileInputStream(22.4.122.4.2)の二つのコンストラクタ, java.io.RandomAccessFile(22.23.122.23.2) の二つのコンストラクタ,クラスjava.io.File のメソッド exists (22.24.16), メソッド canRead(22.24.17), メソッド isFile(22.24.19), メソッド isDirectory (22.24.20), メソッド lastModified (22.24.21), メソッド length(22.24.22), 実引数を取らないメソッド list(22.24.25), 及び実引数を一つ取るメソッドlist(22.24.26)によって呼び出される。

クラス SecurityManager によって定義されたメソッドcheckRead は,常にSecurityExceptionを投げる。 インストールされたセキュリティマネージャでファイルに対する読み取りのアクセスが許可されている場合,サブクラスでこのメソッドを上書きしなければならない。

20.17.20 public void checkWrite(int fd)
throws SecurityException

このメソッドは,指定されたファイル記述子を使用した出力ストリームの生成が禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,java.io.FileOutputStream (22.16.3) のいずれかのコンストラクタによって呼び出される。

クラス SecurityManager によって定義されるメソッドcheckWrite は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャで既存のファイル記述子からの出力ストリームの生成が許可されている場合,サブクラスでこのメソッドを上書きしなければならない。

20.17.21 public void checkWrite(String file)
throws SecurityException

このメソッドは,指定されたファイルやディレクトリの書き込み,変更,生成(出力ファイルの場合),又は名前の変更が禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために, java.io.FileOutputStream (22.16.122.16.2)の二つのコンストラクタ, java.io.RandomAccessFile (22.23.122.23.2)の二つのコンストラクタ, クラス java.io.File のメソッド canWrite (22.24.18), メソッド mkdir(22.24.23), 及びメソッド renameTo(22.24.27)によって呼び出される。

クラス SecurityManagerによって定義されたメソッドcheckWrite は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでファイルに対する書き込みのアクセスが許可されている場合,サブクラスでこのメソッドを上書きしなければならない。

20.17.22 public void checkDelete(String file)
throws SecurityException

このメソッドは,指定されたファイルの削除が禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,クラスjava.io.File のメソッド delete(22.24.28)によって呼び出される。

クラス SecurityManagerによって定義されたメソッドcheckDelete は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでファイルの削除が許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.23 public void checkConnect(String host, int port)
throws SecurityException

このメソッドは,指定されたネットワーク host の,指定されたportとの接続が禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために, クラスjava.net.Socket の二つのコンストラクタ, クラスjava.net.DatagramSocket のメソッド send及びメソッド receive, 及びクラスjava.net.InetAddress のメソッド getByName及びメソッドgetAllByName によって呼び出される。 (この仕様書では,これらのメソッドについては,規定していない。The Java Application Programming Interface を参照のこと)。

クラス SecurityManager で定義されたメソッドcheckConnect は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでネットワーク接続が許可されている場合,サブクラスでこのメソッドを上書きしなければならない。

20.17.24 public void checkListen(int port)
throws SecurityException

このメソッドは,指定されたローカルネットワークポート portを感知することが禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために, クラスjava.net.DatagramSocketの実引数を一つ取るコンストラクタ及びクラス java.net.ServerSocketのコンストラクタによって呼び出される(この仕様書では,これらのメソッドについては,規定していない。 The Java Application Programming Interface を参照のこと)。 クラス SecurityManager で定義された メソッドcheckListenは,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでローカルネットワークポートを感知することが許可されている場合,サブクラスでこのメソッドを上書きしなければならない。

20.17.25 public void checkAccept(String host, int port)
throws SecurityException

このメソッドは,指定されたネットワーク host の指定されたportからの接続を受け付けることが禁止されている場合,SecurityExceptionを投げる。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,クラスjava.net.ServerSocket の メソッド acceptで呼び出される(この仕様書では,これらのメソッドについては,規定していない。 The Java Application Programming Interface を参照のこと)。

クラス SecurityManager で定義されたメソッドcheckAccept は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでネットワーク接続が許可されている場合,サブクラスでこのメソッドを上書きしなければならない。

20.17.26 public void checkSetFactory()
throws SecurityException

このメソッドは,ソケット,サーバーソケット,URL,又はURL接続用の“ファクトリ”のインストールが禁止されている場合,SecurityExceptionを投げる。

このメソッドは,セキュリティマネージャ(20.18.4)のために,次のメソッドで呼び出される。

    java.net.ServerSocketクラスのsetSocketFactoryメソッド
    java.net.SocketクラスのsetSocketImplFactoryメソッド
    java.net.URLクラスのsetURLStreamHandlerFactoryメソッド
    java.net.URLConnectionクラスのsetContentHandlerFactoryメソッド
(この規定書では,これらのメソッドについては,規定していない。 The Java Application Programming Interface を参照のこと)。

クラス SecurityManager で定義されたメソッドcheckSetFactory は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでファクトリのインストールが許可されている場合は,サブクラスでこのメソッドを上書きしなければならない。

20.17.27 public boolean checkTopLevelWindow()
throws SecurityException

このメソッドは,トップレベルウィンドウの生成が禁止されている場合,SecurityExceptionを投げる。 許可されている場合で,それが実行可能アプレット用ウィンドウであるという警告をウィンドウに表示する場合は,falseを返す。 セキュリティマネージャがウィンドウの生成に対して何も制約していない場合は,trueを返す。

このメソッドは,現在のセキュリティマネージャ(20.18.4)のために,クラスjava.awt.Windowのコンストラクタによって呼び出される。 (この仕様書では,これらのメソッドについては,規定していない。The Java Application Programming Interface を参照のこと。)

クラス SecurityManager によって定義されたメソッドcheckTopLevelWindow は,常に falseを返す。 インストールされたセキュリティマネージャがウィンドウの生成を制約していない場合や生成を禁止している場合,サブクラスでこのメソッドを上書きしなければならない。

20.17.28 public void checkPackageAccess(String packageName)
throws SecurityException

このメソッドは,現在のアプレットが実引数で指定されたパッケージにアクセスすることが禁止されている場合,SecurityExceptionを投げる。 このメソッドは,Java対応Webブラウザ用である。

クラス SecurityManager で定義されたメソッドcheckPackageAccess は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでアプレットがパッケージにアクセスすることが許可されている場合,サブクラスでこのメソッドを上書きしなければならない。

20.17.29 public void checkPackageDefinition(String packageName)
throws SecurityException

このメソッドは,現在のアプレットが実引数で指定されたパッケージ内のクラス(又はインタフェース)を定義することが禁止されている場合,SecurityExceptionを投げる。 このメソッドは,Java対応Webブラウザ用である。

クラス SecurityManager で定義されたメソッドcheckPackageAccess は,常に SecurityExceptionを投げる。 インストールされたセキュリティマネージャでアプレットがクラスを定義することが許可されている場合,サブクラスでこのメソッドを上書きしなければならない。

20.18 クラス java.lang.System

クラス Systemには,多数の有用なクラス変数及びクラスメソッドがある。このクラスのインスタンスは,生成できない。 クラスSystemが提供する機能には,標準入力,標準出力,及び標準エラー出力ストリーム,並びに,外部定義“属性”へのアクセス,ファイル及びライブラリのローディングの手段,並びに配列の一部を高速複写するユティリティメソッドがある。

public final class System {
    public static InputStream in;
    public static PrintStream out;
    public static PrintStream err;
    public static SecurityManager getSecurityManager();
    public static void setSecurityManager(SecurityManager s)
        throws SecurityException;
    public static long currentTimeMillis();
    public static Properties getProperties()
        throws SecurityException;
    public static void setProperties(Properties props)
        throws SecurityException;
    public static String getProperty(String key)
        throws SecurityException;
    public static String getProperty(String key, String defaults)
        throws SecurityException;
    public static void exit(int status) throws SecurityException;
    public static void gc();
    public static void runFinalization();
    public static void load(String filename)
        throws SecurityException, UnsatisfiedLinkError;
    public static void loadLibrary(String libname)
        throws SecurityException, UnsatisfiedLinkError;
    public static void 
        arraycopy(Object src, int srcOffset, Object dst, int dstOffset, int length)
        throws NullPointerException, ArrayStoreException, IndexOutOfBoundsException;
}

20.18.1 public static InputStream in;

この変数の初期値は,“標準”入力ストリームとする。このストリームは,初めから開いており,入力データを供給できる状態になっている。 通常,このストリームは,ホスト環境又はユーザが指定するキーボード入力又はその他の入力源に対応している。 このフィールドは, final ではないため,必要な場合は,その値を更新してもよい。

20.18.2 public static PrintStream out;

この変数の初期値は,“標準”出力ストリームとする。 このストリームは,初めから開いており,出力データを受け取ることができる状態になっている。 通常,このストリームは,ホスト環境又はユーザが指定するディスプレイ出力又はその他の出力先に対応している。 このフィールドは, final ではないので,必要な場合は,その値を更新してもよい。

簡単なJavaアプリケーションでは,1行のデータを出力するには,次のように記述する。

System.out.println(data)
クラス PrintStream のメソッド println(22.22)を参照のこと。

20.18.3 public static PrintStream err;

この変数の初期値は,“標準”エラー出力ストリームとする。このストリームは,初めから開いており,出力データを受け取ることができる状態になっている。 通常,このストリームは,ホスト環境又はユーザが指定するディスプレイ出力又はその他の出力先に対応している。 慣例として,この出力ストリームは,エラーメッセージ又はその他の情報など,ユーザの注意を即座に喚起する必要のある情報を表示するために使用する。 例え,主標準出力ストリーム,変数out,が一般には,連続して監視することが出来ない,ファイル又はその他の出力先にリダイレクトされている場合でもである。 このフィールドは,finalではないので,必要な場合は,その値を更新してもよい。

20.18.4 public static SecurityManager getSecurityManager()

現在実行中のJavaシステムに対してセキュリティマネージャが既に設定されている場合,そのセキュリティマネージャへの参照を返す。 そうでなければ,nullを返す。

20.18.5 public static void setSecurityManager(SecurityManager s)
throws SecurityException

現在実行中のJavaシステムに対してセキュリティマネージャが既に設定されている場合,SecurityExceptionを投げる。 そうでなければ,実引数が現在のセキュリティマネージャとして設定される。 実引数がnullであり,かつセキュリティマネージャが設定されていない場合,何も実行せずにそのまま制御を戻す。

20.18.6 public static long currentTimeMillis()

このメソッドは,現在の時刻と“エポック”と呼ばれる基準時刻 1970年1月1日 00:00:00 GMT との差(ミリ秒単位)を返す。 “コンピュータ上の時刻”と UTC(協定世界時:Coordinated Universal Time)の間に生じることがあるわずかなずれについては,クラスDate(21.3)の規定を参照のこと。

20.18.7 public static Properties getProperties()
throws SecurityException

セキュリティマネージャが存在する場合,最初に,checkPropertiesAccessメソッド(20.17.15)を実引数なしで呼び出す。

メソッド getPropertyによって使用される現在のシステム属性の集合を,Propertiesオブジェクト(21.6)として,返す。 現在のシステム属性の集合が存在しない場合,システム属性の集合を呼出して初期化する。 このシステム属性の集合は,常に,次のキーの値を含む。

キー名                            値
java.version                      Javaバージョン番号
java.vendor                       Javaベンダー指定文字列
java.vendor.url                   JavaベンダーのURL
java.home                         Javaのインストールディレクトリ
java.class.version                Javaのクラスファイル形式のバージョン番号
java.class.path                   Javaのクラスパス
os.name                           オペレーティングシステムの名前
os.arch                           オペレーティングシステムのアーキテクチャ
os.version                        オペレーティングシステムのバージョン
file.separator                    ファイルセパレータ (UNIXでは,/)
path.separator                    パスセパレータ(UNIXでは,:)
line.separator                    行セパレータ (UNIXでは,\n)
user.name                         ユーザのアカウント名
user.home                         ユーザのホームディレクトリ
user.dir                          ユーザの現在の作業ディレクトリ
セキュリティマネージャが,getPropertiesでシステム属性の集合を一括して取得することを許可していない場合でも,getProperty(20.18.9)で各属性を取得することを許可することを選択してもよい。

20.18.8 public static void setProperties(Properties props)
throws SecurityException

セキュリティマネージャが存在する場合,最初に,checkPropertiesAccessメソッド (20.17.15)を実引数なしで呼び出す。

このメソッドは,実引数の属性オブジェクトを メソッド getPropertyで使用する現在のシステム属性の集合として設定する。 クラスProperties(21.6)を参照のこと。 実引数がnullの場合,現在のシステム属性の集合は,忘却される。

20.18.9 public static String getProperty(String key)
throws SecurityException

セキュリティマネージャが存在する場合,最初に,checkPropertiesAccessメソッド(20.17.16)keyを実引数として呼び出す。

現在のシステム属性の集合が存在しない場合,getPropertiesメソッド(20.18.7)と同じ方法で,システム属性の集合を生成して初期化する。

このメソッドは,指定された文字列 keyに対応したシステム属性の値を返す。 そのキーをもつ属性がない場合,nullを返す。

20.18.10 public static String getProperty(String key, String defaults)
throws SecurityException

セキュリティマネージャが存在する場合,最初に,checkPropertyAccessメソッド(20.17.16)keyを実引数として呼び出す。

現在のシステム属性の集合が存在しない場合,getPropertiesメソッド(20.18.7)と同じ方法で,システム属性の集合を生成して初期化する。

指定された文字列 keyに対応したシステム属性の値を返す。 そのキーをもつ属性がない場合,実引数defaults を返す。

20.18.11 public static void exit(int status)
throws SecurityException

このメソッドは,現在実行中のJava仮想計算機を終了させる。 実引数は,状態コードとして使われる。 慣例として,ゼロ以外の状態コードは,異常終了を示す。

通常,このメソッドが処理を戻すことはない。

System.exit(n) の呼出しは,次の呼出しと同じとする。

Runtime.getRuntime().exit(n)
詳細については,クラス Runtime のメソッドexit(20.16.2)を参照のこと。

20.18.12 public static void gc()

このメソッドを呼び出すと,破棄されたオブジェクトが現在占有しているメモリを即座に再利用できるように,破棄されたオブジェクトの回収が試みられる。 メソッド呼出しから制御が戻った時点では,すべての破棄されたオブジェクトが可能な限り回収する努力がなされている。

System.gc() の呼出しは,次の呼出しと同じとする。

Runtime.getRuntime().gc()
詳細については,クラス Runtimegcメソッド(20.16.9)を参照のこと。

20.18.13 public static void runFinalization()

このメソッドを呼び出すと,Java仮想計算機では,破棄されたがそのfinalizeメソッドがまだ実行されていないオブジェクトのfinalizeメソッドの実行を試みる。 メソッド呼出しから制御が戻った時点では,未完了のファイナライズがすべて終了するための努力がなされている。

System.runFinalization()の呼出しは,次の呼出しと同じとする。

Runtime.getRuntime().runFinalization()
詳細については,クラス RuntimerunFinalizationメソッド (20.16.10)を参照のこと。

20.18.14 public static void load(String filename)
throws SecurityException, UnsatisfiedLinkError

このメソッドは,ローカルファイルシステムから指定されたファイル名をもつコードファイルをロードする。

System.load(name) の呼出しは,次の呼出しと同じとする。

Runtime.getRuntime().load(name)
詳細については,クラス Runtime のメソッド load(20.16.13)を参照のこと。

20.18.15 public static void loadLibrary(String libname)
throws SecurityException, UnsatisfiedLinkError

このメソッドは,ローカルファイルシステムから指定されたライブラリ名をもつライブラリコードファイルをロードする。

System.loadLibrary(name)の呼出しは,次の呼出しと同じとする。

Runtime.getRuntime().loadLibrary(name)
詳細については,クラス Runtime のメソッドloadLibrary(20.16.14)を参照のこと。

20.18.16 public static void arraycopy(Object src, int srcOffset, Object dst, int dstOffset, int length)
throws NullPointerException, ArrayStoreException, IndexOutOfBoundsException

scrによって参照される複写元配列の部分配列を,dstによって参照される複写先配列へ複写する。 複写される配列要素は,実引数length と等しい。 複写元配列の srcOffset から srcOffset+length-1までの位置にある要素が,複写先配列のdstOffset から dstOffset+length-1までの位置へ複写される。

実引数 srcdstが同じ配列オブジェクトを参照する場合,複写元配列の srcOffsetから srcOffset+length-1 までの位置にある要素が長さlengthの一時配列に複写され,その後,一時配列の内容が複写先配列のdstOffset から dstOffset+length-1位置に複写される。

dstnullである場合,NullPointerExceptionを投げる。

srcnullである場合,NullPointerExceptionを投げ,複写先配列は,変更されない。

そうでなければ,次のいずれかが成り立つ場合,ArrayStoreExceptionを投げ,複写先配列は,変更されない。

そうでなければで,次のいずれかが成り立つ場合,IndexOutOfBoundsExceptionを投げ,複写先配列は,変更されない。

そうでなければ,複写元配列の srcOffset からsrcOffset+length-1までの構成要素の実際の値に,代入変換によって,複写先配列の構成要素型に変換できないものがある場合,ArrayStoreExceptionを投げる。 ここで,klengthより小さく,負ではない整数の最小値とし,src[srcOffset+k]が複写先配列の要素型に変換できないものとする。 例外を投げると,複写元配列のsrcOffset から srcOffset+k-1までの位置にある構成要素は,複写先配列の dstOffset からdstOffset+k-1までの位置に複写されている。 これ以外の位置にある複写先配列の構成要素は,変更されない。(前述の制約により,この段落の内容は,両方の配列の要素が参照型である場合だけに適用される。)

20.19 インタフェースjava.lang.Runnable

Runnableインターフェイスは,そのインスタンスを新しいスレッドによって実行しようとするすべてのクラスで実装しなければならない。 該当するクラスに要求されることは,実引数を取らない run メソッドを実装することである。

public interface Runnable {
    public abstract void run();
}

20.19.1 public abstract void run()

runメソッド に求められることは,それは,どのような処理でも実行できることである。

Runnableインターフェイスを実装しているオブジェクトが,スレッド(20.20)を生成するために使用されると,そのスレッドの開始処理は,通常,その新しく開始されたスレッドの中で,そのオブジェクトのrunメソッドを呼び出す。

20.20 クラス java.lang.Thread

スレッドとは,一つの制御の連続的な流れである。 スレッドオブジェクトを使用すると,マルチスレッドのJavaプログラミングが可能になる。 一つのJava仮想計算機が,インターリーブ又は並行方式によって多数のスレッドを実行できる。

次のメソッドの規定では,“現在のスレッド”,“そのThread”,及び“そのスレッド”を区別することが重要である。 “現在のスレッド”とは,そのメソッドを実行中のスレッドのこととする。 “そのThread”とは,呼び出されたメソッドをもつオブジェクトのこととする。 “そのスレッド“とは,呼び出されたメソッドをもつThreadオブジェクトを表現するスレッドのこととする。


public class Thread implements Runnable {
    public final static int MIN_PRIORITY = 1;
    public final static int MAX_PRIORITY = 10;
    public final static int NORM_PRIORITY = 5;
    public Thread();
    public Thread(String name);
    public Thread(Runnable runObject);
    public Thread(Runnable runObject, String name);
    public Thread(ThreadGroup group, String name)
        throws SecurityException, IllegalThreadStateException;
    public Thread(ThreadGroup group, Runnable runObject)
        throws SecurityException, IllegalThreadStateException;
    public Thread(ThreadGroup group, Runnable runObject, String name)
        throws SecurityException, IllegalThreadStateException;
    public String toString();
    public void checkAccess() throws SecurityException;
    public void run();
    public void start()
        throws IllegalThreadStateException;
    public final void stop()
        throws SecurityException;
    public final void stop(Throwable thr)
        throws SecurityException, NullPointerException;
    public final void suspend()
        throws SecurityException;
    public final void resume()
        throws SecurityException;
    public final String getName();
    public final void setName(String name)
        throws SecurityException;
    public final ThreadGroup getThreadGroup();
    public final int getPriority();
    public final void setPriority(int newPriority)
        throws SecurityException, IllegalArgumentException;
    public final boolean isDaemon();
    public final void setDaemon(boolean on)
        throws SecurityException, IllegalThreadStateException;
    public final boolean isAlive();
    public int countStackFrames();
    public final void join()
        throws InterruptedException;
    public final void join(long millis)
        throws InterruptedException;
    public final void join(long millis, int nanos)
        throws InterruptedException;
    public void interrupt();
    public boolean isInterrupted();
    public static boolean interrupted();
    public static Thread currentThread();
    public static int activeCount();                // deprecated
    public static int enumerate(Thread tarray[]);   // deprecated
    public static void dumpStack();
    public static void yield();
    public static void sleep(long millis)
        throws InterruptedException;
    public static void sleep(long millis, int nanos)
        throws InterruptedException;
    public void destroy();
}
新しいThreadオブジェクトが生成された時点では,そのオブジェクトの表すスレッドは,まだアクティブではない。 他のスレッドが,そのThreadオブジェクトのstartメソッド(20.20.14)を呼出したときにアクティブになる。 これは,そのThreadオブジェクトの表すスレッドが,そのThreadオブジェクトのrunメソッド (20.20.13)を呼び出すことによって発生する。 アクティブになったスレッドは,次の五つのいずれかが起こり停止するまで有効になったままとする。

スレッドが消滅したとき,それを表現する,そのThreadオブジェクトに対して,notifyAllメソッド(20.1.10)を呼び出す。 この事実は,joinメソッド(20.20.2820.20.2920.20.30)が正しい操作を行うために重要である。 スレッドは又,消滅したとき,そのスレッドグループから削除される。 いったんスレッドが終了してしまうと,そのスレッドは,有効ではなくなり,再開できなくなる。

有効なスレッドは,一時停止(suspended) 及び 再開(resumed)することができる。 一時停止したスレッドは,有効と見なされるが,何も処理を実行せず,先の処理に進まず,仮想計算機の命令を何も実行しない。 スレッドの再開は,スレッドをアクティブな実行状態に復元する。 スレッドが一時停止するのは,それ自身又は他のスレッドが,そのスレッドを表現するThreadオブジェクトのsuspendメソッド(20.20.17)を呼出し,セキュリティマネージャ(20.17.11)suspendその処理の実行を承認したときとする。 スレッドが再開されるのは,別のスレッドが,そのスレッドを表現するThreadオブジェクトのresumeメソッド(20.20.18)を呼出し,セキュリティマネージャ(20.17.11)resume処理の実行を承認したときとする。

すべてのスレッドは,優先順位 (priority)をもつ。 処理する資源が競合する場合,通常は,優先順位の高いスレッドが,優先順位の低いスレッドに優先して実行される。 ただし,そのような優先順位は,最高順位のスレッドが常に実行中であることを保証しない,したがって,スレッドの優先順位を使って相互の排他制御を実装することは出来ない。 あるスレッドで実行されているコードがThreadオブジェクトを新しく生成する場合,新しく生成されたオブジェクトの優先順位は,生成したスレッドと同じ優先順位に初期設定される。 しかし,スレッドT の優先順位は,あるスレッドが T を表現するThreadオブジェクトのsetPriorityメソッドを呼出し,セキュリティマネージャ(20.17.11)setPriority処理の実行を承認すれば,いつでも変更できる。

各スレッドは,デーモン(daemon)として扱うこも,扱わないこともできる。 あるスレッドで実行中のコードがThreadオブジェクトを新しく生成したとき,新しく生成されるスレッドは,それを生成したスレッドがデーモンである場合にだけ,デーモンスレッドになる。 しかし,スレッドTをデーモンとして扱うかどうかは,そのスレッドがアクティブになる前に,他のスレッドがスレッドT を表すThreadオブジェクトのsetDaemonメソッドを呼出し,セキュリティマネージャ(20.17.11)setDaemon処理の実行を承認すれば,変更できる。

Java仮想計算機を起動すると,通常,一つのデーモンではないスレッドが存在する。 それは,一般的には,ある指定されたクラスのメソッドmainの呼出しによって開始する。 Java仮想計算機は,デーモンではないすべてのスレッドが停止するまで,スレッド実行モデルに従ってスレッドの実行を続行する。

スレッドを新しく生成するには,二つの方法がある。 一つは,あるクラスをThreadのサブクラスとして宣言する方法とする。 このサブクラスは,クラスThreadrunメソッドを上書きしなければならない。 そうすることで,サブクラスのインスタンスを生成して開始できる。 次の例は,指定された値を超える素数を計算するスレッドである。


class PrimeThread extends Thread {

long minPrime;
PrimeThread(long minPrime) { this.minPrime = minPrime; }
public void run() { // compute primes larger than minPrime ... }
}
次に挙げるコードは,スレッドを生成し,そのスレッドを実行する。


PrimeThread p = new PrimeThread(143);
p.start();

スレッドを生成するもう一つの方法は,Runnableインタフェースを実装するクラスを宣言することとする。 この場合も,そのクラスでrunメソッドを実装する必要がある。 そうすることで,そのクラスのインスタンスを生成し,Threadを生成するためにそれを使用して,開始できる。 同じ例を,この方法で記述すると,次のようになる。


class PrimeRun implements Runnable {

long minPrime;
PrimeRun(long minPrime) { this.minPrime = minPrime; }
public void run() { // compute primes larger than minPrime ... }
}
次に挙げるコードは,スレッドを生成し,そのスレッドの実行を開始する。


PrimeRun p = new PrimeRun(143);
new Thread(p).start();

すべてのスレッドは,識別のためのStringの名前をもつ。 複数のスレッドが,同じ名前をもつことができる。 スレッドの生成時に,名前を指定しないと,新しい名前が生成される。

まだ停止されていないすべてのスレッドは,あるスレッドグループ(20.21)に属している。 スレッドは,いつでも,それ自身のスレッドグループの中に,新しいスレッドを生成できる。 別のスレッドグループの中にスレッドを生成するためには,そのスレッドグループのcheckAccessメソッド(20.21.4の承認が必要である。 実際の承認は,セキュリティマネージャ(20.17.11)が行う。

20.20.1 public final static int MIN_PRIORITY = 1;

このフィールドの定数値は,スレッドに指定可能な最小の優先順位である1とする。

20.20.2 public final static int MAX_PRIORITY = 10;

このフィールドの定数値は,スレッドに指定可能な最大の優先順位である10 とする。

20.20.3 public final static int NORM_PRIORITY = 5;

このフィールドの定数値は,デーモンでないスレッドに指定可能な通常の優先順位である 5 とする。

20.20.4 public Thread()

このコンストラクタは,新しく生成されたThreadオブジェクトを,別の実行オブジェクトを何ももたず,新しく生成された名前をもち,その新しいスレッドを生成しているスレッドと同じスレッドグループに属するように,初期化する。

このコンストラクタは,明示的なコンストラクタ呼出しthis(null, null, gname) (20.20.10)と同じ効果をもつ。 ここで,gnameは,新しく生成された名前とする。 自動的に生成された名前の形式は,"Thread-"+n (n は,整数)とする。

20.20.5 public Thread(String name)

このコンストラクタは,新しく生成されたThreadオブジェクトを,別の実行オブジェクトを何ももたず,実引数 nameで指定された名前をもち,その新しいスレッドを生成しているスレッドと同じスレッドグループに属するように,初期化する。

このコンストラクタは,明示的なコンストラクタ呼出しthis(null, null, name) (20.20.10)と同じ効果をもつ。

20.20.6 public Thread(Runnable runObject)

このコンストラクタは,新しく生成されたThreadオブジェクトを,実引数に指定された runObjectを別の実行オブジェクトとしてもち,新しく生成された名前をもち,その新しいスレッドを生成しているスレッドと同じスレッドグループに属するように,初期化する。

このコンストラクタは,明示的なコンストラクタ呼出しthis(null, runObject, gname) (20.20.10)と同じ効果をもつ。ここで,gnameは,新しく生成される名前とする。 自動的に生成される名前の形式は,"Thread-"+n (n は,整数)とする。

20.20.7 public Thread(Runnable runObject, String name)

このコンストラクタは,新しく生成されたThreadオブジェクトを,実引数で指定された runObjectを別の実行オブジェクトとしてもち,実引数で指定された名前をもち,その新しいスレッドを生成しているスレッドと同じスレッドグループに属するように,初期化する。

このコンストラクタは,明示的なコンストラクタ呼出しthis(null, runObject, name) (20.20.10)と同じ効果をもつ。

20.20.8 public Thread(ThreadGroup group, String name)
throws SecurityException, IllegalThreadStateException

まず,このコンストラクタは,groupnullでなければ,実引数なしでそのスレッドグループのcheckAccessメソッド(20.21.4)を呼び出す。

このコンストラクタは,新しく生成されたThreadオブジェクトを,別の実行オブジェクトをもたず,実引数で指定された名前をもち,groupで参照されるスレッドグループに属するように,初期化する(ただし,groupnullの場合,新しいスレッドは,その新しいスレッドを生成しているスレッドと同じスレッドグループに属する)。

groupが,destroyメソッド (20.21.11)によって破棄されたThreadGroupの場合,IllegalThreadStateExceptionを投げる。

このコンストラクタは,明示的なコンストラクタ呼出しThread(group, null,name) (20.20.10)と同じ効果をもつ。

20.20.9 public Thread(ThreadGroup group, Runnable runObject)
throws SecurityException, IllegalThreadStateException

まず,このコンストラクタは,groupnullでなければ,実引数なしでそのスレッドグループのcheckAccessメソッド(20.21.4)を呼び出す。

このコンストラクタは,新しく生成されたThreadオブジェクトを,実引数で指定されたrunObjectを別の実行オブジェクトとしてもち,新しく生成された名前をもち,groupで参照されるスレッドグループに属するように,初期化する(ただし,groupnullの場合,新しいスレッドは,新しいスレッドを生成しているスレッドと同じスレッドグループに属する)。

group が,destroyメソッド (20.21.11)によって破棄されたThreadGroupの場合,IllegalThreadStateExceptionを投げる。

このコンストラクタは,明示的なコンストラクタ呼出しthis(group, runObject, gname) (20.20.10)と同じ効果をもつ。 ここで,gnameは,新しく生成される名前とする。 自動的に生成される名前の形式は,"Thread-"+n (n は,整数)とする。

20.20.10 public Thread(ThreadGroup group, Runnable runObject, String name)
throws SecurityException, IllegalThreadStateException

まず,このコンストラクタは,groupnullでなければ,実引数なしでそのスレッドグループのcheckAccessメソッド(20.21.4)を呼び出す。 この結果,SecurityExceptionを投げることもある。

このコンストラクタは,新しく生成されたThreadオブジェクトを,実引数で指定された runObjectを別の実行オブジェクトとしてもち,実引数 nameで指定された名前をもち,groupで参照されるスレッドグループに属するように,初期化する(ただし,groupがnull の場合,新しいスレッドは,新しいスレッドを生成しているスレッドと同じスレッドグループに属する)。

group が,destroyメソッド (20.21.11)によって破棄されたThreadGroupの場合,IllegalThreadStateExceptionを投げる。

新しく生成されたスレッドの優先順位は,それを生成するスレッド---つまり現在実行中のスレッド---と同じ優先順位とする。 メソッドsetPriority(20.20.23)を使用すると,優先順位を新しい値に変更できる。

新しく生成されたスレッドは,それを生成するスレッドがデーモンである場合にだけ,初期設定でデーモンスレッドとして設定される。 メソッドsetDaemon(20.20.25)を使用すると,スレッドをデーモンとするかどうかを変更できる。

20.20.11 public String toString()

戻り値は,次の七つの文字列が連結された文字列である。

上記のすべてのリテラル文字は,UnicodeのASCII部分集合に属する。

このメソッドは,Object のメソッド toString(20.1.2)を上書きする。

20.20.12 public void checkAccess() throws SecurityException

セキュリティマネージャが存在していれば,そのcheckAccessメソッド(20.17.11)を,このThreadオブジェクトを実引数として呼び出す。 この結果,SecurityExceptionを投げることもある。

このメソッドは,実引数を取らないstopメソッド(20.20.15), 実引数を一つ取るstopメソッド(20.20.16)suspendメソッド(20.20.17)resumeメソッド(20.20.18)setNameメソッド(20.20.20)setPriorityメソッド(20.20.23), 及びsetDaemonメソッド(20.20.25)によって呼び出される。

20.20.13 public void run()

このメソッドの一般的な役割は,そのスレッドが実行するように意図された動作を実行することである。

クラスThreadrunメソッド は,別の実行オブジェクトのrunメソッド が存在すれば,単にそれを呼び出すだけとする。 存在しなければ,何も実行しない。

20.20.14 public void start()
throws IllegalThreadStateException

このメソッドを呼び出すことで,このスレッドを開始する。 このスレッドは,このThreadオブジェクト のrunメソッド を呼び出す。 その結果,二つのスレッド---つまり,現在のスレッド(startメソッドの呼出しから戻ったもの)及びこのThreadオブジェクト によって表現されるスレッド(そのrunメソッドを実行する)----が並列に実行される。

20.20.15 public final void stop()
throws SecurityException

まず,このThreadオブジェクトのcheckAccessメソッド(20.17.11)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityExceptionが投げることがある。

このメソッドは,このスレッドが何を実行しているかにかかわらずそれを異常終了させ,例外としてThreadDeathオブジェクトを投げる。 これを実行するために,このスレッドは,一時停止していれば再開され,及び休眠していれば起こされる。

まだ開始していないスレッドを終了させることもできる。 この場合,そのスレッドは,将来開始された時点で,直ちに終了する。

ユーザコードでは,特別なクリーンアップ処理が必要でない限り,ThreadDeathの捕捉を試みてはならない(ThreadDeath例外を投げるプロセスは,スレッドが正式に消滅する前に try 文の finally 節を実行することに注意のこと)。 catch節がThreadDeathオブジェクトを捕捉する場合は,スレッドが実際に消滅するように,必ずそのThreadDeathオブジェクトを再度投げることが重要である。 捕捉されない例外に反応するトップレベルのエラーハンドラは,捕捉されない例外がThreadDeathのインスタンスである場合,メッセージは,出力せず,その他のシグナルを発行せず,ユーザにも通知しない。

20.20.16 public final void stop(Throwable thr)
throws SecurityException, NullPointerException

まず,このThreadオブジェクトのcheckAccessメソッド(20.20.12)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityException を投げることがある。

実引数 thrnull の場合,(現在のスレッド)でNullPointerException を投げる。

このメソッドは,このスレッドが何を実行しているかにかかわらずそれを異常終了させ,例外としてThrowableオブジェクトの thrを投げる。 これを実行するために,このスレッドは,一時停止していれば再開され,及び休眠していれば起こされる。 これは,普通は,実行しない処理である。 通常は,実引数を取らないstopメソッド(20.20.15)を使用すべきである。

まだ開始していないスレッドを終了させることもできる。この場合,そのスレッドは,開始された時点で,直ちに終了する。

20.20.17 public final void suspend()
throws SecurityException

まず,このThreadオブジェクトのcheckAccessメソッド(20.20.12)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityException を投げることがある。

このメソッドは,このスレッドが有効(20.20.26)であれば,それを一時停止し,このスレッドが再開されるまで,処理を先に進ませない。 既に一時停止状態にあるスレッドに対してこのメソッドを実行することもできる。 この場合,スレッドは,一時停止したままになる。一時停止は,加算されない。 たとえスレッドを複数回一時停止しても,1回だけresume を呼び出せば,再開できる。

20.20.18 public final void resume()
throws SecurityException

まず,このThreadオブジェクトのcheckAccessメソッド(20.20.12)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityException を投げることがある。

このメソッドは,このスレッドが有効(20.20.26)だが一時停止している場合,それを再開し,実行を続行させる。 一時停止していないスレッド又はすでに再開されているスレッドにこのメソッドを実行することもできる。 この場合,実行が続行される。 再開は,加算されない。 たとえスレッドを複数回再開しても,1回だけsuspend を呼び出せば,一時停止できる。

20.20.19 public final String getName()

このThreadオブジェクトの現在の名前を Stringとして返す。

20.20.20 public final void setName(String name)
throws SecurityException

まず,このThreadオブジェクトのcheckAccessメソッド(20.20.12)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityException を投げることがある。

このThreadオブジェクトの名前を,実引数 nameと等しくなるように変更する。

20.20.21 public final ThreadGroup getThreadGroup()

このメソッドは,このスレッドが有効である場合,このスレッドが属しているスレッドグループを表すThreadGroupオブジェクトへの参照を返す。 このスレッドが消滅している(メソッドstopによって終了している)場合,null を返す。

20.20.22 public final int getPriority()

このThreadオブジェクトの現在の優先順位を返す。

20.20.23 public final void setPriority(int newPriority)
throws SecurityException, IllegalArgumentException

まず,このThreadオブジェクトのcheckAccessメソッド(20.20.12)を実引数なしで呼び出す。 その結果,現在のスレッドの中にSecurityException を投げることがある。

実引数 newPriorityMIN_PRIORITY (20.20.1)より小さい又はMAX_PRIORITY (20.20.2)より大きい場合,IllegalArgumentExceptionを投げる。

そうでなければ,このThreadオブジェクトの優先順位を,指定した newPriority 及びそのスレッドのスレッドグループ(20.20.21)に許された最高優先順位(20.21.12)のうち,小さい方に設定する。

20.20.24 public final boolean isDaemon()

The result is true if and only if this thread is marked as a daemon thread. このスレッドがデーモンスレッドとしてマークされている場合,またその場合にだけtrue を返す。

20.20.25 public final void setDaemon(boolean on)
throws SecurityException, IllegalThreadStateException

まず,このThreadオブジェクトのcheckAccessメソッド(20.20.12)を実引数なしで呼び出す。 その結果,現在のスレッドの中にSecurityException を投げることがある。

このスレッドが有効であれば,IllegalThreadStateExceptionを投げる。 そうでなければ,実引数が trueであれば,このスレッドをデーモンスレッドであるとマークし,実引数がfalseであれば,デーモンスレッドでないとマークする。

20.20.26 public final boolean isAlive()

このメソッドは,このスレッドが有効である(開始され,まだ消滅していない)場合にだけ,trueを返す。

20.20.27 public int countStackFrames()

このメソッドは,このスレッドに対して現在アクティブになっているJava仮想計算機のスタックフレーム数を返す。

20.20.28 public final void join() throws InterruptedException

このメソッドは,(クラス Objectwaitメソッド(20.1.6)を使用して)このスレッドが消滅するまで現在のスレッドを待機させる。

現在のスレッドが待機中に,別のスレッドから割り込まれる(20.20.31)と待機を終了し,InterruptedExceptionを投げる。

20.20.29 public final void join(long millis)
throws InterruptedException

このメソッドは,(クラス Objectwaitメソッド(20.1.7)を使用して)このスレッドが消滅するか又は,指定された実時間が経過するまで現在のスレッドを待機させる。

実時間は,ミリ秒単位で計測され,millisで指定する。 ただし,millisがゼロの場合は,時間を考慮せず,このメソッドは,このスレッドが消滅するまで待機する。

現在のスレッドが待機中に,別のスレッドから割り込まれる(20.20.31)と待機を終了し,InterruptedExceptionを投げる。

20.20.30 public final void join(long millis, int nanos)
throws InterruptedException

このメソッドは,(クラス Objectwaitメソッド(20.1.8)を使用して)このスレッドが消滅するか又は,指定された実時間が経過するまで現在のスレッドを待機させる。

実時間は,ナノ秒単位で計測され,次の式で求められる。

1000000*millis+nanos
ナノ秒単位で表す点を除き,このメソッドの動作は,実引数を一つ取るメソッドjoin(20.20.29)と同じとする。 特に,join(0,0)は, join(0) と同じとする。

現在のスレッドが待機中に,別のスレッドから割り込まれる(20.20.31)と待機を終了し,InterruptedExceptionを投げる。

20.20.31 public void interrupt()

このスレッドに対して割り込みを要求する。 ただし,このスレッドは,必ずしも即座に割り込みに反応する必要はない。 このスレッドが待機中であれば,それを再開し,InterruptedExceptionを投げる。

[このメソッドは,バージョン1.1のJava Versionで導入される予定である。]

20.20.32 public boolean isInterrupted()

このメソッドは,このスレッドに対して割り込み要求が登録されている場合,またその場合にだけ,trueを返す。

[このメソッドは,バージョン1.1のJava Versionで導入される予定である。]

20.20.33 public static boolean interrupted()

現在のスレッドに対して割り込み要求が登録されている場合にだけ,trueを返す。

[このメソッドは,バージョン1.1のJava Versionで導入される予定である。]

20.20.34 public static Thread currentThread()

現在のスレッドを表現するThreadオブジェクトを返す。

20.20.35 public static int activeCount()

このメソッドは,現在のスレッドが属しているスレッドグループ内にあるアクティブなスレッドの数を返す。 これには,そのスレッドグループのサブグループ内のスレッドも含まれる。 これは,次の式の値と等しくなる。

Threads.currentThread().getThreadGroup().activeCount()
[このメソッドは,バージョン1.1のJavaが提供された後は,使用するべきでない。代わりに,次の式を使用する。

Threads.currentThread().getThreadGroup().allThreadsCount()
クラスThreadGroup のメソッド allThreadsCountを参照のこと。]

20.20.36 public static int enumerate(Thread tarray[])

現在のスレッドが属しているスレッドグループ内にあるアクティブなスレッド,そのスレッドグループのサブグループ内にあるスレッドを含む,を数え上げ,それらのThreadオブジェクトを配列 tarrayに格納する。 実際に配列に入ったスレッドの数を返す。 この値を nとすると,スレッドは, tarray の要素 0 からn-1 に入る。 スレッドの数が tarray の長さを超えると,スレッド群から tarray.length個を任意に選択して,配列 tarray を満たす。

[このメソッドは,バージョン1.1のJavaが提供された後は,使用するべきでない。代わりに,次の式を使用する。

Threads.currentThread().getThreadGroup().allThreads()
クラス ThreadGroup のメソッド allThreadsを参照のこと。]

20.20.37 public static void dumpStack()

このメソッドは,現在のスレッドのスタックダンプを出力するためのユティリティメソッドとする。 これは,次の式の値と等しくなる。

new Exception("Stack trace").printStackTrace()
クラス Throwable のメソッド printStackTrace(20.22.6)を参照のこと。

20.20.38 public static void yield()

このメソッドは,現在実行しているスレッドの実行権を他のスレッドに譲る,スレッドスケジューラが,別の実行可能なスレッドを選択して実行できるようにする。

20.20.39 public static void sleep(long millis)
throws InterruptedException

このメソッドは,現在実行しているスレッドの実行権を他のスレッドに譲り,指定された実時間が経過するまでそのスレッドを実行しないようにする。

実時間は,ミリ秒単位で計測され, millis で指定する。

現在のスレッドが待機中に,別のスレッドから割り込まれる(20.20.31)と待機を終了し,InterruptedExceptionを投げる。

20.20.40 public static void sleep(long millis, int nanos)
throws InterruptedException

このメソッドは,現在実行しているスレッドの実行権を他のスレッドに譲り,指定された実時間が経過するまでそのスレッドを実行されないようにする。

実時間は,ナノ秒単位で計測され,次の式で求められる。

1000000*millis+nanos
ナノ秒単位で表す点を除き,このメソッドの動作は,実引数を一つ取るメソッドsleep(20.20.39)と同じとする。特に,sleep(0,0)は,sleep(0)と同じとする。

現在のスレッドが待機中に,別のスレッドから割り込まれる(20.20.31)と待機を終了し,InterruptedExceptionを投げる。

20.20.41 public void destroy()
throws SecurityException

まず,このThreadオブジェクトのcheckAccessメソッド(20.20.12)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityException を投げることがある。

その後,クリーンアップをせずに,このスレッドを破棄する。 スレッドがロックをかけたモニタは,すべてロックされたままとする。

[このメソッドは,初期のバージョンのJavaから1.1まで実装されていない。]

20.21 クラス java.lang.ThreadGroup

スレッドグループは,スレッド及びスレッドグループの集合とする。 すべてのスレッドは,ある一つのスレッドグループに属している。 また,すべてのスレッドグループは,“システムスレッドグループ”を除き,ある他のスレッドグループに属している。 つまり,スレッドグループは,システムスレッドグループをルートとする木構造になっている。

スレッドグループは,スレッドを管理し,セキュリティ上の境界を設定する手段を提供する。 例えば,スレッドは,それ自身が属しているスレッドグループ内に新しいスレッドを常に生成できるが,しかし,別のスレッドグループに新しいスレッドを生成するには,スレッドグループを生成するときと同じく,セキュリティマネージャ(20.17)の承認が必要である。

public class ThreadGroup {
    public ThreadGroup(String name)
        throws SecurityException;
    public ThreadGroup(ThreadGroup parent, String name)
        throws NullPointerExpression, SecurityException,
            IllegalThreadStateException;
    public String toString();
    public final void checkAccess();
    public final String getName();
    public final ThreadGroup getParent();
    public final boolean parentOf(ThreadGroup g);
    public final void stop()
        throws SecurityException;
    public final void suspend()
        throws SecurityException;
    public final void resume()
        throws SecurityException;
    public final void destroy()
        throws SecurityException, IllegalThreadStateException;
    public final int getMaxPriority();
    public final void setMaxPriority(int newMaxPriority)
        throws SecurityException, IllegalArgumentException;
    public final boolean isDaemon();
    public final void setDaemon(boolean daemon)
        throws SecurityException;
    public int threadsCount();
    public int allThreadsCount();
    public int groupsCount();
    public int allGroupsCount();
    public Thread[] threads();
    public Thread[] allThreads();
    public ThreadGroup[] groups();
    public ThreadGroup[] allGroups();
    public int activeCount();                   // deprecated
    public int activeGroupCount();              // deprecated
    public int enumerate(Thread list[]);        // deprecated
    public int enumerate(Thread list[],         // deprecated
            boolean recurse);
    public int enumerate(ThreadGroup list[]);   // deprecated
    public int enumerate(ThreadGroup list[],    // deprecated
            boolean recurse);
    public void list();
    public void uncaughtException(Thread t, Throwable e);
}
すべてのスレッドグループは,最高優先順位(maximum priority)をもつ。 あるスレッドの優先順位(20.20.23)は,そのスレッドグループの最高優先順位より高く設定することはできない。

各スレッドグループは,デーモンとしてマークすることも,しないこともできる。 新しいスレッドグループオブジェクトが生成されると,そのスレッドグループが属するるスレッドグループがデーモンである場合にだけ,そのスレッドグループは,デーモンとしてマークされる。 しかし,スレッドグループ G のデーモン性の設定は,Gを表現するスレッドグループオブジェクトのsetDaemonメソッドを呼び出すことによって,いつでも変更することができる(ただし,セキュリティマネージャ(20.17.12)setDaemonの実行を承認した場合)。

すべてのスレッドグループは,識別のために使用するStringの名前をもつ。 複数のスレッドグループが,同じ名前をもっていてもかまわない。

スレッドグループを生成するには,親スレッドグループとなるスレッドグループのcheckAccessメソッド(20.21.4)の承認が必要である。 実際の承認は,セキュリティマネージャ(20.17.11)が行なう。

20.21.1 public ThreadGroup(String name)
throws SecurityException

まず,現在のスレッドが属しているスレッド グループのcheckAccessメソッド (20.21.4)を実引数なしで呼び出す。

このコンストラクタは,新しく生成されたThreadGroupオブジェクトを,指定されたnameをその名前とし,新しいスレッドグループを生成しているスレッドと同じスレッドグループに属するるように,初期化する。

このコンストラクタは,明示的なコンストラクタ呼出しthis(Thread.currentThread().getThreadGroup(), name) (20.21.2)と同じ効果をもつ。

20.21.2 public ThreadGroup(ThreadGroup parent, String name)
throws NullPointerExpression, SecurityException, IllegalThreadStateException

まず,現在のスレッドが属しているスレッドグループのcheckAccessメソッド (20.21.4)を実引数なしで呼び出す。

parentnullである場合,NullPointerExpressionを投げる。 parentdestroyメソッド (20.21.11)によって破棄されたスレッドグループである場合,IllegalThreadStateExceptionを投げる。

このコンストラクタは,新しく生成されたThreadGroupオブジェクトを,指定されたname をその名前とし,parentで表現されるスレッドグループに属するように,初期化する。

新しく生成されたスレッドグループの最高優先順位は,parentと同じ最高優先順位に設定される。 メソッド setMaxPriority(20.21.13)を使用すると,最高優先順位をこれより低い値に変更できる。

新しく生成したスレッドグループは,parentがデーモンスレッドグループである場合にだけ,初期設定でデーモンスレッドグループとして設定される。 メソッドsetDaemon(20.21.15)を使用して,あるスレッドグループを,デーモンスレッドグループとするかどうかを変更することができる。

20.21.3 public String toString()

戻り値は,次の六つの文字列が連結された文字列とする。

上記のすべてのリテラル文字は,UnicodeのASCII部分集合に属する。

このメソッドは,ObjecttoStringメソッド(20.1.2)を上書きする。

20.21.4 public final void checkAccess()

セキュリティマネージャが存在する場合,そのcheckAccessメソッド(20.17.12)をこのThreadGroupオブジェクトを実引数として呼び出す。 この結果,現在のスレッドの中にSecurityExceptionを投げることがある。

このメソッドは,メソッド stop(20.21.8), メソッドsuspend(20.21.9), メソッドresume(20.21.10), メソッドdestroy(20.21.11), メソッドsetMaxPriority(20.21.13), 及びsetDaemonメソッド(20.21.15)によって呼び出される。

20.21.5 public final String getName()

このThreadGroupオブジェクトの現在の名前を Stringとして返す。

20.21.6 public final ThreadGroup getParent()

このメソッドは,このスレッドグループが属しているスレッドグループを表すThreadGroupオブジェクトを返す。 このスレッドグループが,スレッドグループ階層のルートにあるシステムスレッドグループである場合,nullを返す。

20.21.7 public final boolean parentOf(ThreadGroup g)

このメソッドは,このスレッドグループが g自身であるか又は,このメソッドを gの親であるスレッドグループに対して適用したとき trueを返す場合にだけ,true を返す。 別の言い方をすれば,このメソッドは,このスレッドグループがgの祖先であるか又は,たぶんg自身であるかどうかを返す。

(このメソッドの名前は,適切とは言えない。より正確には,難しい言い方で読みにくいかもしれないが,parentOfReflexiveTransitiveClosure(再帰的推移閉包の親)とでもすべきである。)

20.21.8 public final void stop() throws SecurityException

まず,現在のスレッドが属しているスレッドグループのcheckAccessメソッド(20.21.4)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityExceptionを投げることがある。

この ThreadGroup及びそのすべてのサブグループに属している,すべての Threadを終了する。 より正確には,この ThreadGroupに属しているすべての ThreadGroup 及びすべての Thread に対して,メソッド stop(20.20.15)を呼び出す。

20.21.9 public final void suspend() throws SecurityException

まず,このThreadGroupオブジェクトのcheckAccessメソッド(20.21.4)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityExceptionを投げることがある。

このスレッドグループ及びそのすべてのサブグループに属しているすべてのスレッドを一時停止する。 より正確には,このThreadGroup に属しているすべての ThreadGroup及びすべての Thread に対して,メソッド suspend(20.20.17)を呼び出す。

20.21.10 public final void resume() throws SecurityException

まず,このThreadGroupオブジェクトのcheckAccessメソッド(20.21.4)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityExceptionを投げることがある。

このスレッドグループ及びそのすべてのサブグループに属しているすべてのスレッドを再開する。 より正確には,このThreadGroup に属しているすべての ThreadGroup及びすべての Thread に対して,メソッド resume(20.20.17)を呼び出す。

20.21.11 public final void destroy()
throws SecurityException, IllegalThreadStateException

まず,このThreadGroupオブジェクトのcheckAccessメソッド(20.21.4)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityExceptionを投げることがある。

このスレッドグループは,破棄される。 既に破棄されている場合又は直接このグループに属しているスレッドが存在する場合,IllegalThreadStateExceptionを投げる。 そうでなければ,このスレッドグループに属しているすべてのスレッドグループに対して,このメソッドを再帰的に呼び出し,このスレッドグループを,その親スレッドグループから削除する。

デーモンスレッドグループとして現在設定されているスレッドグループは,次の両方の条件が成り立つ場合,自動的に破棄される。

20.21.12 public final int getMaxPriority()

このThreadGroupオブジェクトの,現在の最高優先順位を返す。

20.21.13 public final void setMaxPriority(int newMaxPriority)
throws SecurityException, IllegalArgumentException

まず,このThreadGroupオブジェクトのcheckAccessメソッド(20.21.4)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityExceptionを投げることがある。

実引数 newMaxPriorityMIN_PRIORITY (20.20.1)より小さいか又は,MAX_PRIORITY (20.20.2)より大きい場合,IllegalArgumentException を投げる。

そうでなければ,このThreadGroupオブジェクトの優先順位は,実引数で指定された newMaxPriority及び,このスレッドグループの親に許された最高優先順位(20.21.12)のうち,小さい方に設定される。 (このスレッドグループが,親をもたないシステムスレッドグループであれば,それの最高優先順位を,そのままnewMaxPriorityに設定する。) その後,このスレッドグループに属しているすべてのスレッドグループに対して,newMaxPriorityを実引数として,このメソッドを再帰的に呼び出す。

20.21.14 public final boolean isDaemon()

このメソッドは,現在このスレッドグループがデーモンスレッドグループとして設定されている場合にだけ,trueを返す。

20.21.15 public final void setDaemon(boolean daemon)
throws SecurityException

まず,このThreadGroupオブジェクトのcheckAccessメソッド(20.21.4)を実引数なしで呼び出す。 この結果,現在のスレッドの中にSecurityExceptionを投げることがある。

このスレッドグループを,実引数が trueであれば,デーモンスレッドグループとして設定し,falseであれば,デーモンスレッドグループではないとして設定する。

20.21.16 public int threadsCount()

このメソッドは,このスレッドグループに直接属しているスレッドの数を返す。

20.21.17 public int allThreadsCount()

このメソッドは,このスレッドグループ又はそのいずれかのサブグループに直接属している,スレッドの数を返す。

20.21.18 public int groupsCount()

このメソッドは,このスレッドグループに直接属している,スレッドグループの数を返す。

20.21.19 public int allGroupsCount()

このメソッドは,このスレッドグループ又はそのすべてのサブグループに直接属している,スレッドグループの数を返す。

20.21.20 public Thread[] threads()

このメソッドは,配列を新しく生成し,このスレッドグループに直接属している,すべてのスレッドのThreadオブジェクトを格納して返す。

20.21.21 public Thread[] allThreads()

このメソッドは,配列を新しく生成し,このスレッドグループ又はそのすべてのサブグループに直接属している,すべてのスレッドのThreadオブジェクトを格納して返す。

20.21.22 public ThreadGroup[] groups()

このメソッドは,配列を新しく生成し,このスレッドグループに直接属している,すべてのスレッドのThreadGroupオブジェクトを格納して返す。

20.21.23 public ThreadGroup[] allGroups()

このメソッドは,配列を新しく生成し,このスレッドグループ又はそのいずれかのサブグループに直接属している,すべてのスレッドのThreadGroupオブジェクトを格納して返す。

20.21.24 public int activeCount()

[このメソッドは,Java Version 1.1が提供された後では,使用するべきではない。代わりに,これと同等のメソッドallThreadsCountを使用すること。]

20.21.25 public int activeGroupCount()

[このメソッドは,Java Version 1.1が提供された後では使用するべきではない。代わりに,これと同等のメソッドallGroupsCountを使用すること。]

20.21.26 public int enumerate(Thread list[])

[このメソッドは,Java Version 1.1が提供された後では,使用するべきではない。代わりに,これと同等のメソッドallThreadsを使用すること。]

20.21.27 public int enumerate(Thread list[], boolean recurse)

[このメソッドは,Java Version 1.1が提供された後では,使用するべきではない。代わりに,これと同等のメソッドthread 又はメソッド allThreads を使用すること。]

20.21.28 public int enumerate(ThreadGroup list[])

[このメソッドは,Java Version 1.1が提供された後では,使用するべきではない。代わりに,これと同等のメソッドallGroupsを使用すること。]

20.21.29 public int enumerate(ThreadGroup list[], boolean recurse)

[このメソッドは,Java Version 1.1が提供された後では,使用するべきではない。代わりに,これと同等のメソッドgroups又はメソッド allGroups を使用すること。]

20.21.30 public void list()

このメソッドは,このスレッドグループの詳細な情報を出力ストリームSystem.out (20.18.2)に出力する。 これは,デバッグ用のユティリティである。

出力は,行の並びになる。 各行は,(字下げ用の)空白の後ろに,toString表現の,一つのスレッド(20.20.11)又は一つのスレッドグループ(20.21.3)を含む。

1行目は,このスレッドグループの toString表現であり,字下げはない。 2行目以降は,再帰規則に従って生成される。 つまり,ある行にスレッドグループ Gn 個の空白で字下げして出力し,その直後に,G に直接属しているスレッドを1行に一つずつ 個の空白で字下げして出力する,さらに,その直後に G に直接属しているスレッドグループを1行に一つずつ個の空白で字下げして出力する。これを,再帰的に繰り返す。

20.21.31 public void uncaughtException(Thread t, Throwable e)

メソッドuncaughtExceptionは,このスレッドグループに直接属しているスレッドが,そのスレッドの中で捕捉されない例外を投げたために消滅するときに,呼び出される。 実引数は,問題となっているスレッドのThreadオブジェクト及び投げられたThrowableオブジェクトとする。 その後,uncaughtExceptionメソッドは,あらゆる適切な動作を取ることができる。

uncaughtExceptionは,例外を捕捉できなかったスレッドで呼び出す,したがって,tは,現在のスレッドとする。 uncaughtExceptionの呼出しは,スレッドが消滅する前に実行する最後の動作とする。 uncaughtExceptionの呼出し自身が,(捕捉されない)例外に終わると,呼出しを無視してスレッドは,そのまま消滅する。

クラス ThreadGroup に定義してある,メソッドuncaughtExceptionは,二つの動作のいずれかを実行する。 このスレッドグループが,親スレッドグループをもつならば,このメソッドが,その親スレッドグループに対して,同じ実引数で呼び出される。 このスレッドグループが,システムスレッドグループ(つまり,親がない)であり,例外eThreadDeath (20.22)のインスタンスでなければ,eに対するスタックトレース(20.22.6)System.err フィールド(20.18.3)の値であるエラー出力ストリームに出力する。

ThreadGroup のサブクラスでは,uncaughtExceptionメソッドを上書きしてもよい。

20.22 クラス java.lang.Throwable 及びそのサブクラス

throw(14.16)は,クラスThrowable及びそのサブクラスのインスタンスだけで許されている。 二つのサブクラスError 及び Exceptionのインスタンスは,慣例的に,例外的な状況が発生したことを示すために使用される。 一般的に,これらのインスタンスは,関連する情報(スタックトレースデータなど)を入れるために,例外的な状況が発生したコンテキストの中で新しく生成される。

次のリストは,Java言語のパッケージ java.langに,あらかじめ定義してあるすべての例外クラスの階層的な関係を示している。


Throwable
    Error
        LinkageError
            ClassCircularityError
            ClassFormatError
        ExceptionInInitializerError
            IncompatibleClassChangeError
                AbstractMethodError
                IllegalAccessError
                InstantiationError
                NoSuchFieldError
                NoSuchMethodError
            NoClassDefFoundError
            UnsatisfiedLinkError
            VerifyError
        VirtualMachineError
            InternalError
            OutOfMemoryError
            StackOverflowError
            UnknownError
        ThreadDeath
    Exception
        ClassNotFoundException
        CloneNotSupportedException
        IllegalAccessException
        InstantiationException
        InterruptedException
        RuntimeException
            ArithmeticException
            ArrayStoreException
            ClassCastException
            IllegalArgumentException
                IllegalThreadStateException
                NumberFormatException
            IllegalMonitorStateException
            IndexOutOfBoundsException
            NegativeArraySizeException
            NullPointerException
            SecurityException
慣例的に,クラス Throwable及びそのすべてのサブクラスには,二つのコンストラクタがあり,一方のコンストラクタは,実引数を取らず,もう一方のコンストラクタは,エラーメッセージの生成に使用できるStringを実引数として取る。 これは,ExceptionInInitializerErrorを除き,上記のすべてのクラスに当てはまる。 これらの定義済みクラスには,コンストラクタ以外に新しい内容はなく,クラスThrowable からメソッドを継承する。

public class Throwable {
    public Throwable();
    public Throwable(String message);
    public String toString();
    public String getMessage();
    public Throwable fillInStackTrace();
    public void printStackTrace();
    public void printStackTrace(java.io.PrintStream s);
}

20.22.1 public Throwable()

このコンストラクタは,Throwableオブジェクトを新しく生成し,そのエラーメッセージ文字列を nullとして初期化する。 また,このオブジェクトに対して,メソッドfillInStackTrace(20.22.5)を呼び出す。

20.22.2 public Throwable(String message)

このコンストラクタは,新しく生成したThrowableオブジェクトを,エラーメッセージの文字列s への参照を保存することによって初期化し,後でgetMessageメソッド(20.22.3)で,取出しできるようにする。 また,このオブジェクトに対して,メソッドfillInStackTrace(20.22.5)を呼び出す。

20.22.3 public String getMessage()

このThrowableオブジェクトを,エラーメッセージ文字列(20.22.2)付きで生成したならば,その文字列への参照を返す。

このThrowableオブジェクトを,エラーメッセージ文字列(20.22.1)なしで生成したならば,null を返す。

20.22.4 public String toString()

このThrowableオブジェクトを,エラーメッセージ文字列(20.22.2)付きで生成したならば,次の三つの文字列を連結した文字列を返す。

このThrowableオブジェクトを,エラーメッセージ文字列なしで生成したならば(20.22.1),このオブジェクトの実際のクラスの名前を返す。

20.22.5 public Throwable fillInStackTrace()

このメソッドは,このThrowableオブジェクト内に,現在のスレッドに対する,スタックフレームの現在の状態に関する情報を記録する。

20.22.6 public void printStackTrace()

このメソッドは,System.err フィールド(20.18.3)の値であるエラー出力ストリームに,このThrowableオブジェクトのスタックトレースを出力する。 出力の1行目には,このオブジェクトに対するtoStringメソッド(20.22.4)の戻り値を出力する。 残りの行には,メソッドfillInStackTrace(20.22.5)によって,それまでに記録されたデータを出力する。 この情報の書式は,実装によって異なるが,次の例が,一般的である。

java.lang.NullPointerException
    at MyClass.mash(MyClass.java:9)
    at MyClass.crunch(MyClass.java:6)
    at MyClass.main(MyClass.java:3)
この例は,次のプログラムを実行した結果である。

class MyClass {
    public static void main(String[] argv) {
        crunch(null);
    }
static void crunch(int[] a) { mash(a); }
static void mash(int[] b) { System.out.println(b[0]); }

20.23 クラス java.lang.ExceptionInInitializerError

ExceptionInInitializerError は,静的初期化子又はstatic 変数(12.4.2)の初期化子の評価中に発生した例外を示すために投げられる。

public class ExceptionInInitializerError
        extends RuntimeException {
    public ExceptionInInitializerError();
    public ExceptionInInitializerError(String s);
    public ExceptionInInitializerError(Throwable thrown);
    public Throwable getException();
}

20.23.1 public ExceptionInInitializerError()

このコンストラクタは,ExceptionInInitializerErrorを新しく生成し,エラーメッセージ文字列としてnullをもち,保存されたThrowableオブジェクト をもたないように,初期化する。

20.23.2 public ExceptionInInitializerError(String s)

このコンストラクタは,新しく生成されたExceptionInInitializerErrorを,エラーメッセージの文字列s への参照を保存することによって初期化し,後でgetMessageメソッド(20.22.3)で,取出しできるようにする。 生成されたオブジェクトには,保存されたThrowableオブジェクトはない。

20.23.3 public ExceptionInInitializerError(Throwable thrown)

このコンストラクタは,新しく生成されたExceptionInInitializerErrorを,Throwableオブジェクトである thrownへの参照を保存することによって初期化し,後でgetExceptionメソッド(20.23.4)で,取出しできるようにする。 エラーメッセージ文字列は,nullに設定される。

20.23.4 public Throwable getException(Throwable thrown)

この ExceptionInInitializerErrorの,保存されたThrowableオブジェクトを返す。 この ExceptionInInitializerErrorが,保存されたThrowableオブジェクトをもたなければ,null を返す。


目次 | |