<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>コンストラクタ</title><revhistory><revision><revnumber>21</revnumber><date>2010-11-08 01:56:04</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>20</revnumber><date>2010-11-07 00:54:14</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>19</revnumber><date>2010-11-06 13:06:22</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>18</revnumber><date>2009-11-02 06:12:08</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>17</revnumber><date>2009-11-02 06:09:55</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>16</revnumber><date>2009-11-02 06:06:16</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>15</revnumber><date>2009-11-02 05:55:48</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>14</revnumber><date>2009-11-02 05:48:55</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>13</revnumber><date>2009-11-02 05:47:10</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>12</revnumber><date>2009-10-30 05:12:56</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>11</revnumber><date>2009-10-23 04:19:02</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2009-10-23 02:35:02</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2008-11-10 05:38:49</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2008-11-10 05:22:06</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2008-10-28 01:27:45</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2008-10-28 01:26:35</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2008-10-28 01:23:47</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2008-10-28 01:19:06</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2008-10-28 01:14:43</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2008-10-28 01:03:28</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2008-10-28 01:02:42</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>コンストラクタ</title><para>属性(の集まり)がインスタンスの型紙として使われました。 </para><para>属性の宣言は変数の宣言と同じ書き方をしますが、ここに変数が取られるわけではありません。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[class]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname>
<![CDATA[ {]]>
<![CDATA[        ]]><methodname><![CDATA[String]]></methodname><![CDATA[ ]]><methodname><![CDATA[name]]></methodname><![CDATA[;]]>
<![CDATA[        ]]><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[price]]></methodname><![CDATA[;]]>
<![CDATA[        ]]>
<![CDATA[        ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[static]]></token><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[main]]></methodname><![CDATA[(]]><methodname><![CDATA[String]]></methodname><![CDATA[[] ]]><methodname><![CDATA[args]]></methodname><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[Item]]></methodname><![CDATA[ ]]><methodname><![CDATA[a]]></methodname><![CDATA[;                 ]]>
<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[ = ]]><phrase><![CDATA["おにぎり"]]></phrase><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[ = 120;]]>
<![CDATA[        }]]>
<![CDATA[ }]]>
</programlisting></listitem></itemizedlist><para>この例では new Item() が行われるとインスタンス(そのクラスのオブジェクト)が作られ、 a.name、a.priceによって、そのインスタンスの属性(変数)にアクセスすることができました。 </para><para>インスタンスを生成するときに使われる Item() のことをコンストラクタと言います。 </para><itemizedlist><listitem><para>コンストラクタはクラスと同じ名前です。 </para></listitem><listitem><para>コンストラクタを呼び出すときは前に new をつけます。 </para></listitem><listitem><para>コンストラクタが呼び出されるとインスタンスが作成されます。 </para></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>コンストラクタの定義</title><para>コンストラクタは定義しなくてもかまいません。 </para><para>インスタンス作成時になんらかの処理をしたいときには、 コンストラクタを定義して記述します。 </para><itemizedlist><listitem><para>コンストラクタには戻り値を指定できません。 </para><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[class]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname>
<![CDATA[ {]]>
<![CDATA[        ...]]>
<![CDATA[        ]]>
<![CDATA[        ]]><methodname><![CDATA[Item]]></methodname><![CDATA[()]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[(]]><phrase><![CDATA["Itemインスタンスを作成しました"]]></phrase><![CDATA[);]]>
<![CDATA[        }]]>
<![CDATA[ ]]>
<![CDATA[        ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[static]]></token><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[main]]></methodname><![CDATA[(]]><methodname><![CDATA[String]]></methodname><![CDATA[[] ]]><methodname><![CDATA[args]]></methodname><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[Item]]></methodname><![CDATA[ ]]><methodname><![CDATA[a]]></methodname><![CDATA[;                 ]]>
<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname><![CDATA[();]]>
<![CDATA[                ...]]>
<![CDATA[        }]]>
<![CDATA[ }]]>
</programlisting></listitem></itemizedlist><para>この例では new Item() が呼び出されるとインスタンスが作成され、 「Itemインスタンスを作成しました」と表示されます。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>オーバーロード</title><para>引数をとるコンストラクタを定義することもできます。 </para><para>引数の型や引数の個数が異なればいくつコンストラクタを定義してもよい。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[class]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname>
<![CDATA[ {]]>
<![CDATA[        ...]]>

<![CDATA[        ]]><methodname><![CDATA[Item]]></methodname><![CDATA[()]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[println]]></methodname><![CDATA[(]]><phrase><![CDATA["Itemインスタンスを作成しました"]]></phrase><![CDATA[);]]>
<![CDATA[        }]]>

<![CDATA[        ]]>
<![CDATA[        ]]><methodname><![CDATA[Item]]></methodname><![CDATA[(]]><methodname><![CDATA[String]]></methodname><![CDATA[ ]]><methodname><![CDATA[name]]></methodname><![CDATA[, ]]><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[price]]></methodname><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><token><![CDATA[this]]></token><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[ = ]]><methodname><![CDATA[name]]></methodname><![CDATA[;]]>
<![CDATA[                ]]><token><![CDATA[this]]></token><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[ = ]]><methodname><![CDATA[price]]></methodname><![CDATA[;]]>
<![CDATA[        }]]>
<![CDATA[ ]]>
<![CDATA[        ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[static]]></token><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[main]]></methodname><![CDATA[(]]><methodname><![CDATA[String]]></methodname><![CDATA[[] ]]><methodname><![CDATA[args]]></methodname><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[Item]]></methodname><![CDATA[ ]]><methodname><![CDATA[a]]></methodname><![CDATA[;                 ]]>
<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname><![CDATA[(]]><phrase><![CDATA["ガム"]]></phrase><![CDATA[, 150);]]>
<![CDATA[        }]]>
<![CDATA[ }]]>
</programlisting></listitem></itemizedlist><para>インスタンスを作成すると同時に、インスタンス変数に値を代入するコンストラクタの例です。 </para><para>値はコンストラクタの引数として与えています。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>コンストラクタを記述するときの注意</title><para>引数の個数が異なれば、いくつでもコンストラクタを記述することができました。 </para><itemizedlist><listitem><para>引数のあるコンストラクタを記述するときは、引数のないコンストラクタも記述するようにしましょう。 </para></listitem><listitem><para>次の例に示すように、本体が空のメソッドでもよい。 </para></listitem></itemizedlist><para>記述していなくても使うことがなければ問題ありませんが、 引数のないコンストラクタを使おうとするとエラーになります。 後日そのクラスのサブクラスを作成するなどで、 気づかないうちに引数のないコンストラクタが使われるかもしれません。 </para><section><title>例</title><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><token><![CDATA[public]]></token><![CDATA[ ]]><token><![CDATA[class]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname>
<![CDATA[ {]]>
<![CDATA[        ...]]>

<![CDATA[        ]]><methodname><![CDATA[Item]]></methodname><![CDATA[()]]>
<![CDATA[        {]]>
<![CDATA[        }]]>

<![CDATA[        ]]>
<![CDATA[        ]]><methodname><![CDATA[Item]]></methodname><![CDATA[(]]><methodname><![CDATA[String]]></methodname><![CDATA[ ]]><methodname><![CDATA[name]]></methodname><![CDATA[, ]]><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[price]]></methodname><![CDATA[)]]>
<![CDATA[        {]]>
<![CDATA[                ]]><token><![CDATA[this]]></token><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[ = ]]><methodname><![CDATA[name]]></methodname><![CDATA[;]]>
<![CDATA[                ]]><token><![CDATA[this]]></token><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[ = ]]><methodname><![CDATA[price]]></methodname><![CDATA[;]]>
<![CDATA[        }]]>
<![CDATA[ ]]>
<![CDATA[        ...]]>
<![CDATA[ }]]>
</programlisting></listitem></itemizedlist></section></section></article>