mine19876293
@mine19876293 (ミッキー)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

JAVA メンバ変数

Q&A

解決したいこと

ここに解決したい内容を記載してください。

ゲッターでフィールドから取得するコードなのですが、
this.account = account; からゲッターで取得
してるとchat gpt が言ってるのですが、
これはフィールドではない気がするのですが、
これはメソッドの中にあるローカル変数だと思うのですが、
どうでしょうか?

発生している問題・エラー

login.java
public Login(String account, String password) {
    this.account = account;  // ← メンバ変数扱い?
    this.password = password;
}

Main.java
System.out.println("アカウント名は:"+human.getAccount()+"です");
//ゲッターでaccountを取得
0

3Answer

this.account = account; は、引数で受け取ったローカル変数accountの値をthis.account =でメンバ変数accountに代入しています。
ゲッターで取得はしていません。

public String getAccount() {
    return this.account;  // this.を省略して return account でもいい
}

とゲッターメソッドを定義すれば、Main.javaのhuman.getAccount()の部分が「ゲッターでaccountを取得する」ということになります。

0Like

記載いただいている情報だけでは判断できない部分がありますが、想定で補完しながら回答します。
this.account = accountがフィールドではなくローカル変数なのでは?
とのことですが、半分正解で、半分外れです。
this.accountはフィールド変数を指し、
accountはローカル変数を指しています。

以下は私の想定のコードになるので、違うところがあれば指摘してください。
おそらくMain.javaLogin.javaはそれぞれ以下のような定義になっていると想像しています。

Main.java
public class Main {
    public static void main(String[] args) throws Exception {
        // newをしてLogin.javaを使えるようにしていると予想
        Login human = new Login("test account","test password");
        System.out.println("アカウント名は:"+human.getAccount()+"です");
    }
}
Login.java
public class Login {
    // フィールド変数
    String account;
    String password;

    // コンストラクタ
    // おそらくこのような実装
    public Login(String account, String password) {
        this.account = account;
        this.password = password;
    }

    // ゲッター
    // おそらくこのような実装
    public String getAccount() {
        return this.account;
    }
}

質問者さんが書いていただいている

login.java
public Login(String account, String password) {
    this.account = account;  // ← メンバ変数扱い?
    this.password = password;
}

の内容はメソッドではなく、コンストラクタになります。
これは、newをしたときに呼び出されるもので、newしたときに渡した値をフィールド変数に指定しています。
this.account = accountのうち
左側のthis.accountthisは自分自身のクラスということを表していて、Login.javaのフィールド変数を指します。
右側のaccountはコンストラクタのLoginに渡される値を指します。

つまり、newしたときに渡した値を、フィールド変数の中身として設定をしていることになります。

そして、ゲッターでは(※あくまでも私の想定になるので、質問者さんの実装は違うかもしれません)

    public String getAccount() {
        return this.account;
    }

と、ここでもthis.accountを指定しています。
newしたときに渡した値がthis.accountに設定されているので、ゲッターを使うことでアカウントの中身が取得できる
ということになります。

こちらで回答になっているでしょうか
わかりにくいところ等あればご指摘ください

0Like

他の方が仰っているように例示部分はコンストラクタ.

GPTは言語モデルなので論理は理解出来ずたまに無茶苦茶なこと言うのでGPTで学習はしてはいけない.
自称AIに頼る前に必ずドキュメントを読むこと.

0Like

Your answer might help someone💌