دستگرمی

دستگرمی چهارم

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

فرض کنید کلیه‎ی متدهایی که در کلاس‎های Parent و Child صدا شده‎اند، در کلاس Utility تعریف شده‎اند و در داخل هر یک ازاین متدها، شماره اسم آن متد در خروجی چاپ می‎شود. مثلا در داخل متد ()f عدد ۶ در خروجی چاپ میشود )زیرا f 6امین حرف ازحروف الفبا است).
با این توضیحات، خروجی برنامه زیر کدام گزینه خواهد بود؟

خروجی برنامه فوق کدام گزینه است؟

  • 3458910 12673458910 (50%, 2 رای)
  • 12673458910 12673458910 (25%, 1 رای)
  • 6798510 67129843510 (25%, 1 رای)
  • 4398105 21764398510 (0%, 0 رای)
  • 4359810 43598102176 (0%, 0 رای)
  • 3849510 38495101627 (0%, 0 رای)

مجموع رای ها: 4

Loading ... Loading ...

پاسخ:

پاسخ صحیح:  ۳۴۵۸۹۱۰ ۱۲۶۷۳۴۵۸۹۱۰

ترتیب مقداردهی اولیه به این صورت است:

یک بار برای هر کلاس (اول برای کلاس پدر و سپس برای کلاس فرزند):

  • مقدارهی درخط به متغیرهای استاتیک و بلوک‌های استاتیک (static block) – به ترتیبی که در کد نوشته شده‎اند.

بک بار به ازای ایجاد هر شی (اول برای کلاس پدر و سپس برای کلاس فرزند):

  • مقداردهی درخط به متغیرها و بلوک‎های مقداردهی اولیه (instance initialization block) – به ترتیبی که در کد نوشته شده‎اند.
  • سازنده (Constructor)

با این توضیحات، سراغ متد main می‎رویم:

در خط اول main، شی c1  که اولین شی از Child است، ایجاد می‌شود. به این ترتیب،

۱- یک بار برای کلاس Parent دو خط زیر اجرا می‌شود:

و در خروجی مقدار ۱۲ نوشته می‎شود.

۲- یک بار هم برای کلاس Child دو خط زیر اجرا می‎شود:

و در خروجی مقدار ۶۷ نوشته می‎شود.

۳- سپس سراغ ویژگی‎ها و بلاک‎های غیراستاتیک و سازنده می‎رویم.

ابتدا برای کلاس Parent، خطوط زیر اجرا می‎شوند:

و در خروجی مقدار ۳۴۵ نوشته می‎شود.

۴- سپس برای کلاس Child، خطوط زیر اجرا می‎شوند:

و در خروجی مقدار ۸۹۱۰ نوشته می‎شود.

پس تا اینجا برای ایجاد شی c1 مقدار ۱۲۶۷۳۴۵۸۹۱۰ در خروجی نوشته شد.

در خط دوم main، یک کاراکتر فاصله چاپ می‎شود.

در خط سوم main، شی جدید c2 ایجاد می‎شود. در اینجا باید توجه داشته باشیم که چون c2 اولین شی ساخته‎شده از Child نیست، دیگر قسمت مربوط به مقداردهی ویژگی‎ها و بلاک‎های استاتیک اجرا نمی‎شود و فقط بخش‎های مربوط به توضیحات ۳ و ۴ دوباره اجرا می‎شوند. به این ترتیب، مقدار ۳۴۵۸۹۱۰ در ادامه خروجی نوشته می‎شود.

در انتها، در خروجی خواهیم داشت:

۱۲۶۷۳۴۵۸۹۱۰ ۳۴۵۸۹۱۰

.

.

.

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

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

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

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

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

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

‫۲ دیدگاه ها

  1. جای ۳ با ۴ و ۹ با ه‍ باید عوض شود. یعنی
    ۱۲۶۷۴۳۵۹۸۱۰ ۴۳۵۹۸۱۰
    چون ابتدا مقدار دهی در خط و سپس بلوک مقدار دهی اجرا میشود، بنا به اسلاید

    1. سلام
      ممنون از دقت و تذکر شما
      پاسخ دستگرمی درست است اما در توضیحاتی که به آن ارجاع داده بودیم، به یک نکته ظریف اشاره نشده بود و آن‎هم اینکه اجرای مقداردهی درخط، اولویتی به اجرای بلوک مقداردهی ندارد و به همان ترتیبی که نوشته شده‎اند، اجرا می‎شوند.

      در توضیحات این سوال، این نکته رو اضافه کردیم و انشاالله برای توضیحات موجود در اسلایدها هم اصلاحیه‎ای منتشر خواهیم کرد.

      با تشکر

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

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

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