<?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>55</revnumber><date>2011-10-27 05:50:29</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>54</revnumber><date>2010-11-07 00:46:30</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>53</revnumber><date>2010-11-07 00:45:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>52</revnumber><date>2010-11-06 13:50:47</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>51</revnumber><date>2010-11-06 13:37:52</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>50</revnumber><date>2010-11-06 13:23:34</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>49</revnumber><date>2010-11-06 13:09:15</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>48</revnumber><date>2010-11-06 13:04:23</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>47</revnumber><date>2010-11-06 05:30:33</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>46</revnumber><date>2010-11-06 05:28:46</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>45</revnumber><date>2010-11-06 05:24:31</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>44</revnumber><date>2010-11-06 05:23:13</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>43</revnumber><date>2010-11-06 05:17:37</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>42</revnumber><date>2010-11-06 05:14:13</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>41</revnumber><date>2010-11-06 04:59:23</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>40</revnumber><date>2010-11-06 04:52:40</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>39</revnumber><date>2010-11-06 04:44:44</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>38</revnumber><date>2009-11-02 05:41:31</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>37</revnumber><date>2009-11-02 05:37:19</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>36</revnumber><date>2009-11-02 05:30:22</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>35</revnumber><date>2009-11-02 05:29:26</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>34</revnumber><date>2009-10-30 05:07:11</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>33</revnumber><date>2009-10-30 04:58:59</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>32</revnumber><date>2009-10-30 04:43:38</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>31</revnumber><date>2009-10-30 04:42:49</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>30</revnumber><date>2009-10-30 04:39:28</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>29</revnumber><date>2009-10-23 12:51:07</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>28</revnumber><date>2009-10-23 12:45:15</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>27</revnumber><date>2009-10-23 12:40:42</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>26</revnumber><date>2009-10-23 12:39:28</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>25</revnumber><date>2009-10-23 12:32:10</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>24</revnumber><date>2009-10-23 12:26:26</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>23</revnumber><date>2009-10-23 12:19:33</date><authorinitials>masahiko</authorinitials><revremark>21のリビジョンに戻す</revremark></revision><revision><revnumber>22</revnumber><date>2009-10-23 12:11:33</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>21</revnumber><date>2009-10-23 12:06:59</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>20</revnumber><date>2009-10-23 11:49:56</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>19</revnumber><date>2009-10-23 11:42:57</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>18</revnumber><date>2009-10-23 11:40:57</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>17</revnumber><date>2009-10-23 05:52:49</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>16</revnumber><date>2009-10-23 05:52:17</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>15</revnumber><date>2009-10-23 05:44:54</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>14</revnumber><date>2009-10-23 05:41:26</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>13</revnumber><date>2009-10-23 05:34:16</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>12</revnumber><date>2009-10-23 04:50:38</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>11</revnumber><date>2009-10-23 04:18:17</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>10</revnumber><date>2008-11-12 06:36:51</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>9</revnumber><date>2008-11-12 06:36:21</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>8</revnumber><date>2008-11-12 06:28:56</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>7</revnumber><date>2008-11-12 06:27:39</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>6</revnumber><date>2008-11-12 06:01:18</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>5</revnumber><date>2008-11-12 05:58:22</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>4</revnumber><date>2008-11-12 05:55:14</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>3</revnumber><date>2008-11-12 05:51:32</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>2</revnumber><date>2008-11-12 05:50:51</date><authorinitials>masahiko</authorinitials></revision><revision><revnumber>1</revnumber><date>2008-11-12 05:45:19</date><authorinitials>masahiko</authorinitials></revision></revhistory></articleinfo><section><title>メソッド</title><para>クラスのもつ機能や動作、操作を定義したものをメソッドといいます。 </para><para>メソッドはインスタンス(クラスのオブジェクト)に対する（オブジェクトを利用した）処理を記述したものとも言えます。 </para><para>Itemクラスのメソッドを定義してみましょう。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=itemClass.png"/></imageobject><textobject><phrase>itemClass.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>前回作成したプログラムはこのようでした。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><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[        ]]><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[, ]]><methodname><![CDATA[b]]></methodname><![CDATA[, ]]><methodname><![CDATA[c]]></methodname><![CDATA[, ]]><methodname><![CDATA[d]]></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[=100;]]>

<![CDATA[                ]]><methodname><![CDATA[b]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[b]]></methodname><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[=]]><phrase><![CDATA["おにぎり"]]></phrase><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[b]]></methodname><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[=120;]]>

<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[=]]><phrase><![CDATA["お茶"]]></phrase><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[=150;]]>

<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[printf]]></methodname><![CDATA[(]]><phrase><![CDATA["%s %d\n"]]></phrase><![CDATA[, ]]><methodname><![CDATA[a]]></methodname><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[, ]]><methodname><![CDATA[a]]></methodname><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[);]]>
<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[printf]]></methodname><![CDATA[(]]><phrase><![CDATA["%s %d\n"]]></phrase><![CDATA[, ]]><methodname><![CDATA[b]]></methodname><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[, ]]><methodname><![CDATA[b]]></methodname><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[);]]>
<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[printf]]></methodname><![CDATA[(]]><phrase><![CDATA["%s %d\n"]]></phrase><![CDATA[, ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[, ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[);]]>
<![CDATA[        }]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><para>22～24行目に各変数の指しているオブジェクトの値を表示するためのprint文があります。 </para><para>この部分をメソッドを使って書き直します。 </para><!--rule (<hr>) is not applicable to DocBook--><section><title>メソッドの定義</title><para>Item.javaにshowという名前のメソッドを追加します。 </para><para>showメソッドの定義は4行で書けます。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[show]]></methodname><![CDATA[()]]>
<![CDATA[{]]>
<![CDATA[        ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[printf]]></methodname><![CDATA[(]]><phrase><![CDATA["%s %d\n"]]></phrase><![CDATA[, ]]><token><![CDATA[this]]></token><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[, ]]><token><![CDATA[this]]></token><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[);]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><para>このメソッドは指定されたインスタンス内の変数の値を表示するものです。 </para><para>値を返さないので型はvoidです。 </para><para>これを属性の定義の後ろ(5行目)に追加します。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>メソッドの利用</title><para>値を返さないメソッドの使い方は </para><itemizedlist><listitem override="none"><para><emphasis role="strong">インスタンス.メソッド();</emphasis> </para></listitem></itemizedlist><para>です。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ a.show();]]></screen></listitem></itemizedlist><para>のように、インスタンスとメソッド名をピリオドでつなぎ後ろに括弧を書きます。 </para><para>void(値を返さない)型のメソッドの場合 </para><itemizedlist><listitem override="none"><para>インスタンスxxxに対してメソッドyyy()を行う </para></listitem></itemizedlist><para>のように解釈すればよい。 </para><para>この場合は「インスタンスaに対してshow()を行う」と読めます。 </para><para>最初のプログラムでprint文で書いていたところをすべて、この形に書き直すとこのようになります。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><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[        ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[show]]></methodname><![CDATA[()]]>
<![CDATA[        {]]>
<![CDATA[                ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[printf]]></methodname><![CDATA[(]]><phrase><![CDATA["%s %d\n"]]></phrase><![CDATA[, ]]><token><![CDATA[this]]></token><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[, ]]><token><![CDATA[this]]></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[, ]]><methodname><![CDATA[b]]></methodname><![CDATA[, ]]><methodname><![CDATA[c]]></methodname><![CDATA[, ]]><methodname><![CDATA[d]]></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[=100;]]>

<![CDATA[                ]]><methodname><![CDATA[b]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[b]]></methodname><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[=]]><phrase><![CDATA["おにぎり"]]></phrase><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[b]]></methodname><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[=120;]]>

<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[ = ]]><token><![CDATA[new]]></token><![CDATA[ ]]><methodname><![CDATA[Item]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[name]]></methodname><![CDATA[=]]><phrase><![CDATA["お茶"]]></phrase><![CDATA[;]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[=150;]]>

<![CDATA[                ]]><methodname><![CDATA[a]]></methodname><![CDATA[.]]><methodname><![CDATA[show]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[b]]></methodname><![CDATA[.]]><methodname><![CDATA[show]]></methodname><![CDATA[();]]>
<![CDATA[                ]]><methodname><![CDATA[c]]></methodname><![CDATA[.]]><methodname><![CDATA[show]]></methodname><![CDATA[();]]>
<![CDATA[        }]]>
<![CDATA[}]]>
</programlisting></listitem></itemizedlist><!--rule (<hr>) is not applicable to DocBook--></section><section><title>メソッドの動作</title><para>メソッドが </para><itemizedlist><listitem override="none"><para>インスタンス.メソッド(); </para></listitem></itemizedlist><para>として呼び出されると、このときのインスタンスの値が this に対応付けられてから、 メソッド本体が実行されます。 </para><!--rule (<hr>) is not applicable to DocBook--><section><title>例</title><para>上のプログラムで変数a,b,cの値は次のようでした。(前回の解答参照) </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=kekka2.png"/></imageobject><textobject><phrase>kekka2.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>すなわち </para><itemizedlist><listitem><para>aの値は,アドレス4a5ab2にあるItemクラスのインスタンス </para></listitem><listitem><para>bの値は,アドレス1888759にあるItemクラスのインスタンス </para></listitem><listitem><para>cの値は,アドレス6e1408にあるItemクラスのインスタンス </para></listitem></itemizedlist><para>さて、27行目の </para><itemizedlist><listitem override="none"><para>a.show(); </para></listitem></itemizedlist><para>が実行されたときの動作を追ってみましょう。 </para><orderedlist numeration="arabic"><listitem><para>aの値がthisに渡され </para></listitem><listitem><para>showの本体が実行される </para></listitem></orderedlist><para>aの値がthisに渡されると、thisの値は Item@4a5ab2 となり aが指しているItemクラスのインスタンスをthisで参照できることになります。 </para><para>showメソッドの本体では this.nameとthis.priceの値を表示しています。 </para><para>したがって </para><itemizedlist><listitem override="none"><para>a.show(); </para></listitem></itemizedlist><para>が行われると、 aが参照しているItemインスタンス内の変数の値が表示されます。 </para><itemizedlist><listitem override="none"><para><inlinemediaobject><imageobject><imagedata fileref="http://ei-www.hyogo-dai.ac.jp/~masahiko/moin.cgi/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89?action=AttachFile&amp;do=get&amp;target=itemObject.png"/></imageobject><textobject><phrase>itemObject.png</phrase></textobject></inlinemediaobject> </para></listitem></itemizedlist><para>同様に、28行目の </para><itemizedlist><listitem override="none"><para>b.show(); </para></listitem></itemizedlist><para>ではbの値がthisに渡されて実行されるので、 bが参照しているItemインスタンス内の変数の値が表示されます。 </para><!--rule (<hr>) is not applicable to DocBook--></section></section><section><title>値を返すメソッド</title><para>値を返すメソッドは次のように記述します </para><itemizedlist><listitem override="none"><para>メソッド定義の先頭で返す型を指定 </para></listitem><listitem override="none"><para>メソッド本体ではreturn文を使って値を返す </para><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[getPrice]]></methodname><![CDATA[()]]>
<![CDATA[ {]]>
<![CDATA[     ]]><token><![CDATA[return]]></token><![CDATA[ ]]><token><![CDATA[this]]></token><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[;]]>
<![CDATA[ }]]>
</programlisting></listitem><listitem override="none"><para>この例では値を返すことしかしていませんが、計算などの処理も行えます。 </para></listitem></itemizedlist><para>値を返すメソッドは計算式の中で使えます。 呼び出し方は同じです。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ goukei = a.getPrice() + b.getPrice() + c.getPrice();]]></screen></listitem></itemizedlist><para>private属性の値を返すだけのメソッドはしばしば利用されます。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>値を修正するメソッド</title><para>メソッド内で、thisが指しているオブジェクト内の変数の値を修正することもできます。 </para><para>例としてsetPriceメソッドを示します。 </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[setPrice]]></methodname><![CDATA[(]]><token><![CDATA[int]]></token><![CDATA[ ]]><methodname><![CDATA[n]]></methodname><![CDATA[)]]>
<![CDATA[ {]]>
<![CDATA[     ]]><token><![CDATA[this]]></token><![CDATA[.]]><methodname><![CDATA[price]]></methodname><![CDATA[ = ]]><methodname><![CDATA[n]]></methodname><![CDATA[;]]>
<![CDATA[ }]]>
</programlisting></listitem></itemizedlist><para>このメソッドは引数をとるので、呼び出し側でも引数の指定が必要です。 </para><para>mainメソッド内で </para><itemizedlist><listitem override="none"><screen><![CDATA[ b.setPrice(250);]]></screen></listitem></itemizedlist><para>を行うと、 bの指しているオブジェクト内の変数priceの値が250に修正されます。 </para><para>private属性の値を修正するメソッドはしばしば利用されます。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>setPrice(), getPrice()</title><para>こんなメソッドを使わなくても、オブジェクト内の変数を直接参照すれば同じ処理が簡単に書けると思ったことでしょう。 </para><para>小さなプログラムの場合はそれでかまいませんが、 大きなプログラムや堅牢性が要求される場合には、この形のメソッドが多用されます。 </para><para>属性をprivateにしておき、 値の参照や修正をメソッドを使って行うようにすれば、 オブジェクトの状態をすべてクラス内で管理できるからです。 </para><!--rule (<hr>) is not applicable to DocBook--></section><section><title>this</title><para>thisはキーワードです。 </para><itemizedlist><listitem override="none"><para>変数のように見えますが代入することはできません。 </para></listitem></itemizedlist><para>あいまいさが無いときは<emphasis role="strong">this.を省略</emphasis>することができます。 </para><para>このページで示したメソッドではthis.がなくてもどの変数を指しているか明らかなので省略して </para><itemizedlist><listitem override="none"><programlisting format="linespecific" language="java" linenumbering="numbered" startinglinenumber="1"><![CDATA[ ]]><token><![CDATA[void]]></token><![CDATA[ ]]><methodname><![CDATA[show]]></methodname><![CDATA[()]]>
<![CDATA[ {]]>
<![CDATA[     ]]><methodname><![CDATA[System]]></methodname><![CDATA[.]]><methodname><![CDATA[out]]></methodname><![CDATA[.]]><methodname><![CDATA[printf]]></methodname><![CDATA[(]]><phrase><![CDATA["%s %d\n"]]></phrase><![CDATA[, ]]><methodname><![CDATA[name]]></methodname><![CDATA[, ]]><methodname><![CDATA[price]]></methodname><![CDATA[);]]>
<![CDATA[ }]]>
</programlisting></listitem></itemizedlist><para>のように書けます。 </para><para>thisを使って次のように書くこともしばしば行われます。 </para><itemizedlist><listitem override="none"><screen><![CDATA[ void setPrice(int price)
 {
     this.price = price;
 }]]></screen></listitem></itemizedlist><para>priceという同じ名前がありますがthisを使うことで区別ができます。 </para><itemizedlist><listitem override="none"><para>priceは引数 </para></listitem><listitem override="none"><para>this.priceはインスタンス内の変数 </para></listitem></itemizedlist></section></section></article>