دستگرمی اول

دستگرمی این هفته:
خروجی کد جاوای زیر چیست؟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); } } |
پاسخ:
خروجی این کد برابر است با: ۲۲
برای رسیدن به خروجی، متد method را خط به خط بررسی میکنیم:
خط ۱۰: متغیرهای t1 و t2 هنوز new نشدهاند.
خط ۱۱: متغیر i برابر با ۶۶ است بنابراین l1 برابر با ۶۶ میشود. در مورد ++l2=l1، باید توجه داشت که چون ++بعد از اسم متغیر آمده، ابتدا l2 برابر با l1 یعنی ۶۶ میشود و سپس مقدار l1 یک واحد افزایش یافته و برابر با ۶۷ میشود. بنابراین در انتهای اجرای این خط، داریم: l1=67 و l2=66
خط ۱۲: یک شی جدید از کلاس Program ایجاد میشود و در نتیجه آن بلوک مقداردهی اولیه هم اجرا شده و مقدار متغیر استاتیک i برابر با ۶۵ میشود.
خط ۱۳: خواهیم داشت: ۶۷-۶۵=۲٫ پس عدد ۲ در خروجی چاپ میشود.
خط ۱۴: یک شی جدید از کلاس Program ایجاد میشود و در نتیجه آن، بلوک مقداردهی اولیه هم اجرا شده و مقدار متغیر استاتیک i برابر با ۶۴ میشود.
خط ۱۵: خواهیم داشت: ۶۶-۶۴=۲٫ پس عدد ۲ در خروجی چاپ میشود.
چند نکته:
- با load کلاس در حافظه، متغیرهای استاتیک مقداردهی میشوند.
- هرگاه یک شی جدید ایجاد شود، بلوک مقداردهی اولیه اجرا میشود. پیشنهاد میشه اسلایدهای جلسه ۶ آموزش جاوا از صفحه ۲۲ تا ۲۷ را مرور کنید.
.
.
.
آدرس کانال تلگرام: JavaCupIR@
آدرس اکانت توییتر: JavaCupIR@
آدرس صفحه اینستاگرام: javacup.ir
آدرس گروه لینکدین: Iranian Java Developers