دستگرمی اول
دستگرمی این هفته:
خروجی کد جاوای زیر چیست؟
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