<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Java</title><link>http://blogs.wankuma.com/ch3cooh/category/1900.aspx</link><description>Java関係の日記です </description><managingEditor>CH3COOH</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>CH3COOH</dc:creator><title>[VisualBasic][Java]VisualBasicにおけるスコープの概念</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/08/08/152228.aspx</link><pubDate>Fri, 08 Aug 2008 00:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/08/08/152228.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/152228.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/08/08/152228.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/152228.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/152228.aspx</trackback:ping><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Javaで書いたコードを、VBで置き換えるだけの簡単な勉強をしていたら……変数で躓いた！！&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:17d5cbb9-1a52-4c12-84de-0d9d34a5770e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    public static void main(String[] args) 
    {
       Integer[] array = { 1, 2, 3, 4 };

       for(Integer item : array) {
           System.out.println(item);
       }

       Integer item = 393;
       System.out.println(item);
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こんな感じに書き換えました。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:27019326-e74c-4a52-92eb-65b6898566b0" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="vb"&gt;    Sub Main()

        Dim array() As Integer = {1, 2, 3, 4}

        For Each item As Integer In array
            System.Console.WriteLine(item)
        Next

        Dim item As Integer = 393
        System.Console.WriteLine(item)

    End Sub&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;となってビルドすると、For Each側のitemに波線が出ていて、「変数'item'は、それを囲むブロック内の変数を非表示にします。」と、よく判らないエラーが発生しました。なんでやねん(´・ω・`)ｼｮﾎﾞｰﾝ&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;こういう時は、MSDNオンラインに頼るに限ります。
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/library/35styb3a(VS.80).aspx"&gt;Visual Basic における有効期間&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;プロシージャとブロック スコープの間には密接な関係があります。プロシージャ内のどのブロックにも含まれていない場所で変数を宣言した場合、その変数は、プロシージャ全体から成るブロックのブロック スコープを持つと見なすことができます。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;つまり、大きなスコープ(プロシージャスコープ)で定義した変数は大きなスコープ内で有効で、それに属している小さなスコープ(ブロックスコープ)は当然影響を受けるため、同じ変数名が割り当てられません。 
&lt;p&gt;こういうものなんだと理解はしましたが、ものすごく違和感を感じていて納得出来ませんでした。……なんでこんなに受け入れるのに抵抗があるんだろうと、トイレで悶々と考えてました。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3a46caf8-f8b3-4f36-a3c6-ae6a0cc120ff" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c"&gt;void main(void)
{
	int hoge = 5;
	printf("%d\n", hoge);     // 5が表示される

	{
		int hoge = 0;
		printf("%d\n", hoge); // 0が表示される
	}

	printf("%d\n", hoge);     // 5が表示される
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;スッキリしたのでトイレから出ました。駄目だなぁ……違和感が解決するまで次の項目を行けないなんて。あと自分の脳みそがC言語に最適化されてるのにビックリ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/152228.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>CH3COOH</dc:creator><title>[VisualBasic]JavaからVBへの引継ぎ　その１</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/08/07/152048.aspx</link><pubDate>Thu, 07 Aug 2008 04:08:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/08/07/152048.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/152048.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/08/07/152048.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/152048.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/152048.aspx</trackback:ping><description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt;朝からVB2005を開いて変数宣言もろくに出来ずになんて、なんて自分のスペックが低いんだと(&amp;#180;・ω・`)ｼｮﾎﾞｰﾝとしていました。1から言語仕様を追いかけるのは苦痛なので、昨日まで勉強していた「Javaチュートリアル」に照らし合わせて、JavaとVBとの比較をしながら進めて行きたいと思います。 
&lt;P&gt;&amp;nbsp;
&lt;H1&gt;アジェンダ&lt;/H1&gt;
&lt;UL&gt;
&lt;LI&gt;変数 
&lt;LI&gt;if文 
&lt;LI&gt;for文 
&lt;LI&gt;foreach文 
&lt;LI&gt;クラス 
&lt;LI&gt;オブジェクト 
&lt;LI&gt;初期化子/初期化ブロック 
&lt;LI&gt;インターフェイス 
&lt;LI&gt;継承 
&lt;LI&gt;抽象クラス 
&lt;LI&gt;final 
&lt;LI&gt;フィールド 
&lt;LI&gt;ジェネリクス 
&lt;LI&gt;コレクション 
&lt;LI&gt;例外&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;
&lt;P&gt;それではさっそく&amp;#8230;&amp;#8230; 
&lt;H1&gt;変数&lt;/H1&gt;
&lt;H2&gt;Java&lt;/H2&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV class=wlWriterSmartContent id=scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c6f41704-efb8-4204-97a1-d1af27133f2a style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;PRE class=java name="code"&gt;        int suuji = 393;
        String moji = "CH3COOH";&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;H2&gt;ＶＢ&lt;/H2&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV class=wlWriterSmartContent id=scid:812469c5-0cb0-4c63-8c15-c81123a09de7:764fa2f3-5cc0-4b3e-838c-1db5fd43d6d9 style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;PRE class=vb name="code"&gt;        Dim suuji As Int32 = 393
        Dim moji As String = "CH3COOH"&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;型を指定せずにDimで宣言して値を代入することは可能です。 
&lt;P&gt;&lt;/P&gt;
&lt;DIV class=wlWriterSmartContent id=scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e7a38345-090e-4b4b-ada4-0f2828571f8b style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;PRE class=vb name="code"&gt;        Dim suuji = 393
        Dim moji = "CH3COOH"&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;ただ、これって結局Integer型になるらしいけど型を書かないのは気持ち悪い。&lt;BR&gt;デフォルトでOFFになっている、&lt;STRONG&gt;Option StrictをONにして&lt;/STRONG&gt;型を強制する様に変更してみました。 
&lt;H1&gt;if文&lt;/H1&gt;
&lt;P&gt;「else if」が「ElseIf」になっている事を注意する。 
&lt;H2&gt;Ｊａｖａ&lt;/H2&gt;
&lt;DIV class=wlWriterSmartContent id=scid:812469c5-0cb0-4c63-8c15-c81123a09de7:9173a3aa-c34f-4d58-bc17-68e5d5a58c9e style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;PRE class=java name="code"&gt;        int suuji = 393;

        if (suuji == 393) {
            System.out.println("数字が393の時");
        } else if (suuji == 454) {
            System.out.println("数字が454の時");
        } else {
            System.out.println("上記に当てはまらない時");
        }&lt;/PRE&gt;&lt;/DIV&gt;
&lt;H2&gt;ＶＢ&lt;/H2&gt;
&lt;DIV class=wlWriterSmartContent id=scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1124fa2e-463d-43e4-ad68-619a7efa7946 style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; FLOAT: none; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;&lt;PRE class=vb name="code"&gt;        Dim suuji As Int32 = 393

        If suuji = 393 Then
            System.Console.WriteLine("数字が393の時")
        ElseIf suuji = 454 Then
            System.Console.WriteLine("数字が454の時")
        Else
            System.Console.WriteLine("上記に当てはまらない時")
        End If
&lt;/PRE&gt;&lt;/DIV&gt;&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/152048.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>CH3COOH</dc:creator><title>[Java]Javaチュートリアル　第10章　基本I/O</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/08/05/151832.aspx</link><pubDate>Tue, 05 Aug 2008 19:18:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/08/05/151832.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/151832.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/08/05/151832.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/151832.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/151832.aspx</trackback:ping><description>&lt;h1&gt;入出力ストリーム&lt;/h1&gt; &lt;p&gt;aoueo.txtを用意しました。このファイルはC:\直下に配置します。&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;aiueo kakikukeko&lt;br&gt;sasi 128 suseso&lt;br&gt;tatitu 256 teto.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;スキャン処理とフォーマット処理&lt;/h2&gt; &lt;p&gt;Scannerクラスを使うことによって、&lt;strong&gt;"c:\\aoueo.txt"&lt;/strong&gt;のテキストファイルを読み込み、トークンに分解する事が出来ます。&lt;/p&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f56e6c24-a354-4aa2-8ed4-1db985f93c04" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;import java.io.*;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) throws IOException {
        Scanner scanner = null;

        try {
            scanner = new Scanner(new 
                    BufferedReader(new FileReader("c:\\aoueo.txt")));

            // 次の要素が無くなるまでループを続ける
            while (scanner.hasNext()) {
                System.out.println(scanner.next());
            }
        } finally {
            if (null != scanner) {
                scanner.close();
            }
        }
    }
}&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h2&gt;各トークンを変換する&lt;/h2&gt;
&lt;p&gt;Scannerはcharを除く全てのプリミティブ型としてのトークンにも対応しています。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d5f2a7b1-8356-4f86-ad33-34979ab993ef" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    int sum = 0;

    // 次の要素が無くなるまでループを続ける
    while (scanner.hasNext()) {
       
        // 次の数字が整数値であるか？
        if(scanner.hasNextInt())
        {
            sum += scanner.nextInt();
        }
        else
        {
            // 整数値でなければ、そのまま表示する
            System.out.println(scanner.next());
        }
    }

    // 合計を表示する
    System.out.println("sum: " + sum);&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;オブジェクトストリーム&lt;/h1&gt;
&lt;p&gt;オブジェクトストリームはオブジェクトの入出力をサポートしています。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d4532b1c-03fc-4ef5-811f-bf69c3ad2ac8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;import java.io.*;
public class Main {

   // 入力するデータ
   static final int[] units = { 12, 8, 13, 29, 50 };

    public static void main(String[] args) 
            throws IOException, ClassNotFoundException {

        ObjectOutputStream outputObjectStream = null;
        try {
            outputObjectStream = new ObjectOutputStream(
                    new BufferedOutputStream(
                    new FileOutputStream("temp")));
            // オブジェクトのシリアライズ
            outputObjectStream.writeObject(units);
        } finally {
            outputObjectStream.close();
        }

        int[] unitInput;
        ObjectInputStream inputObjectStream = null;
        try {
            inputObjectStream = new ObjectInputStream(
                    new BufferedInputStream(
                    new FileInputStream("temp")));
            // オブジェクトのデシリアライズ
            unitInput = (int[])inputObjectStream.readObject();
        } finally {
            inputObjectStream.close();;
        }

        for(int item : unitInput)
        {
            System.out.println(item);
        }
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;複合オブジェクトの出力と入力&lt;/h2&gt;
&lt;p&gt;オブジェクトの管理は、基本データ型をカプセル化しただけのクラスについては重要ではなく、別のオブジェクトへの参照を保持している場合、参照ツリーをたどってObjectInputStream.readObject()をした時に再構築するのに必要なオブジェクトもあわせてストリームに書き出します。 
&lt;p&gt;また同一ストリーム内に単一のオブジェクトへの参照を2回書き込んだ場合、読み出した後も両方が同じオブジェクトに対する参照を持ちます。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:4bb82378-e3e6-4eea-8866-8d4f6fc34b1b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    // 同じオブジェクトを2回連続で書き出す
    Object obj = new Object();
    outputObjectStream.writeObject(obj);
    outputObjectStream.writeObject(obj);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;各readObjectは、writeObjectとマッチさせる必要があるので2回読み込みます。&lt;/p&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a3b58a84-0c49-4e64-8148-65cb9bee982d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    // 2回連続でオブジェクトを読み出す
    Integer obj1 = inputObjectStream.readObject();
    Integer obj2 = inputObjectStream.readObject();&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;結果的に、単一のオブジェクトへの参照である変数obj1,obj2が出来上がります。しかし、別々のストリームに書き出し読み出すと、2つの別々のオブジェクトになります。&lt;/p&gt;
&lt;h2&gt;New I/O パッケージ&lt;/h2&gt;
&lt;p&gt;高速なパフォーマンスが要求される場合、java.io.*ではなく、java.nio.*が使用出来るかもしれません。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/151832.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>CH3COOH</dc:creator><title>[Java]Javaのフレームワークって&amp;hellip;</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/08/05/151744.aspx</link><pubDate>Tue, 05 Aug 2008 02:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/08/05/151744.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/151744.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/08/05/151744.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/151744.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/151744.aspx</trackback:ping><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Javaの勉強をしています。勉強だけの生活も2週間目に突入し、&lt;br&gt;&amp;lt;del&amp;gt;飽きｔ&amp;lt;/del&amp;gt;難しいのでモチベーションが下がってしまい学習の進捗が滞っています。  &lt;p&gt;2ヶ月間でJavaとSQLの技術の習得を命じられていますので、&lt;br&gt;本を見て勉強するだけではなく早めにDBの構築技術も知っておく必要があります。 &lt;br&gt;……って事で、DB周りのフレームワークを調査する事にしました。  &lt;p&gt;&amp;nbsp; &lt;p&gt;Javaを使った業務では一般的にフレームワークを利用している様です。&lt;br&gt;ざっと調べただけでstruts、JSF、Seasar、Wicket、Springと沢山出てきました。&lt;br&gt;この時点では「&lt;strong&gt;Java界ではこのフレームワークさえ押させておけば大丈夫だよ&lt;/strong&gt;」的な&lt;br&gt;&lt;font color="#008000" size="5"&gt;鉄板フレームワーク&lt;/font&gt;があるものだと思っていました。  &lt;p&gt;詳細を調べていくとどうもJavaのとりわけWebアプリは、&lt;br&gt;複数のフレームワークを使用するのがメジャーな様で組み合わせは無限大……(´・ω・`)ｼｮﾎﾞｰﾝ  &lt;p&gt;&amp;nbsp; &lt;p&gt;凪瀬さんにご相談させてこんなフレームワークがあるよーと聞いても理解出来なかったので、&lt;br&gt;Excelで図を起こしてみました。  &lt;p&gt;&lt;a href="http://ch3cooh.wankuma.com/dialy/img/JavaJava_14CC4/Java.jpg"&gt;&lt;img title="Javaフレームワークの切り分け" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="254" alt="Javaフレームワークの切り分け" src="http://ch3cooh.wankuma.com/dialy/img/JavaJava_14CC4/Java_thumb.jpg" width="610" border="0"&gt;&lt;/a&gt;  &lt;p&gt;・・・こんな感じかな？&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/151744.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>CH3COOH</dc:creator><title>[Java]Javaチュートリアル　第9章　例外</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/08/03/151588.aspx</link><pubDate>Sun, 03 Aug 2008 21:44:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/08/03/151588.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/151588.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/08/03/151588.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/151588.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/151588.aspx</trackback:ping><description>&lt;p&gt;例外の定義は、「プログラムの実行時に命令の通常の流れを妨害するイベント」です。 &lt;/p&gt; &lt;p&gt;メソッド内でエラーが発生すると、実行時システムに例外オブジェクトを渡します。これを「例外をスロー(throw)する」と言います。  &lt;p&gt;一旦、メソッドから例外が投げられると、その投げられた例外をキャッチ(catch)出来る例外ハンドラ(exception handler)を見つけるまで、コールスタックを辿り続けます。 &lt;h1&gt;キャッチもしくは明記の要件&lt;/h1&gt; &lt;p&gt;例外を投げる可能性のあるコードは、下記のいずれかに含める必要があります。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;その例外をキャッチするtry文 &lt;/li&gt; &lt;li&gt;その例外を投げる可能性があると明記したメソッド&lt;/li&gt;&lt;/ul&gt; &lt;h2&gt;例外の3つの種類&lt;/h2&gt; &lt;p&gt;エラーと実行時例外は、チェックなし例外(unchecked exception)とも呼ばれます。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;チェック済み例外(checked exception) &lt;/li&gt; &lt;li&gt;エラー(error) &lt;/li&gt; &lt;li&gt;実行時例外(runtime exception)&lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;1.チェック済み例外(checked exception) &lt;/h3&gt; &lt;p&gt;予期出来て回復の必要な例外です。「キャッチもしくは明記の要件」に縛られます。  &lt;h3&gt;2.エラー(error) &lt;/h3&gt; &lt;p&gt;アプリケーションの外側で発生し、想定や回復の出来ない例外です。アプリケーションではこの例外をキャッチしても構わないが、スタックトレースを出力して終了するのも悪くないです。  &lt;h3&gt;3.実行時例外(runtime exception) &lt;/h3&gt; &lt;p&gt;アプリケーションの内部で発生し、想定や回復の出来ない例外です。この種の例外は、ロジックミス等のプログラミング上のバグを表しています。  &lt;p&gt;キャッチして継続するのも良いですが、一般的にはバグを修正すべきです。 &lt;h2&gt;キャッチと明記の回避&lt;/h2&gt; &lt;p&gt;「キャッチもしくは明記の要件」の例外のメカニズムを欠陥だとみなし、チェック済み例外の代わりにチェックなし例外を使用するプログラマもいます。&lt;/p&gt; &lt;h1&gt;例外のキャッチと処理&lt;/h1&gt; &lt;p&gt;チェック済み例外と、実行時例外(チェックなし例外)をわざと発生させるクラスTestExceptionClassを書いてみました。&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:49d9d810-ef75-4abc-be91-418407d18be1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;import java.io.*;
public class TestExceptionClass {

    // 実行時例外の発生するメソッド
    public void run() {
        // 10個分の配列を生成
        Integer[] array = new Integer[10];

        // ループの継続条件は本来i&amp;lt;10をすべきな所を
        // i&amp;lt;=10にして、array[10]にアクセスする
        for (int i=0; i&amp;lt;=10; i++)
        {
            array[i] = 256;
        }
    }

    // チェック済み例外の発生するメソッド
    public void run2() throws FileNotFoundException {
        String hoge = null;

        // ファイルパスの変わりにnullをつっこむ
        FileReader fr = new FileReader(hoge);
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;メソッドrun、run2の呼び出し元は下記の通りです。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8d72019f-d9a7-43aa-81bc-59406bd02339" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public class Main {  
    public static void main(String[] args) {
        TestExceptionClass testExceptCls = new TestExceptionClass();

        // 実行時例外(チェックなし例外)を発生させる
        testExceptCls.run();

        // チェック済み例外を発生させる
        testExceptCls.run2();
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これをコンパイルさせると、メソッドrun2にて下記の様なコンパイルエラーが発生します。 
&lt;p&gt;TestExceptionClass.java:33: 例外 java.io.FileNotFoundException は報告されません。スローするにはキャッチまたは、スロー宣言をしなければなりません。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:85d496d6-42d5-4ea1-b525-c0b1ac1bf847" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;        FileReader fr = new FileReader(hoge); &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;チェック済み例外にも関わらず、例外ハンドラを用意していない為、コンパイルエラーが発生している様です。これによってjava.io.FileNotFoundExceptionをキャッチしていない事がコンパイル時点で発見することが出来ます。 
&lt;p&gt;しかし、チェックなし例外は実行してみないと例外が投げられる事はありません。つまりメソッドrunは実行してみない限りバグがある事は判りません。 
&lt;p&gt;メソッドrunは実行すると、例外java.lang.ArrayIndexOutOfBoundsExceptionが投げられ、下記の通りコールスタックが表示され、プログラムが終了します。 
&lt;p&gt;Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at helloworld.TestExceptionClass.run(TestExceptionClass.java:26)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; at helloworld.Main.main(Main.java:18)
&lt;p&gt;
&lt;h2&gt;try ブロック &lt;/h2&gt;
&lt;h2&gt;chatch ブロック &lt;/h2&gt;
&lt;h2&gt;finally ブロック &lt;/h2&gt;
&lt;h2&gt;全体を組み立てる &lt;/h2&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1d898ced-0ca3-4701-bb56-ae8aa5402615" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    // チェック済み例外の発生するメソッド
    public void run2() {
        // ありえないファイルパス
        String hoge = "c:\\hogehoge";

        try 
        {
            // チェック済み例外を発生させる
            FileReader fr = new FileReader(hoge);
        }
        catch (java.io.FileNotFoundException e)
        {
            // 例外 FileNotFoundExceptionをキャッチする
            System.out.println("catch: " + e.getMessage());
        }
        finally
        {
            // ここはtryブロックを抜ける際に必ず実行される
        }
    }&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;メソッドがスルーする例外の明記&lt;/h2&gt;
&lt;h2&gt;例外をスルーする&lt;/h2&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:85bb5bba-b0c5-4992-ba95-e2aafce9973e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;import java.io.*;
import java.lang.*;
public class TestExceptionClass {

    // 例外
    public void throwException(boolean isBool) 
            throws FileNotFoundException, NullPointerException
    {
        if(isBool)
        {
            // 
            throw new FileNotFoundException();
        }
        else
        {
            throw new NullPointerException();
        }
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;メソッドのthrows節を書くことで、例外が投げられる可能性をメソッド呼び出し元に伝えることが出来ます(呼び元に例外をキャッチする事を強制出来る)。 
&lt;p&gt;例外 java.lang.NullPointerException は、チェックなし例外なのでメソッドのthrows節に明記する必要はありません。
&lt;h2&gt;Throwableとそのサブクラス&lt;/h2&gt;
&lt;p&gt;クラスThrowableにはErrorとExceptionという直系の子孫がいる。ほとんどの例外はクラスExceptionから派生したものである。&lt;/p&gt;
&lt;h2&gt;例外チェーン&lt;/h2&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7afdf0d6-c03c-4b6a-8a89-a1b53abcb145" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;import java.io.*;
import java.lang.*;
public class TestExceptionClass {

    // 例外
    public void throwException(boolean isBool) 
            throws FileNotFoundException, NullPointerException
    {
        if(isBool)
        {
            // 
            throw new FileNotFoundException();
        }
        else
        {
            throw new NullPointerException();
        }
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;チェックされない例外をめぐる論争&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://www.ibm.com/developerworks/jp/java/library/j-jtp05254/"&gt;Javaの理論と実践: 例外をめぐる議論&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;雑感&lt;/h1&gt;
&lt;p&gt;例外についてイマイチ理解しきれていない感があるので復習が必要(特にクラスExceptionの継承と、例外チェーンについて)。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/151588.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>CH3COOH</dc:creator><title>[Java]Javaのフレームワークって</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/08/01/151453.aspx</link><pubDate>Fri, 01 Aug 2008 21:00:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/08/01/151453.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/151453.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/08/01/151453.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/151453.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/151453.aspx</trackback:ping><description>&lt;p&gt;数が多いのでどのフレームワークを勉強して良いのか判らない……&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/151453.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>CH3COOH</dc:creator><title>[Java]Javaチュートリアル　第8章　数と文字列</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/07/31/151301.aspx</link><pubDate>Thu, 31 Jul 2008 19:21:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/07/31/151301.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/151301.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/07/31/151301.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/151301.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/151301.aspx</trackback:ping><description>&lt;h1&gt;数&lt;/h1&gt; &lt;h2&gt;数値クラス&lt;/h2&gt; &lt;p&gt;基本データ型はオブジェクトとは違うので、オブジェクトが必要な場合があります。基本データ型に対応するラッパークラスが存在しています。&lt;br&gt;また、オブジェクトが期待されている所で基本データ型を使用している場合、コンパイラはラッパークラスにボクシング(boxing)してくれます。逆の場合アンボクシング(unboxing)といいます。  &lt;h1&gt;文字&lt;/h1&gt; &lt;p&gt;クラスCharacterは変更不可。生成されたCharacterオブジェクトに変更を加える事は出来ない。  &lt;h1&gt;文字列&lt;/h1&gt; &lt;h2&gt;文字列の生成&lt;/h2&gt; &lt;p&gt;文字列リテラルは、Stringオブジェクトなので、&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e6957fa1-5e14-4f10-9fff-2de49b2a7168" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    String str = "hoge";
    if(!str.isEmpty()) {
        //なんかの処理
    }
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;だけな使い方ではなく、下記の様にも使える。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:43f23497-5a26-4ed7-95c5-3d9dccf77fa0" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    if(!"hoge".isEmpty()) {
        //なんかの処理
    }&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;StringBuilder&lt;/h2&gt;
&lt;p&gt;C#でもありましたね。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a209b328-bded-477b-aa55-6f087282083d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    StringBuilder sb = new StringBuilder();
    sb.append("hoge");
    sb.append("piyo");
    System.out.println(sb);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;StringBufferというクラスもあり、メソッドが同期されてスレッドセーフである点を除いて、StringBuilderと全く同じです。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/151301.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>CH3COOH</dc:creator><title>[Java]Javaチュートリアル　第7章　パッケージ</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/07/31/151300.aspx</link><pubDate>Thu, 31 Jul 2008 19:19:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/07/31/151300.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/151300.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/07/31/151300.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/151300.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/151300.aspx</trackback:ping><description>&lt;h1&gt;パッケージの作成と利用&lt;/h1&gt; &lt;p&gt;名前衝突を避ける為、アクセス制御するために、相互関係にある型は一般的にパッケージされます。  &lt;ul&gt; &lt;li&gt;型の間に関連性があるということが、誰にでも容易に判る。  &lt;li&gt;関連機能を提供しているクラスがどこにあるのか判る。  &lt;li&gt;パッケージによって名前空間が作成されるので、名前衝突しない。  &lt;li&gt;同一パッケージ内の型からは無制限でアクセスを許可するが、パッケージ外からの型アクセスを制限する。&lt;/li&gt;&lt;/ul&gt; &lt;h1&gt;パッケージを作成する&lt;/h1&gt; &lt;p&gt;publicでない全ての型は、パッケージプライベートと呼ばれる。package文を書かなかった場合、無名パッケージに入れられる。&lt;/p&gt; &lt;h1&gt;パッケージに名前をつける&lt;/h1&gt; &lt;h2&gt;命名上のしきたり&lt;/h2&gt; &lt;p&gt;納入先の会社のドメインが&lt;br&gt;&lt;a href="http://ch3cooh.jp/"&gt;http://ch3cooh.jp/&lt;/a&gt;&lt;br&gt;で、プロジェクト名がproject、機能名がfunctionだった場合、&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:58b4e5e1-2997-484d-a4c5-0e1e7d547309" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package jp.ch3cooh.project.function;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;みたく命名するらしい。 
&lt;p&gt;一般的には、組織内の慣習があるのでそれに従うべきだって。 
&lt;h1&gt;パッケージメンバーを使用する&lt;/h1&gt;
&lt;h2&gt;パッケージメンバーを限定名で参照する&lt;/h2&gt;
&lt;p&gt;helloworldパッケージにSuperClassクラスがあるとして、&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:9fbc9e79-4787-49bf-990f-1f71d509e886" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package helloworld;
public class SuperClass {
    // メソッドとか
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ch3coohパッケージのSakusanクラスから使用する場合は、下記の様なコードになります。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:8c55da4f-ee95-4141-805a-1383bd5acc30" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package ch3cooh;
public class Sakusan {
    helloworld.SuperClass superCls = new helloworld.SuperClass();
}&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;パッケージメンバーをインポートする&lt;/h2&gt;
&lt;p&gt;ch3coohパッケージのSakusanクラスからhelloworldパッケージのSuperClassクラスがを使用する場合は、完全限定名を指定して使用します。下記の様なコードになります。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:436343ec-9c92-4b7f-ab1b-3796f793dd4a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package ch3cooh;
import helloworld.SuperClass;
public class Sakusan {
    SuperClass superCls = new SuperClass();
}&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;パッケージ全体をインポートする&lt;/h2&gt;
&lt;p&gt;ch3coohパッケージのSakusanクラスからhelloworldパッケージのSuperClassクラスがを使用する場合は、パッケージ全てをインポートしても使用出来ます。下記の様なコードになります。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6439910a-c0a9-4b2c-bd05-62c9c7f03009" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package ch3cooh;
import helloworld.*;
public class Sakusan {
    SuperClass superCls = new SuperClass();
}&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;パッケージの見かけ上の階層について&lt;/h2&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:aa1de0af-92a9-4193-90bc-51064c6c1a1d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;package animal.dog.*;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;に存在している型を使いたい場合、&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:366aac64-cfaa-42f7-8211-7cf6f532008e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;import animal.*;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;をインポートしても、パッケージ名は包含関係を表しているものではありませんので、&lt;br&gt;使用する事は出来ません。 
&lt;h2&gt;名前の曖昧さ&lt;/h2&gt;
&lt;p&gt;Dogクラスと名前が被った場合、曖昧さを解決するためにパッケージを指定する必要があります。&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/151300.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>CH3COOH</dc:creator><title>[Java][DataBase]さっそくNetBeansからSQL Server 2005に接続する方法を試してみた</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/07/30/151163.aspx</link><pubDate>Wed, 30 Jul 2008 20:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/07/30/151163.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/151163.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/07/30/151163.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/151163.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/151163.aspx</trackback:ping><description>&lt;p&gt;NetBeansっていうオープンソースのIDEを使ってJavaのお勉強をしています。  &lt;p&gt;本を読むだけで頭にインプットされる程賢くないので、サンプルコードを打ち込んで実行してみて、「へぇ～」と言いながら学習しています。7/25から始めたJavaチュートリアル(全18章)も、9章まで進んできたのでようやく折り返し地点ですね。  &lt;p&gt;今課せられている御題は「JavaとSQL」で、Javaは上記のとおり目安があるから良いんだけど、SQLって一言で言われると範疇広いなぁ……  &lt;p&gt;My SQLってフリーなRDBのがあるのは知っているけど導入が面倒くさそう。VS2008EEが入ってるPCを使ってるので、まずはSQL Server 2005を使ってみようかな。 &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;……てなわけで、さっそくNetBeansからSQL Server 2005に接続する方法を試してみました。&lt;/p&gt; &lt;h1&gt;SQL Server 2005側の設定&lt;/h1&gt; &lt;ul&gt; &lt;li&gt;[SQL Server 構成マネージャ(ローカル)]→[SQL Server 2005 ネットワークの構成]→[SQLEXPRESS のプロトコル]を選択し、TCP/IPの状態を確認し「有効」になっている事を確認する。 &lt;/li&gt; &lt;li&gt;TCP/IPが「無効」になっている場合、右クリックし「有効」に変更する。デフォルトの設定のままであれば、TCP/IPのポートが動的になっている為、ポート番地の変更が必要である。 &lt;/li&gt; &lt;li&gt;TCP/IPを右クリックしプロパティを開き、[IP アドレス]タブを開き、[TCP 動的ポート]を空白にした上で、[TCP ポート]に"1433"と入力する。 &lt;/li&gt; &lt;li&gt;PC(SQL Serverサービス)を再起動して、上記の変更を反映する。&lt;/li&gt;&lt;/ul&gt; &lt;h1&gt;SQL Server 2005にログインユーザを追加する&lt;/h1&gt; &lt;p&gt;SQL認証させる為にはログイン名とパスワードが必要になる。 &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=ja&amp;amp;FamilyID=c243a5ae-4bd1-4e3d-94b8-5a0f62bf7796"&gt;ダウンロードの詳細 : Microsoft SQL Server Management Studio Express&lt;/a&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Microsoft SQL Server Management Studio Express(以下、SSMSE)をダウンロードして、インストールする。 &lt;/li&gt; &lt;li&gt;SSMSEを起動し、[PCNAME\SQLEXPRESS]に接続し、[セキュリティ]→[ログイン]を選択し、右クリックする。右クリックし[新しいログイン]を選択する。 &lt;/li&gt; &lt;li&gt;ログイン名を「ch3cooh」、SQL Server 認証のラジオボタンにチェックを入れ、パスワードを「ch3cooh」として、ユーザー登録を完了させる。 &lt;/li&gt; &lt;li&gt;PC(SQL Serverサービス)を再起動して、上記の変更を反映する。 &lt;/li&gt;&lt;/ul&gt; &lt;h1&gt;SQL Server 2005のサーバー認証モードの変更 &lt;/h1&gt; &lt;ul&gt; &lt;li&gt;SSMSEを起動し、[PCNAME\SQLEXPRESS]に接続し、右クリックし[プロパティ]を選択する。&lt;/li&gt; &lt;li&gt;[セキュリティ]→[サーバー認証]の部分を、「SQL Server 認証モードとWindows 認証モード」に変更する。 &lt;/li&gt; &lt;li&gt;PC(SQL Serverサービス)を再起動して、上記の変更を反映する。&lt;/li&gt;&lt;/ul&gt; &lt;h1&gt;NetBeans側の設定&lt;/h1&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=E22BC83B-32FF-4474-A44A-22B6AE2C4E17&amp;amp;displaylang=ja"&gt;ダウンロードの詳細 : Microsoft SQL Server 2005 JDBC Driver&lt;/a&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Microsoft SQL Server 2005 JDBC Driverをダウンロードして任意の場所で解凍する(ここでは、C:\で解凍したとする)。 &lt;/li&gt; &lt;li&gt;プロジェクトから[新規]→[データベースからのエンティティークラス]を選択する。 &lt;/li&gt; &lt;li&gt;[データベース接続]のプルダウンメニューから、[データベースの新規接続]を選択する。&lt;br&gt;[名前]のプルダウンメニューから、[新規ドライバ]を選択し、[追加]ボタンを押し、「c:\sqljdbc_1.0\jpn\sqljdbc.jar」を選択し、[Microsoft SQL Server 2005]を追加する。 &lt;/li&gt; &lt;li&gt;[データベースのURL]を「jdbc:sqlserver://localhost:1433;databaseName=ch3cooh」に変更する。 &lt;/li&gt; &lt;li&gt;[ユーザ名]に「ch3cooh」、[パスワード]に「ch3cooh」と入力し、[了解]ボタンを押下して、SQL Serverへ接続する。&lt;/li&gt;&lt;/ul&gt;&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/151163.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>CH3COOH</dc:creator><title>[Java]Javaチュートリアル　第6章　総称</title><link>http://blogs.wankuma.com/ch3cooh/archive/2008/07/30/151162.aspx</link><pubDate>Wed, 30 Jul 2008 20:08:00 GMT</pubDate><guid>http://blogs.wankuma.com/ch3cooh/archive/2008/07/30/151162.aspx</guid><wfw:comment>http://blogs.wankuma.com/ch3cooh/comments/151162.aspx</wfw:comment><comments>http://blogs.wankuma.com/ch3cooh/archive/2008/07/30/151162.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/ch3cooh/comments/commentRss/151162.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/ch3cooh/services/trackbacks/151162.aspx</trackback:ping><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;この章では、総称(ジェネリクス)を使い、主にコレクション的な使い方を例としてあげます。 &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h1&gt;非総称バージョンのクラス例&lt;/h1&gt; &lt;p&gt; &lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:53c886f7-db27-4c2e-bd1d-2c3d1f506ddc" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public class GenericsClass {
    
    private Object t;
    
    public void set(Object t)
    {
        this.t = t;
    }
            
    public Object get()
    {
        return this.t;
    }
}&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;h1&gt;総称型&lt;/h1&gt;
&lt;p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0f5a9161-ea3e-420d-8271-1c2641a607b8" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public class GenericsClass&amp;lt;T&amp;gt; {
    
    private T t;
    
    public void set(T t)
    {
        this.t = t;
    }

    public T get()
    {
        return this.t;
    }
}&lt;/pre&gt;&lt;/div&gt;&lt;/p&gt;
&lt;p&gt;TはクラスGenericsClass仮型パラメータ(formal type parameter)とも呼ばれる。&lt;br&gt;宣言して使う時は下記の様なコードとなる。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d60b1957-1bd8-4fcd-88b1-a4d8c092c832" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    GenericsClass&amp;lt;String&amp;gt; boxString = new GenericsClass&amp;lt;String&amp;gt;();
    boxString.set("さくさん");
    System.out.println(boxString.get());

    GenericsClass&amp;lt;Integer&amp;gt; boxInteger = new GenericsClass&amp;lt;Integer&amp;gt;();
    boxInteger.set(new Integer(393));
    System.out.println(boxInteger.get()); &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;boxStringに互換性の無いIntegerの型を入れようとすると、&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c2464652-35da-4bf7-a29c-e53d22feb807" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;    GenericsClass&amp;lt;String&amp;gt; boxString = new GenericsClass&amp;lt;String&amp;gt;();
    boxString.set(new Integer(393));
    System.out.println(boxString.get());&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;コンパイル時に下記の様なエラーが出て、コンパイル時に問題がある事が判ります。&lt;/p&gt;
&lt;p&gt;set(java.lang.String) (helloworld.GenericsClass&amp;lt;java.lang.String&amp;gt; 内) を (java.lang.Integer) に適用できません&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; boxString.set(new Integer(393));
&lt;ul&gt;
&lt;li&gt;ジェネリクス型は複数の型パラメータを取る事が出来るが、一意である必要があります。&lt;/li&gt;&lt;/ul&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:37c9d1ee-6af2-44ac-8ca1-c755a20fda29" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;// これはコンパイルエラーが発生する
public class GenericsClass&amp;lt;T, T&amp;gt; {
}

// これはコンパイルエラーは発生しない
public class GenericsClass&amp;lt;T, U&amp;gt; {
}&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;型パラメータのしきたり&lt;/h1&gt;
&lt;p&gt;E　Element&lt;br&gt;K　Key&lt;br&gt;N　Number&lt;br&gt;T　Type&lt;br&gt;V　Value&lt;br&gt;S,U,V　第2、第3、第4のType
&lt;h1&gt;総称メソッドと総称コンストラクタ&lt;/h1&gt;
&lt;p&gt;総称メソッドを使えば、下記の様なことが出来ます。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3719e5f7-d8e4-4cd4-9dbd-a8996986afc2" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public class SuperClass {
    
    public &amp;lt;T&amp;gt; void nakigoeExt(T t)
    {
        System.out.println(t.getClass().getName() + " だわん！");
    }
}

public static void main(String[] args) {
    SuperClass superCls = new SuperClass();
    superCls.nakigoeExt("さくさん");        // java.lang.String だわん！
    superCls.nakigoeExt(new Integer(393));  // java.lang.Integer だわん！
}&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;有界型パラメータ&lt;/h1&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6f2344c5-9aa7-4d27-95e8-844342ee8f83" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public class SuperClass {
    public &amp;lt;T extends String&amp;gt; void nakigoeExt(T t)
    {
        System.out.println(t.getClass().getName() + " だわん！");
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;型パラメータをStringのみに制限します。&lt;/p&gt;
&lt;h1&gt;サブタイプの落とし穴&lt;/h1&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7d5e3ff0-06c3-4976-92d2-5bb241ec698d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public class SuperClass {
    public &amp;lt;T&amp;gt; void nakigoeExt(T t) {
        System.out.println(t.getClass().getName() + " だわん！");
    }
}

GenericsClass&amp;lt;Number&amp;gt; geneNum = new GenericsClass&amp;lt;Number&amp;gt;();
geneNum.set(new Integer(393));   // OK!!
geneNum.set(new Double(393.39)); // OK!!&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;NumberのサブクラスであるInteger、Doubleを突っ込む事が出来ます。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3364f8f9-805d-4d8e-9dce-d0dbd69c03b4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public class SuperClass {
    public void utagoe(GenericsClass&amp;lt;Number&amp;gt; num) {
        System.out.println(num.get());
    }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;utagoe(GenericsClass&amp;lt;Number&amp;gt;)というシグネクチャのメソッドを作った場合、GenericsClass&amp;lt;Integer&amp;gt;、GenericsClass&amp;lt;Double&amp;gt;を渡す事が出来るでしょうか。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0cb262a8-7668-4bdb-89c1-1494f5086498" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public static void main(String[] args) {
    GenericsClass&amp;lt;Number&amp;gt; geneNum = new GenericsClass&amp;lt;Number&amp;gt;();
    GenericsClass&amp;lt;Integer&amp;gt; geneInt = new GenericsClass&amp;lt;Integer&amp;gt;();
    GenericsClass&amp;lt;Double&amp;gt; geneDouble = new GenericsClass&amp;lt;Double&amp;gt;();

    SuperClass superCls = new SuperClass();
    superCls.utagoe(geneNum);       // OK!!
    superCls.utagoe(geneInt);       // NG!!
    superCls.utagoe(geneDouble);    // NG!!
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;GenericsClass&amp;lt;Integer&amp;gt;、GenericsClass&amp;lt;Double&amp;gt;は、GenericsClass&amp;lt;Number&amp;gt;のサブタイプでは無い為、引数として渡す事が出来ません。&lt;/p&gt;
&lt;h1&gt;ワイルドカード&lt;/h1&gt;
&lt;p&gt;「Numberを含めたNumberのサブタイプである全ての型」を引数にする場合は、下記のようにします。これを「Numberを型の上限とする有界ワイルドカード」と言います。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:668fda30-0a38-40b1-be25-8c80a267eba3" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public class SuperClass {
    public void utagoe(GenericsClass&amp;lt;? extends Number&amp;gt; num)
    {
        System.out.println(num.get());
    }
}

public static void main(String[] args) {
    GenericsClass&amp;lt;Number&amp;gt; geneNum = new GenericsClass&amp;lt;Number&amp;gt;();
    GenericsClass&amp;lt;Integer&amp;gt; geneInt = new GenericsClass&amp;lt;Integer&amp;gt;();
    GenericsClass&amp;lt;Double&amp;gt; geneDouble = new GenericsClass&amp;lt;Double&amp;gt;();

    SuperClass superCls = new SuperClass();
    superCls.utagoe(geneNum);       // OK!!
    superCls.utagoe(geneInt);       // OK!!
    superCls.utagoe(geneDouble);    // OK!!
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;逆に「Integerを含めたIntegerのスーパータイプである全ての型」を引数にする場合、下記のようにします。これを「Integerを型の下限とする有界ワイルドカード」と言います。&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:61ad823b-b247-4ef0-b26a-61b1f53b9356" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="java"&gt;public class SuperClass {
    public void utagoe(GenericsClass&amp;lt;? super Integer&amp;gt; num)
    {
        System.out.println(num.get());
    }
}

public static void main(String[] args) {
    GenericsClass&amp;lt;Number&amp;gt; geneNum = new GenericsClass&amp;lt;Number&amp;gt;();
    GenericsClass&amp;lt;Integer&amp;gt; geneInt = new GenericsClass&amp;lt;Integer&amp;gt;();
    GenericsClass&amp;lt;Double&amp;gt; geneDouble = new GenericsClass&amp;lt;Double&amp;gt;();

    SuperClass superCls = new SuperClass();
    superCls.utagoe(geneNum);       // OK!!
    superCls.utagoe(geneInt);       // OK!!
    superCls.utagoe(geneDouble);    // NG!!
}&lt;/pre&gt;&lt;/div&gt;
&lt;h1&gt;型消去&lt;/h1&gt;
&lt;p&gt;J2SE5.0の新機能としてGenericsが追加されました。後方互換性を保つために、コンパイラの実装方法として、型消去が用いられる事になりました。 
&lt;p&gt;この事から、Javaコンパイラによってジェネリクス型についての情報が実行時に消去されます。
&lt;h1&gt;雑感&lt;/h1&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;リフレクションを使えば、何の型に対するジェネリクス型かが判るらしいけど、どうすれば？&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/ch3cooh/aggbug/151162.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>