- PR -

「AメソッドからAメソッドを呼ぶ」について

1
投稿者投稿内容
会議室デビュー日: 2006/09/28
投稿数: 10
投稿日時: 2006-11-29 20:25
初歩的質問で申し訳ありませんが
教えて下さい

■やってるこ
@とある処理からXクラスをnewする
AXインスタンスのAメソッドを処理する
BAメソッドの中でthis.A()を呼ぶ

■質問
Bの処理はAの処理の変数に影響しますか?

当然、無限ループさせないロジックにはなっています。
Aメソッドにstatic変数は記述してません。

よろしくお願いします
ださいくろう
常連さん
会議室デビュー日: 2006/10/17
投稿数: 46
お住まい・勤務地: 豊田市
投稿日時: 2006-11-29 20:36
実際に試されたらわかることなのでは?
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2006-11-29 20:44
変数とは、ローカル変数のこと?それともインスタンス変数のこと?

メソッド内で作成されたローカル変数なら、影響は受けない。
インスタンス変数なら、影響を受ける。

ただし、ローカル変数だからといって、その参照先がインスタンス変数と同じなら影響を受ける。
引数も同様に、実引数(引渡し側)によって変わる。

他にも注意点があるかもしれないが、もう思いつかない。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-11-29 20:47
引用:

■質問
Bの処理はAの処理の変数に影響しますか?



もしかして変数のスコープとかの話なのかなぁ。

staticフィールドを使ってれば当然影響はありますよ。
今の想定ケースではインスタンスメソッドの呼び出しなので
インスタンスフィールドを使っていても影響があります。

ローカル変数であれば影響ありません。

コード:
public class X {
    public static void main(String[] args) {
        X x = new X();
        x.a(true);

        int local = 0;
        System.out.println(staticField); // 1が表示される
        System.out.println(x.instanceField); // 1が表示される
        System.out.println(local); // 0が表示される
    }
    /** sataticフィールド */
    static int staticField = 0;
    /** インスタンスフィールド */
    int instanceField = 0;

    public void a(boolean flag) {
        staticField++; // sataticフィールドの変更
        this.instanceField++; // インスタンスフィールドの変更

        int local = 0;
        local++; // ローカル変数の変更

        if (flag) {
            this.a(false);
        }
    }
}



こういうのは実験用プログラムを書いて納得いくまでいじるのが一番です。
Eclipseなどのエディタを使っているのであれば、ステップ実行してみましょう。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-11-29 21:07
> BAメソッドの中でthis.A()を呼ぶ

再帰処理ですね。Javaに限らず使う手法ですので、
ネットで検索するとたくさんネタが見つかりますよ。
1

スキルアップ/キャリアアップ(JOB@IT)