Javaクラスライブラリ

熟練Javaプログラマになるには,Java言語とクラスライブラリの両方をよく理解する必要があります.Javaには8個の基本データ型のそれぞれに対応する8個のラッパークラス(Boolean, Character, Byte, Short, Integer, Long, Float, Double)が定義されています.これらは,それぞれ,boolean, char, byte, short, int, long, float, doubleの基本データ型の各値をカプセル化するものです.

ラッパークラスの主要な利点は,それらが文字列を基本データ型に変換するメソッドを提供していることです.つまり,データは普段文字列として扱い,必要に応じて変えることができるということです.そこで,まずJavaの文字列の処理について学びます.

Stringクラス

Stringクラスを用いると,可変長の文字列を操作できますので,ユーザは格納される文字列の長さに注意する必要はありません.

Stringクラスの主なコンストラクタには以下のものがあります.

String() 空の文字列を作成する
String(byte[] buffer) byte配列から文字列を作成する
String(String str) 文字列strの内容で新しい文字列を作成
Stringクラスの主なインスタンスメソッドには以下のものがあります.

int indexOf(String str) 文字列strが最初に現われる位置を返す
int lastIndexOf(String str) 文字列strが最後に現われる位置を返す
String replace(char oldChar, char new Char) 文字列内の文字oldCharをnewCharで置き換え
String substring(int beginIndex) 位置beginIndex以降の文字を返す
String toLowerCase() 文字列を小文字に変換する
String toUpperCase() 文字列を大文字に変換する

例題 10..1   Randomクラス
\framebox{
\begin{minipage}{13.65cm}
{\rm 文字列Minneapolisのiをkに置き換えるプログラムを作成しなさい.}
\end{minipage}}

class StringReplace
{
  public static void main(String[] args)
  {
    String str = "Minneapolis";
    str = str.replace('i','k');
    System.out.println(str);
  }
}

実行結果

\begin{figure}\centering
\includegraphics[width=7.8cm]{JAVAFIG/StringReplace.eps}
\end{figure}

StringBufferクラス

StringBufferクラスは文字列自身を変更する必要のある処理に用いられます.

Stringクラスの主なコンストラクタには以下のものがあります.

StringBuffer() 16文字の初期容量を持つ空の文字列バッファを作成する
StringBuffer(int len) lenで示す文字数の初期容量を持つ空の文字列バッファを作成する
StringBuffer(String str) 文字列strから文字列バッファを作成

Stringクラスの主なインスタンスメソッドには以下のものがあります.

StringBuffer append(String str) 文字列strを追加する
StringBuffer delete(int start, int end) 位置startからend-1までの文字列を削除
StringBuffer insert(int offser, String str) 位置offsetに文字列strを挿入
StringBuffer length() 文字列バッファの長さを返す
StringBuffer substring(int start) 位置startから末尾までの文字列を返す
String toString() 文字列バッファのデータを現す文字列を返す

char配列,byte配列,StringBufferとのデータ交換 Stringオブジェクトと,char[]型,byte[]型,あるいはStringbuffer型との相互データ交換を行うことができます.このとき基本データ型の配列は固定長なので,その長さに注意が必要です.

char[],byte[]からStringへのデータ交換
char[] ch = 'a','b';
byte[] bt = 'A','B';
String s1 = new String(ch);//char[] からStringへ
String s2 = new String(bt);//byte[] からStringへ

StringとStringBufferのデータ交換
StringBuffer sb = new StringBuffer();
String s = sb.toString();//StringBufferからStringへ
sb = new StringBuffer(s);//StringからStringBufferへ

Integer系ラッパークラス

IntegerはJavaのクラスライブラリの中でも特によく用いられるクラスの1つです.

Integerクラスには,MAX_VALUEとMIN_VALUEの2つのクラス変数が定義されています.

Integerクラスの主なクラスメソッドには以下のものがあります.

static Integer decode(String s) sを基数10の値として変換してIntegerオブジェクトを返す
static int parseInt(String s) sを基数10の値として変換してint型を返す
static int parseInt(String s, int r) sを基数rの値として変換してint型を返す

Integerクラスの主なインスタンスメソッドには以下のものがあります.

byte byteValue() 現在のオブジェクトの値をbyte型で返す
double doubleValue() 現在のオブジェクトの値をdouble型で返す
boolean equals(Object obj) objと現在のオブジェクトが同じ値なら真を返す
int intValue() 現在のオブジェクトの値をint型で返す
long longValue() 現在のオブジェクトの値をlong型で返す
short shortValue() 現在のオブジェクトの値をshort型で返す
String toString() 現在のオブジェクトの値の文字列表現を返す

例題 10..2   Integerクラス
\framebox{
\begin{minipage}{13.65cm}
{\rm 16進数で45を表す数を表示するプログラムを作成しなさい.}
\end{minipage}}

class HexInteger
{
  public static void main(String[] args)
  {
    String str = "45";
    System.out.println(Integer.parseInt(str,16) + "は16進数で" + str);
  }
}

実行結果

\begin{figure}\centering
\includegraphics[width=7.8cm]{JAVAFIG/HexInteger.eps}
\end{figure}

Double系ラッパークラス

浮動小数点を扱うものに,FloatラッパークラスとDoubleラッパークラスがあります.この2つは内容がよく似ているので,ここではDoubleラッパークラスについて学びます.

Doubleクラスには,MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,TYPEの6つのクラス変数が定義されています.

Doubleクラスの主なクラスメソッドには以下のものがあります.

boolean isInfinite(double d) dの値が無限なら真を返す
boolean isNaN(double d) dの値が非数値なら真を返す
String toString(double d) dの値の文字列表現を返す
Double ValueOf(String s) sの表すfloat値をカプセル化したDoubleオブジェクトを返す

Doubleクラスの主なインスタンスメソッドには以下のものがあります.

byte byteValue() 現在のオブジェクトの値をbyte型で返す
double doubleValue() 現在のオブジェクトの値をdouble型で返す
float floatValue() 現在のオブジェクトの値をfloat型で返す
int intValue() 現在のオブジェクトの値をint型で返す
boolena isInfinite() 値がNEGATIVE_INFINITYまたはPOSITIVE_INFINITYなら真
short shortValue() 現在のオブジェクトの値をshort型で返す
String toString() 現在のオブジェクトの値の文字列表現を返す

例題 10..3   Doubleクラス
\framebox{
\begin{minipage}{13.65cm}
{\rm 3を0で割る場合,クラスメソッドのisInfinity()とisNaN()を用いて結果をテストするプログラムを作成しなさい.}
\end{minipage}}

class IsInfinity
{
  public static void main(String[] args)
  {
    double divident = 3;
    double divisor = 0;
    double q = divident/divisor;
    System.out.println(q);
    // 無限とNaNのテスト
    System.out.println("無限大ですか"+ Double.isInfinite(q));
    System.out.println("不能ですか"+ Double.isNaN(q));
  }
}

実行結果

\begin{figure}\centering
\includegraphics[width=7.8cm]{JAVAFIG/IsInfinity.eps}
\end{figure}

Character型ラッパークラス

Characteクラスはchar型の値をカプセル化するものです.

Characterクラスの主なクラスメソッドには以下のものがあります.

boolean isDigit(char c) cが数字なら真をそうでなければ偽を返す
boolean isLetter(char c) cが文字なら真をそうでなければ偽を返す
boolean isLetterOrDigit(char c) cが文字または数字なら真をそうでなければ偽を返す
boolean isLowerCase(char c) cが小文字なら真をそうでなければ偽を返す
boolean isSpaceChar(char c) cがスペース文字なら真をそうでなければ偽を返す
boolean isWhiteSpace(char c) cがホワイトスペースなら真をそうでなければ偽を返す
char toLowerCase(char c) cを小文字に変換して返す
   

Characterクラスの主なインスタンスメソッドには以下のものがあります.

char charValue() 現在のオブジェクトの値をchar型で返す
boolean equals(Object obj) objと現在のオブジェクトが同じ値なら真を返す
int digit() 現在のオブジェクトの値をint型で返す

Byte型ラッパークラス

Byteクラスはbyte型の値をカプセル化するものです.

Byteクラスの主なクラスメソッドには以下のものがあります.

Byte decode(String s) sの表す値をカプセル化したByteオブジェクトを返す
byte parseByte(String s) sを基数10の値として変換してbyte型を返す
byte parseByte(String s, int r) sを基数rの値として変換してbyte型を返す

Byteクラスの主なインスタンスメソッドには以下のものがあります.

byte byteValue() 現在のオブジェクトの値をbyte型で返す
double doubleValue() 現在のオブジェクトの値をdouble型で返す
float floatValue() 現在のオブジェクトの値をfloat型で返す
int intValue() 現在のオブジェクトの値をint型で返す
long longValue() 現在のオブジェクトの値をlong型で返す
short shortValue() 現在のオブジェクトの値をshort型で返す
String toString() 現在のオブジェクトの値の文字列表現を返す

Short型ラッパークラス

Shortクラスはshort型の値をカプセル化するものです.

Shortクラスの主なクラスメソッドには以下のものがあります.

Short decode(String s) sの表す値をカプセル化したShortオブジェクトを返す
short parseShort(String s) sを基数10の値として変換してshort型を返す
short parseShort(String s, int r) sを基数rの値として変換してshort型を返す

Byteクラスの主なインスタンスメソッドには以下のものがあります.

byte byteValue() 現在のオブジェクトの値をbyte型で返す
double doubleValue() 現在のオブジェクトの値をdouble型で返す
float floatValue() 現在のオブジェクトの値をfloat型で返す
int intValue() 現在のオブジェクトの値をint型で返す
long longValue() 現在のオブジェクトの値をlong型で返す
short shortValue() 現在のオブジェクトの値をshort型で返す
String toString() 現在のオブジェクトの値の文字列表現を返す

Long型ラッパークラス

Longクラスはlong型の値をカプセル化するものです.

Longクラスの主なクラスメソッドには以下のものがあります.

long parseLong(String s) sを基数10の値として変換してlong型を返す
long parseLong(String s, int r) sを基数rの値として変換してlong型を返す
String toBinaryString(long l) lの値の2進数表現を返す
String toHexString(long l) lの値の16進数表現を返す
String toOctalString(long l) lの値の8進数表現を返す
String toString(long l) lの値の文字列表現を返す

Longクラスの主なインスタンスメソッドには以下のものがあります.

byte byteValue() 現在のオブジェクトの値をbyte型で返す
double doubleValue() 現在のオブジェクトの値をdouble型で返す
float floatValue() 現在のオブジェクトの値をfloat型で返す
int intValue() 現在のオブジェクトの値をint型で返す
long longValue() 現在のオブジェクトの値をlong型で返す
short shortValue() 現在のオブジェクトの値をshort型で返す
String toString() 現在のオブジェクトの値の文字列表現を返す

Systemクラス

Systemクラスには,ランタイム環境に関するいくつかの属性が定義されています.1つは,すでに使用しているoutというクラス変数です.この変数にはPrintStreamオブジェクトへの参照が入っていて,そのオブジェクトのprint()println()メソッドで標準出力に文字列引数を表示することになります.クラス変数errにもPrintStreamオブジェクトへの参照が入っています.これは標準エラーストリームです.クラス変数inにはInputStreamオブジェクトへの参照が入っています.PrintStreamとInputStreamは入出力をサポートするクラスです.

Systemくらすのもう1つのクラスメソッドにexit()があります.これは現在のプログラムを終了します.

Systemクラスの主なクラスメソッドには以下のものがあります.

long currentTimeMillis() 現在の時刻を返す
void exit(int status) statusを終了コードとしてJVMを終了
void gc() ガベージコレクタを実行
void load(String filename) filenameで指定したダイナミックライブラリを読み込む
String toOctalString(long l) lの値の8進数表現を返す
String toString(long l) lの値の文字列表現を返す

Mathクラス

Mathクラスは数学関係のメソッドを集約させたものです.すべてstaticメソッドなので,「Math.sin()」のように簡単に使用できます.Mathクラスには円周率や自然対数の底eといった定数も定義されています. Systemくらすのもう1つのクラスメソッドにexit()があります.これは現在のプログラムを終了します.

Systemクラスの主なクラスメソッドには以下のものがあります.doubleの場合だけをのせていますが,float,int,longでも使える多重定義となっています.

double abs(double a) double値の絶対値を返す
double acos(double a) アークコサイン値を返す
double asin(double a) アークサイン値を返す
double atan(double a) アークタンジェント値を返す
double ciel(double a) 引数の小数点以下を切り上げた値を返す
double floor(double a) 引数の小数点以下を切り捨てた値を返す
double cos(double a) コサイン値を返す
double sin(double a) サイン値を返す
double tan(double a) タンジェント値を返す
double min(double a, double b) 小さい方の値を返す
double max(double a, double b) 大きい方の値を返す
double pow(double a, double b) aをb乗した値を返す
double exp(double a) $e^{a}$の値を返す
double log(double a) $\log{a}$の値を返す

次に,Java.utilパッケージに含まれる,乱数,日付,ベクトル,ハッシュ表,スタックなどについて学びます.

Randomクラス

Randomクラスは,double型,float型,int型,またはlong型の乱数を生成するために用います.また,ガウス分布の乱数を生成することもできます.この機能は,現実の世界のシステムをシミュレートする場合に役に立ちます.

Randomクラスには,次のコンストラクタがあります.
Random();
Random(long seed);

Randomクラスの主なインスタンスメソッドには以下のものがあります.

void nextBytes(byte[] buffer) bufferを乱数で埋める
double nextDouble() double型の乱数を返す
float nextFloat() float型の乱数を返す
double nextGaussian() 標準正規分布の乱数を返す
int nextInt() int型の乱数を返す
logn nextLong() long型の乱数を返す
void setSedd(long seed) 乱数ジェネレータに種を与える

例題 10..4   Randomクラス
\framebox{
\begin{minipage}{13.65cm}
{\rm 10個のint型の乱数を生成するプログラムを作成しなさい.}
\end{minipage}}

import java.util.*;
class RandomInt
{
  public static void main(String[] args)
  {
    Random r = new Random();
    for(int i=0; i < 10; i++)
    {
      System.out.println(r.nextInt());
    }
  }
}

実行結果

\begin{figure}\centering
\includegraphics[width=14cm]{JAVAFIG/ThrowsException.eps}
\end{figure}

Dateクラス

Dateクラスは,特定の日付と時刻に関する情報を得るときに用います.

Dateクラスには,次のコンストラクタがあります.
Date();
Date(long msec);

1つ目のコンストラクタでは,現在の日付と時刻を表すオブジェクトが返されます.2つ目のコンストラクタでは,基準時(1970年1月1日)からの経過時間をミリ秒で表すオブジェクトがかえされます.

Dateクラスの主なインスタンスメソッドには以下のものがあります.

boolean after(Date d) dが現在の日付より後ならば真を返す
boolean before(Date d) dが現在の日付より前ならば真を返す
boolean equal(Date d) dが現在の日付と同じならば真を返す
double nextGaussian() 標準正規分布の乱数を返す
long getTime() 基準時からの経過時間をミリ秒で返す
void setTime(long msec) 基準時からmsec経過した日付と時刻をオブジェクトに設定
String toString() 日付を文字列にして返す

例題 10..5   Randomクラス
\framebox{
\begin{minipage}{13.65cm}
{\rm 現在の日付と時刻を表示するプログラムを作成しなさい.}
\end{minipage}}

import java.util.*;
class DateNow
{
  public static void main(String[] args)
  {
    Date currentDate = new Date();
    System.out.println(currentDate);
    Date baseDate = new Date(0);
    System.out.println(baseDate);
  }
}

実行結果

\begin{figure}\centering
\includegraphics[width=7.8cm]{JAVAFIG/DateNow.eps}
\end{figure}