0 امتیاز
قبل در برنامه نویسی توسط (467 امتیاز)
ویرایش شده قبل توسط

سلام. کدی که در سوال مرتبط قبلی نوشته شد (یکی از کد‌های آموزش‌های جاوا کاپ) را به صورت زیر تغییر دادم:

class That {
	private String name = "A";

	public static void test(MainApp app) {
		System.out.println(app.getName());
	}

}

public class MainApp {
	private String name = "B";

	public void test(String name) {
		this.name = name;
		MainApp app = new MainApp();
		That.test(app);
	}

	public String getName() {
		return name;
	}

	public static void main(String[] args) {
		new MainApp().test("C");
	}

}

مگر منظور از شی جاری، آبجکت همان کلاسی که در آن هستیم نیست. یعنی در کد فوق، آبجکت کلاس MainApp؟ اگر منظور این است من بجای استفاده از this، یک آبجکت از روی کلاس MainApp ایجاد کردم و آن را ارسال کردم. اما جواب چیز دیگری است. در حالت عادی جواب باید C شود، ولی با کدی که در بالا است جواب B چاپ می‌شود. لطف کنید راهنمایی کنید. ممنون.

مربوط به این پاسخ: کاربرد کلمه کلیدی this در جاوا

2 پاسخ

+1 امتیاز
قبل توسط (365 امتیاز)

در متد test فوق، this و app دو شیء متفاوت هستند. در واقع از کلاس MainApp دوبار نمونه‌سازی شده است: یک بار در متد main و یک بار در متد test . پس این دو شیء با هم فرق می‌کنند.

دقت کنید: this یعنی شیئی از همان کلاس که متد مربوطه روی آن فراخوانی شده است (هر شیئی که از آن کلاس ساخته شده برابر با this نیست). در مثال فوق، در تابع test معنای this شیئی است که test روی آن فراخوانی شده (یعنی شیئی که در متد main با کمک new ساخته شده) و نه شیءی که مستقلاً در این test ایجاد شده است.

0 امتیاز
قبل توسط (1.1هزار امتیاز)

در اینگونه مواقع برنامرو trace کنید و براحتی متوجه مشکل یا مفهوم میشید. متد test از کلاس That، یک MainApp میگیره و name اون رو چاپ میکنه. در متد test از کلاس MainApp شما در آخر متد یک شئ جدید MainApp درست کرده اید و به متد test از کلاس That ارسال کردید بنابراین فیلد name این شئ جدید مقدارش برابر "B" است. حالا اگر متد test از کلاس MainApp را بصورت زیر بنویسیم، "C" چاپ خواهد شد.

    public void test(String name) {
        this.name = name;
        That.test(htis);
    }

سوالات مشابه

+2 امتیاز
2 پاسخ 2.4هزار بازدید
سوال شده 8 سال قبل در برنامه نویسی توسط ssss (467 امتیاز)
+1 امتیاز
1 پاسخ 350 بازدید
+2 امتیاز
2 پاسخ 3.2هزار بازدید
+1 امتیاز
0 پاسخ 1.0هزار بازدید
+1 امتیاز
0 پاسخ 794 بازدید
0 امتیاز
1 پاسخ 647 بازدید
+1 امتیاز
1 پاسخ 686 بازدید
...