<?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>510</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>36</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>4</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>本記事は「[Javaチュートリアル 第10章 基本I/O](http://ch3cooh.jp/other/study-java-10/)」に転記いたしました。&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>27</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>4</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>本記事は「[Javaチュートリアル 第9章 例外](http://ch3cooh.jp/other/study-java-09/)」に転記いたしました。&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>10</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>本記事は「[NetBeansからSQL Server 2005に接続する](http://ch3cooh.jp/other/connect-to-sql-server-2005-using-netbeans/)」に転記いたしました。&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>100</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>