دستگرمی

دستگرمی اول

دستگرمی این هفته:

خروجی کد جاوای زیر چیست؟

public class Program {
	private static Integer i = 66;
    {
        char newCh = (char) (--i).intValue();
    }
    public static void main(String[] args) {
        method();
    }
    static void method() {
    	Program t1, t2;
        Long l1 = i.longValue(), l2 = l1++;
        t1 = new Program();
        System.out.print(l1 - Program.i);
        t2 = new Program();
        System.out.print(l2 - Program.i);
    }
}

پاسخ:

خروجی این کد برابر است با: 22

برای رسیدن به خروجی، متد method را خط به خط بررسی می‌کنیم:
خط 10: متغیرهای t1 و t2 هنوز new نشده‌اند.

خط 11: متغیر i برابر با 66 است بنابراین l1 برابر با 66 می‎شود. در مورد ++l2=l1، باید توجه داشت که چون ++بعد از اسم متغیر آمده، ابتدا l2 برابر با l1 یعنی 66 می‌شود و سپس مقدار l1 یک واحد افزایش یافته و برابر با 67 می‌شود. بنابراین در انتهای اجرای این خط، داریم: l1=67 و l2=66

خط 12: یک شی جدید از کلاس Program ایجاد می‌شود و در نتیجه آن بلوک مقداردهی اولیه هم اجرا شده و مقدار متغیر استاتیک i برابر با 65 می‌شود.

خط 13: خواهیم داشت: 67-65=2. پس عدد 2 در خروجی چاپ می‌شود.

خط 14: یک شی جدید از کلاس Program ایجاد می‌شود و در نتیجه آن، بلوک مقداردهی اولیه هم اجرا شده و مقدار متغیر استاتیک i برابر با 64 می‌شود.

خط 15: خواهیم داشت: 66-64=2. پس عدد 2 در خروجی چاپ می‌شود.

چند نکته:

  •  با load کلاس در حافظه، متغیرهای استاتیک مقداردهی می‎شوند.
  • هرگاه یک شی جدید ایجاد شود، بلوک مقداردهی اولیه اجرا می‌شود. پیشنهاد می‌شه اسلایدهای جلسه ۶ آموزش جاوا از صفحه ۲۲ تا ۲۷ را مرور کنید.

.

.

.

با ما همراه باشید

آدرس کانال تلگرام: JavaCupIR@

آدرس اکانت توییتر: JavaCupIR@

آدرس صفحه اینستاگرام: javacup.ir

آدرس گروه لینکدین: Iranian Java Developers

 

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا