آیا می توانید خروجی این کد جاوا را پیدا کنید

در برنامه های جاوا، همیشه از دستورات اجرای خاصی برای بلوک های کد مختلف پیروی می کند. از این مقاله، من به بررسی چگونگی اجرای اجزای مختلف در جاوا (بلوک های استاتیک، بلوک های اولیه ساز نمونه، سازنده ها، متدها و غیره) با کمک مثال زیر می پردازم.
قبل از ادامه خواندن، سعی کنید خروجی کد جاوای زیر را خودتان تعیین کنید و قبل از اینکه ادامه دهید، آن را در زیر نظر دهید.
public class Execute {
public Execute() {
System.out.println("Hello from constructor");
}
public void method() {
System.out.println("Hello from method");
}
static {
System.out.println("Hello from static block");
}
{
System.out.println("Hello from instance initializer block");
}
public static void main(String[] args) {
System.out.println("Hello from main");
Execute obj = new Execute();
obj.method();
}
}
خروجی
من اکنون فرض می کنم که شما حداقل یک بار برای تعیین ترتیب خروجی تلاش کرده اید.
بنابراین خروجی کد جاوا فوق به صورت زیر خواهد بود:
Hello from static block
Hello from main
Hello from instance initializer block
Hello from constructor
Hello from method
آیا توانستید آن را به درستی تعیین کنید؟
حالا بیایید بررسی کنیم که چرا جاوا خروجی مانند بالا می دهد.
توضیح
وقتی کد جاوا بالا را اجرا می کنیم، ترتیب اجرا به صورت زیر است
- بلوک های استاتیک
- روش اصلی
- Instance Initializer Block
- سازنده
- روش اجرا
حال بیایید این مراحل را یکی یکی بررسی کنیم
1. بلوک های استاتیک
static {
System.out.println("Hello from static block");
}
بلوک استاتیک در جاوا یک بلوک از کد است که یک بار زمانی که کلاس توسط JVM (ماشین مجازی جاوا) در حافظه بارگذاری می شود، اجرا می شود. این قبل از اجرای متد اصلی یا هر کد مرتبط با نمونه دیگری اتفاق می افتد.
این بیشتر برای مقداردهی اولیه استاتیک، مانند تنظیم متغیرهای استاتیک، یا انجام هرگونه تنظیمات لازم در هنگام استفاده از کلاس برای اولین بار استفاده می شود.
در این کد، خط اول خروجی توسط بلوک استاتیک است:
Hello from static block
2. روش اصلی
public static void main(String[] args) {
System.out.println("Hello from main");
Execute obj = new Execute();
obj.method();
}
روش اصلی، نقطه ورود هر برنامه جاوا است. این جایی است که برنامه هنگام اجرا شروع به اجرای خود می کند.
پس از اجرای بلوک استاتیک، JVM شروع به اجرای کد داخل متد اصلی می کند.
در این کد خط دوم خروجی به روش main است:
Hello from main
3. Instance Initializer Block
{
System.out.println("Hello from instance initializer block");
}
یک بلوک Initializer Instance در جاوا یک بلوک کد است که در یک کلاس تعریف می شود اما خارج از هر متد، سازنده یا بلوک ایستا تعریف می شود. هر بار که نمونه ای از کلاس ایجاد می شود، درست قبل از اجرای سازنده کلاس اجرا می شود.
وقتی یک شی با Execute obj = new Execute();
، بلوک نمونه قبل از سازنده اجرا می شود. این بلوک برای مقداردهی اولیه خصوصیات مشترک اشیاء مفید است.
در این کد، خط سوم خروجی توسط بلوک Instance Initializer است:
Hello from instance initializer block
4. سازنده
public Execute() {
System.out.println("Hello from constructor");
}
سازنده یک روش خاص است که برای مقداردهی اولیه اشیاء استفاده می شود و هنگامی که یک شی جدید ایجاد می شود به طور خودکار فراخوانی می شود. باید همنام کلاس باشد و نوع برگشتی و حتی void ندارد.
هنگامی که یک شی ایجاد می شود، بلافاصله پس از بلوک اولیه ساز نمونه اجرا می شود. معمولاً برای مقداردهی اولیه متغیرهای نمونه یا اجرای هر منطق راه اندازی خاص برای آن شی استفاده می شود.
در این کد، خط چهارم خروجی توسط سازنده است:
Hello from constructor
5. اجرای روش
public void method() {
System.out.println("Hello from method");
}
public static void main(String[] args) {
....
Execute obj = new Execute();
obj.method();
}
در جاوا، اجرای متد به فرآیند فراخوانی یا فراخوانی یک متد برای انجام یک کار خاص اشاره دارد. متدها بلوک هایی از کد هستند که عملیات را انجام می دهند و اجرای آنها با فراخوانی متد از داخل برنامه آغاز می شود.
پس از ایجاد و مقدار دهی اولیه شی، تابع متد() را به صراحت فراخوانی می کنیم. این کد را در داخل بدنه متد اجرا می کند.
در این کد آخرین خط خروجی با اجرای متد است:
Hello from method
چرا حکم اعدام اینقدر مهم است؟
درک ترتیب اجرا که در آن بلوک های مختلف اجرا می شوند برای اشکال زدایی و نوشتن برنامه های جاوا کارآمد مهم است. برای مثال:
بلوک های استاتیک برای مقداردهی اولیه ویژگی های سطح کلاس ایده آل هستند.
بلوک های نمونه برای منطق اولیه سازی شی مشترک ایده آل هستند.
سازنده ها برای مدیریت تنظیمات شی خاص ایده آل هستند.
با دانستن این ترتیب می توانید کدهای جاوا تمیزتر، کارآمدتر و قابل نگهداری بنویسید.