2009年1月29日木曜日

符号付き整数の型変換

bytes→int

  • 符号付きで格納(-128~127)
    そのまま代入する

  • 0~255として変換
    0x000000FFとbitAND演算する

Stringとバイト配列


  • バイト配列から文字セットを指定して文字列を作成
    public String(byte[] bytes, String charsetName)
    String s = new String(bs, "US_ASCII");
    ※マルチバイト文字列の場合作成されたStringは内部形式(Unicode?)
     EUC-JP形式のbyte配列から作成した文字列
     Windows-31J形式nobytes配列から作成した文字列
     両者は同じStringとなる

  • 文字列から文字セットを指定してバイト配列作成
    String s = "ABC";
    bytes[] bs = s.getBytes("US-ASCII");

NumberFormatクラス

数値のフォーマット処理
DecimalFormatを利用するパターン
NumberFormat nf = new DecimalFormat("000");
String s = nf.format(99);

2009年1月22日木曜日

数値の変換


  • Doubleラッパークラス
    doubleToLongBits(double)
     //IEEE 754 浮動小数点のビットレイアウトに従ったlong値
    valueOf(string)
     //構文解析し、Doubleオブジェクトを返す
    parseLong(string)
     //構文解析し、double値を返す

  • Longラッパークラス
    longValue()
     //Longオブジェクト の値を long として返す
    toBinaryString(Long)
     //基数 2 の符号なし整数として返す
    valueOf(string,int)
     //2 番目の引数で指定された基数を使用した構文解析し、Longオブジェクトを返す
    parseLong(string,int)
     //2 番目の引数で指定された基数を使用した構文解析し、long値を返す

符号付整数での負数の表現


  • 2の補数をとる
    正数の全bit反転して+1する

  • 減算の計算
    負数を加算している(最上位の桁上がりは破棄)

2009年1月21日水曜日

インスタンス生成時のエラー処理

コンストラクタではエラーコードを返すような実装はできない
→インスタンス生成時のエラー発生を捕捉するには例外は必須

2009年1月19日月曜日

java.util.Scannerクラス

J2SE 5.0以降で対応
正規表現を使用した構文解析ができるテキストスキャナ
ファイルや入力ストリームから読み込みができる

2009年1月16日金曜日

mainからの例外

main に throws付与で例外を投げてもよい
try、catch節不要

テストプログラムなどでは便利かも。

標準入力からの読み取り

1行読み取り
 System.in
 →java.io.InputStreamBuffer
  →java.io.BufferedReader

BufferedReader.readLine();

※使用後はclose()

イベントディスパッチスレッド

コンポーネントの「状態に依存する」あるいは「状態に影響を与える」処理はすべてイベントディスパッチスレッド上で動作しなければならない

SwingUtilities.invokeLater(Runnable obj);
Runnableobjのrunメソッドをイベントディスパッチスレッドで非同期的に実行させる

他のスレッドでコンポーネントを変更する場合
スレッドからinvokeLaterを呼び出し、変更処理をイベントディスパッチスレッドで実行させる
※別スレッドからの直接変更もできるが、悪影響があるのかも?
※mainからのコンポーネント作成/表示も同様にイベントディスパッチスレッドで実行させる?(sampleはそうしている)