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はそうしている)

2009年1月15日木曜日

JList基本

  • JList
    コントロール
  • ListaDataModel
    リストデータ
  • ListDataLister
    リストデータとコントロールの同期
ListDataModel objを作成
ListDataModel objのaddListDataListenerでListenerをセット?
ListDataModel objを渡してJList objを作成
ListDataModelとしてDefaultListModelを使用する場合、Listenerの明示的セットは不要
(内部で自動作成している?)

SWING基本

  • トップレベルコンテナ
    JFrame
     setDefaultCloseOperation
    setSize
    setVisibleで表示
  • 中間コンテナ
    JPanel、Container
     JFrameオブジェクト.getContentPaneで取得
  • コントロール
    JButton、JLabelなど
    中間コンテナにaddする
  • イベント
    ActionListenerをimplementしたクラスを準備
    コントロールobjのaddActionListeneメソッドで上記objをListenerとしてセット
    ListerクラスのactionPerformedメソッドでイベントハンドらを記述

2009年1月9日金曜日

テキストエリア

JTestField 1行
JTextArea 複数行
(スクロールバーつきはJScrollPaneに格納)

代表的パッケージ

  • java.awt
    Abstract Window Toolkit。GUIアプリケーション作成時に使います
  • java.io
    データストリーム、ファイルシステムなどによるシステム入出力用クラスが含まれています
  • java.lang
    基本クラス。ここに含まれるクラスはパッケージ名を省略して使うことができます
  • java.net
    ネットワーク対応アプリケーション作成時に使います
  • java.util
    プログラムを作成するに当たって便利なコレクションフレームワークやユーティリティクラスが含まれています。例えば、日時機能、乱数ジェネレーターなどがあります

インターフェイスの実装

  1. 新規クラス作成
  2. インターフェイス追加でインターフェイス選択画面
  3. 「インターフェイスを選択してください」
     インターフェイス名をエディットBOXに直接入力すると
     一致する項目一覧に該当するインターフェイスが表示される
     一致する項目一覧から選択して追加(連続で追加可能)
  4. OKでインターフェイス選択画面閉じる
  5. インターフェイス一覧に選択したインターフェイスが表示されている

コレクションフレームワーク

  • Generic機能(J2SE5.0以降)
    ArrayList のようにコレクションで扱う型を特定する
    get時等のキャストが不要
     旧:s = (String)list.get(i);
     新:s = list.get(i);
  • オートボクシング機能(J2SE5.0以降)
    基本型とラッパークラス型間のデータ変換を自動実行してくれる
    基本ラッパー型のコレクションでもデータ変換不要
     旧:ary.add( new Integer(100) );
       i = ary.get(i).intValue();
     新:ary.add( 100 );
       i = ary.get(i);