#ls2

#contents


*Javaの文字コード [#ja918812]

**Javaにおける文字/文字列の扱い方 [#p4f9f11f]
http://www.itarchitect.jp/beginners/-/10422.html

実験プログラム GetBytes.java
#pre{{
import java.io.*;

public class GetBytes {
    public static void main(String[] args) {
        String s = "こんにちは、世界!";
        System.out.println(s);

        int len = s.length();
        System.out.println("len = " + Integer.toString(len));

        try {
            byte[] bytes = s.getBytes("UTF-8");
            int bytesLen = bytes.length;
            System.out.println("byteLen = " + Integer.toString(bytesLen));

            for (int i=0; i<len; i++) {
                System.out.print(Integer.toString(s.charAt(i)) + " ");
            }
            System.out.print("\n");

            for (int i=0; i<bytesLen; i++) {
                System.out.print(Integer.toHexString(bytes[i] & 0xFF).toUpperCase() + " ")
            }
            System.out.print("\n");
        }
        catch (Exception e) {
            System.out.println(e.toString());
        }
    }
}
}}
結果:
#pre{{
[~/tmp/java/getBytes:1]$ javac GetBytes.java && java GetBytes
こんにちは、世界!
len = 9
byteLen = 27
12371 12435 12395 12385 12399 12289 19990 30028 65281
E3 81 93 E3 82 93 E3 81 AB E3 81 A1 E3 81 AF E3 80 81 E4 B8 96 E7 95 8C EF BC 81
}}
要するに、getBytes() は UTF-16 から指定文字コードへの変換を行うようだ。
**Unicodeのバージョン [#o630b513]
http://www.itarchitect.jp/beginners/-/10422.html
↑のページが詳しく書いてあるが、Unicodeのバージョンに関してはだいぶ古くなっている。

「Java言語仕様第3版」の「3.1 Unicode」によると
http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.1

|JDKのバージョン|Unicodeのバージョン|
|JDK 1.1以前|1.1.5|
|JDK 1.1|2.0|
|JDK 1.1.7|2.1|
|J2SE 1.4|3.0|
|J2SE 5.0|4.0|

となっている。


 Javaで採用されているUnicode 2.1では、約4万字程度の文字が割り当てられています※1。
と書いてあるが、Unicode 3.1以降でははるかに多くなっている。
参照:http://ja.wikipedia.org/wiki/Unicode
**Javaで使える文字コード名 [#p7b6128f]
JDK 1.5でサポートされているエンコーディング
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/intl/encoding.doc.html

**クラスファイルの文字コードはUTF-8 [#a90b20c4]
Windows上で
 System.out.println("ABCこんにちは、世界!ABC\n"); 
と書いてShift_JISで保存し、javaでコンパイルする。
そしてクラスファイルをバイナリエディタで開いてみると次のような部分がある。
 0000090: 1901 0022 4142 43e3 8193 e382 93e3 81ab  ..."ABC.........
 00000a0: e381 a1e3 81af e380 81e4 b896 e795 8cef  ................
 00000b0: bc81 4142 430a 0700 1a0c 001b 001c 0100  ..ABC...........
""の文字列の部分がUTF-8になっていることがわかる。
**javaのソースを別のエンコーディングで書くには [#oc9822f5]
システムのデフォルトエンコーディングと異なるエンコーディングで書いたソースをコンパイルするには
 javac -encodng Shift_JIS
のように-encodingオプションを指定する。
すると""の文字列の部分が、ソースファイルのエンコーディングからシステムのデフォルトエンコーディニグに変換されてクラスファイルになる。


*Apache commons [#y359f373]
**commons-lang [#t363c861]
ToStringBuilderが超便利。
**commons-logging [#o4f00b1d]
loggingの使い方
http://www.atmarkit.co.jp/fjava/rensai2/jakarta09/jakarta09.html

*O/Rマッピング [#s8cd167e]
http://www.thinkit.co.jp/free/article/0606/13/7/
Hibernate, Torque, iBATIS の比較がよい。
>第1回  	O/Rマッピングとは?
>第2回 	SQLを直接記述できるiBATIS(前編)
>第3回 	SQLを直接記述できるiBATIS(後編)
>第4回 	SQLを記述しない「Torque」
>第5回 	多機能なHibernate(前編)
>第6回 	多機能なHibernate(後編)
>第7回 	それぞれのメリット/デメリット

*アクセス修飾子 [#fa20f956]
||>|自ファイル|>|>|他ファイル|
|修飾子|自クラス |サブクラス |他クラス| サブクラス| 他クラス|
|public |○| ○| ○| ○| ○|
|protected |○| ○| ○| ○| ×|
|なし| ○| ○ |○ |× |× |
|private |○| ×| ×| ×| ×|
http://www.tohoho-web.com/java/modifier.htm#access


*J2SE 5.0で予約語が増えた[#kc640d74]
 新予約語:enum 
 JDK 1.3や1.4で作成されたアプリケーションをJDK 5.0でリコンパイルする場合は注意!

参考:
[[Wikipedia:Javaの予約語>http://ja.wikipedia.org/wiki/%E4%BA%88%E7%B4%84%E8%AA%9E_(Java%E8%A8%80%E8%AA%9E)]]


*逆引き [#z223e08a]
**数値 [#c5c98b79]
**文字列 [#da6ea280]
***文字の種別(alphabet・ひらがな・カタカナ・漢字)を調べる [#t0412166]
正規表現でUnicodeブロックを使うと文字の種別を調べることができる。

#pre{{
// 文字列が、漢字だけからなるかどうかを調べるプログラム
import java.io.*;
import java.util.regex.*;

public class Match {

    public static void main(String[] args) {
        String regex = "\\p{InCJKUnifiedIdeographs}+";
        String texts[] = {
            "漢字変換します",
            "漢字変換",
            "あいうえお"
        };

        Pattern p = Pattern.compile(regex);


        for (int i=0; i<texts.length; i++) {
            Matcher m = p.matcher(texts[i]);

            if (m.matches()) {
                System.out.println("Match     :" + texts[i]);
            } else {
                System.out.println("Not match :" + texts[i]);
            }
        }
    }
}
}}
ASCII文字だけであるか判定するには、
 String regex = "\\p{ASCII}+";
と変更すればよい。


参考:
MODULE.JP - 日本語に絡むUnicodeブロックとスクリプト(正規表現)
http://module.jp/blog/regex_unicode_prop.html

**日付 [#nda1ab6a]
**ファイル・ディレクトリ [#a8ec43c1]
**正規表現 [#lff87bdf]
**実行環境・ツール [#lf40249a]
**その他 [#vcc49ec7]
***JDKのバージョンを調べる [#yf691c5b]
 javac -J-version

***JREのバージョンを調べる [#kc640d74]
 java -version

***クラスファイルのバージョンを調べる [#pe999d53]
java のバージョンとクラスファイルのバージョン番号との対応は以下の通り。
 1.1 = 45.3
 1.2 = 46.0
 1.3 = 47.0
 1.4 = 48.0
 1.5 = 49.0
クラスファイルのバージョンを調べるには、Unix では file コマンドを使うとよい。
 $ file xxx.class
 xxx.class: compiled Java class data, version 48.0
file コマンドが使えない場合は、class ファイルの先頭 8 バイトを見れば分かる。
class ファイルの 先頭 4 バイトは「CA FE BA BE」で固定である。続く、5 ~ 6 バイトがマイナーバージョン、7 ~ 8 バイトがメジャーバージョンを表している。
ある class ファイルの先頭が以下だった場合、
 CA FE BA BE 00 00 00 30
0x30 = 48 だから、JDK1.4 に準拠してコンパイルされた事が分かる。


***16進ダンプ [#acf7baf3]
***grep [#qa539ccc]

    Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes