GO HOME

「Javaステップアップブック コアライブラリ」追補情報


※ここは、拙著のJava中級解説書「Javaステップアップブック」シリーズの「コアライブラリ」編(毎日コミュニケーションズ、248頁、1800円)に関するコーナーです。現在、初版の見直し作業をしていますが、校正情報やよくある質問の答えなどをここでまとめて掲載します。



 ★バグ・校正情報★

※ここでは、ソースコードや内容に関する記述間違い、校正ミスなどについて整理しておきます。


※P.105 返値の説明部分

説明が逆になっていました。正しくは以下のようになります。

変数 = -1 : 《BigInteger/BigDecimal1》 < 《BigInteger/BigDecimal2》
変数 = 1 : 《BigInteger/BigDecimal1》 > 《BigInteger/BigDecimal2》

※P.179,180 テキストを単語単位で分割処理する

本文中の「StringTokenizer」が、何カ所か「StringTakenizer」となっています。


※P.227 サンプルリストの説明

「小数点以下2桁までを〜」とありますが、リストで実行しているのは「小数点以下4桁まで」です。



※もし、他に間違いが見つかりましたら、どうか御連絡下さいませ。



 ★追補情報★

※ここでは、本書の内容を補うための追加情報などをまとめる予定です。



※5-23 2つの日時の差を計算する


ここでは、2つのCalendarからミリ秒数による値をgetTime().getTime()という形で取り出して、それを元に計算をしていますが、「getTimeInMillis()ではいけないのか?」と疑問を持った方もいるかと思います。これはその通りで、getTimeInMillis()を使ってミリ秒を得ても同じです。
 実は、少々勘違いをしているところがあって、Calendarクラスも内部にDateを持っていて、それによって日時を管理しているようにどこかで思い込んでいた部分があり、それで自然に「Dateからミリ秒を得る」というように考えていたのですが、後で調べたところ、Calendarでは内部にミリ秒の値であるlong値のフィールドがあり、(Dateインスタンスではなく)このlong値を元に処理をしていることがわかりました。JDK 1.4のCalendarクラスのソースコードを調べてみると、getTimeInMillis()とgetTime()メソッドは以下のようになっていました。
    public long getTimeInMillis() {
if (!isTimeSet) updateTime();
return time;
}

public final Date getTime() {
return new Date( getTimeInMillis() );
}
 このtimeというのがlongフィールドで、isTimeSetは日時情報がセットされていることを示すフラグのフィールドです。結局、CalendarのgetTime()もgetTimeInMillis()を元にDateを生成していることが確認できたので、ここはgetTimeInMilli()に置き換えて考えてけっこうです。


※6-7 日時をシステムの標準的なフォーマットで表示する


この項目の解説末尾に、システムの長い表現フォーマットで得たい場合には「getDateInstance()の引数にDateFormat.FULLを指定する」とありますが、これだけではあまりに説明が簡素すぎ、何のことやらわからなかったかも知れません。ここで補足しておきます。

※長いフォーマットを取得する

【基本フォーム】
※日付の標準フォーマットを得る
DateFormat 《DateFormat》 = DateFormat.getDateInstance( フォーマットスタイル );
※時刻の標準フォーマットを得る
DateFormat 《DateFormat》 = DateFormat.getTimeInstance( フォーマットスタイル );
日付けと時刻の標準フォーマットを得る
DateFormat 《DateFormat》 = DateFormat.getDateTimeInstance( 日付スタイル , 時刻スタイル );

※フォーマットスタイルのためのdateFormatフィールド
FULL――全パターン表示のフォーマットスタイル
LONG――長いフォーマットスタイル
MEDIUM――中間のフォーマットスタイル
SHORT――短いフォーマットスタイル

【解説】
システムの標準フォーマットは、長い表現・短い表現・その中間といったものが用意されている。例えばもっとも長い表現を使うと「2003年5月14日 18時25分54秒JST」といった形であろうし、短い表現ならば「03/05/14 18:25」といったものになるだろう。DateFormatには、こうした表現を指定してインスタンスを得るためのメソッドも用意されている。
 「getDateInstance()」「getTimeInstance()」「getDateTimeInstance()」といったもので、それぞれ日付のフォーマット、時刻のフォーマット、日付けと時刻のフォーマットを得るものだ。これらを使い、引数にDateFormatのフィールドを指定して呼び出せば、その表現形式のフォーマットのためのDateFormatインスタンスが得られる。





 ★FAQコーナー★

※ここでは、本書の内容についての質問にお答えします。読んでいて不明な点などありましたら、どうぞ掌田津耶乃までお問い合わせください。その場合は、必ずお使いのOSとJDKのバージョンについて明記ください。


●本書は、入門書ではないのですか。具体的にどういう内容のものですか?

答え)・・なんて質問が来たわけではないですが(笑)、本書がどういうものかイメージしにくいと思うので、簡単に紹介を。——本書は、Javaのさまざまな機能の具体的な実装例をTips的にまとめたものです。プログラミングというのは、基本文法とライブラリの働きがわかればできるというものではありません。それらが頭に入っていても、具体的に「これこれこういうことをさせたい」というときに、そのためのコードがぱっと出てくるわけではないものです。それには、さまざまな具体的な実装例を見て、コードを読んで、語彙を増やしていくしかありません。そこで、もっとも基本的なものから比較的多用される応用例までさまざまな機能の実装方法をまとめたものとして本書を企画したわけです。
 この種の本は、今までもあることはありましたが、たいていは「総ページ数600ページ、4000円」なんて代物で、ビギナーがおいそれと買えるものじゃありませんでした。また、そこまで無理矢理膨らませたためか、基礎的な「そんなん、もう知ってるよ」という超ビギナーな事柄までくどくど書いてあったりして、実際に役立つページは全体の半分ぐらいだったりしました。そこで、ジャンルごとに分冊し、自分が必要と思う部分だけを気軽に買えるようなテクニック集を作ろう、と思ったわけです。

 コアライブラリ編では、java.lang、java.util、java.textの各パッケージにあるクラスの基本的な使い方から、知っているとちょっと便利な応用テクニック(標準出力をコンソールでなくファイルに書き出させる、標準出力されるテキストをstring値として得る、プログラム内から外部コマンドを実行する、外部のクラスをその場でロードして利用する、プログラム内からZipファイルやJarファイルを作成する、プログラム内からJavaのソースコードをコンパイルする、など)までを収録しました。ビギナーだけでなく、中級者でも意外に知らなかったテクニックがけっこうあるのでは、と思います。



GO BACK
GO HOME