
-
"پیاده کردن"
public static void main(String args[])
.یکی از سوالات محبوب مصاحبه جاوا برای تازه واردها و بسیار آسان.
-
public
یک اصلاح کننده دسترسی است. ما از آن برای تعیین دسترسی به این روش استفاده می کنیم. در اینجا اصلاح کننده "public" است، بنابراین هر کلاسی به این متد دسترسی دارد. -
static
. این کلمه کلیدی جاوا به این معنی است که ما از این روش بدون ایجاد یک شیء جدید از یک کلاس استفاده می کنیم. -
Void
نوع برگشتی روش است. یعنی متد هیچ مقداری را بر نمی گرداند. -
main
نام روش است. JVM آن را به عنوان نقطه ورود به یک برنامه کاربردی می داند (این برنامه باید دارای امضای خاصی باشد).Main
روشی است که در آن اجرای اصلی اتفاق می افتد. -
String args[]
. این پارامتری است که به روش اصلی منتقل می شود. در اینجا ما آرگومان هایی از نوع String را داریم که برنامه جاوا شما هنگام اجرای آن می پذیرد. می توانید آنها را در ترمینال تایپ کنید.
-
-
تفاوت بین
equals()
و چیست==
؟اول، "
==
" یک عملگر است در حالی کهequals()
یک روش است. ما از==
عملگر برای مقایسه مرجع (یا مقایسه آدرس) وequals()
روش برای مقایسه محتوا استفاده می کنیم. این بدان معنی است که==
بررسی می کند که آیا هر دو شی به یک مکان حافظه اشاره می کنند در حالی کهequals()
مقادیر موجود در اشیاء را مقایسه می کند. -
آیا می توانیم برنامه ای را بدون
main()
متد اجرا کنیم؟بسیاری از سوالات مصاحبه اساسی جاوا واقعا آسان هستند. شبیه این یکی. بنابراین پاسخ کوتاه این است: بله، ما می توانیم. به عنوان مثال می توانیم با استفاده از بلوک استاتیک این کار را انجام دهیم.
می توانید از بلوک استاتیک برای مقداردهی اولیه عضو داده ایستا استفاده کنید.
main
قبل از متد، در زمان بارگذاری کلاس اجرا می شود .class Example{ Static{ System.out.println("static block is invoked"); } public static void main(String args[]){ System.out.println("Now main method"); } }
خروجی این است:
static block is invoked Now main method
در مورد غیبت کلی روش اصلی چطور؟ اگر می خواهید یک کلاس معمولی را بدون متد اصلی اجرا کنید، با خطای بعدی مواجه می شوید: متد اصلی در کلاس Test یافت نشد، لطفاً متد اصلی را به صورت: public static void main (String [] args) یا یک برنامه JavaFX تعریف کنید. کلاس باید javafx.application.Application را گسترش دهد. خود خطا می گوید که اگر این یک برنامه JavaFX است و کلاس از javafx.application.Application به ارث برده شده است، پس ممکن است.
-
شی چیست
immutable
؟ آیا می توانیدimmutable
شی ایجاد کنید؟شما نمی توانید اشیاء یک
immutable
کلاس را پس از ایجاد آنها تغییر دهید. بنابراین هنگامی که آنها را ایجاد می کنید، نمی توانید آنها را تغییر دهید. اگر بخواهیدImmutable
شی را تغییر دهید، یک شی جدید (کلون) دریافت می کنید و این کلون را در حین ایجاد تغییر می دهید.یک مثال خوب این است که در جاوا
String
است .immutable
این بدان معنی است که شما نمی توانید خود شی را تغییر دهید، اما می توانید مرجع را به شی تغییر دهید. -
چند شی در کد زیر ایجاد شده است؟
یکی از سوالات مصاحبه فنی جاوا که جایگزین شماره 4 می شود.
String s1="Hello"; String s2="Hello"; String s3="Hello";
پاسخ "تنها یک" است زیرا جاوا دارای یک String Pool است. وقتی یک شی String را با استفاده از عملگر new() ایجاد می کنیم، یک شی جدید در حافظه پشته ایجاد می کند. اگر از نحو تحت اللفظی String استفاده کنیم، مانند مثال ما، ممکن است یک شی موجود را از String Pool برگرداند، اگر از قبل وجود داشته باشد.
-
چند شی در کد زیر ایجاد شده است؟
String s = new String("Hello");
2 شی وجود دارد. یکی در استخر ثابت رشته ای (اگر قبلاً وجود نداشته باشد) و دیگری در پشته است.
-
String
تفاوت بین و کلاسStringBuilder
هاStringBuffer
در جاوا چیست ؟یکی از رهبران در سوالات مصاحبه برتر جاوا وجود دارد.
اول از همه
String
یک کلاس Immutable است. این بدان معنی است که شما نمی توانید محتوای آن را پس از ایجاد تغییر دهید. کلاس های whileStringBuffer
وStringBuilder
قابل تغییر هستند، بنابراین می توانید بعداً آنها را تغییر دهید. اگر محتوای شی را تغییر دهیمString
، رشته جدیدی ایجاد می کند، بنابراین رشته اصلی را تغییر نمی دهد. به همین دلیل عملکرد باStringBuffer
بهتر از با استString
.تفاوت اصلی بین
StringBuffer
وStringBuilder
اینStringBuffer
روش ها همگام هستند در حالی کهStringBuilder
'ها نیستند. -
آیا تفاوتی در آن وجود دارد
String
که با استفاده از لفظ و باnew()
عملگر ایجاد شده است؟وجود دارد. اگر یک String با عملگر ایجاد کنیم
new()
، در پشته و در استخر رشته ظاهر می شود (اگر قبلاً وجود نداشته باشد). اگر یکString
با استفاده از یک کلمه واقعی ایجاد کنید، در استخر رشته ایجاد می شود (اگر قبلا وجود نداشته باشد). حوض رشته ای یک فضای ذخیره سازی در داخل پشته است که حروف الفاظ رشته را ذخیره می کند. -
آیا می توانید در جاوا override
private
یا متد کنید؟static
یکی از سوالات مصاحبه پیچیده جاوا برای تازه کارها. شما واقعا نمی توانید در جاوا override
private
یا متد کنید.static
شما نمی توانید
private
متدها را لغو کنید زیرا محدوده مشخص کننده دسترسی خصوصی فقط در کلاس است. وقتی می خواهید چیزی را نادیده بگیرید، باید کلاس والدین و فرزند داشته باشیم. اگر متد سوپرکلاس باشدprivate
، کلاس فرزند نمیتواند از آن استفاده کند و متدهای کلاس فرزند بهعنوان متدهای جدید تلقی میشوند (نه بازنویسی شده).Static
متدها نیز نمی توانند نادیده گرفته شوند، زیراstatic
متدها بخشی از خود کلاس هستند و بخشی از هیچ شیء کلاس نیستند. مطمئناً میتوانید همانstatic
روش را با امضای یکسان در کلاسهای فرزند اعلام کنید، اما دوباره، آنها به عنوان روشهای جدید تلقی خواهند شد. -
تفاوت بین
Abstract Class
وInterface
یکی از سوالات مصاحبه محبوب توسعه دهندگان جاوا که بر اصول OOP است. اول از همه، در جاوا
interface
یک رفتار تعریف می کند وabstract class
سلسله مراتب ایجاد می کند.کلاس انتزاعی رابط امکان داشتن بدنه متد (روش های غیرانتزاعی) در کلاس انتزاعی وجود دارد رابط فقط می تواند متدهای انتزاعی داشته باشد. در جاوا 8 یا جدیدتر، امکان تعریف روش های پیش فرض و پیاده سازی مستقیم آنها در رابط فراهم شد. همچنین رابط ها در جاوا 8 می توانند متدهای ثابت داشته باشند. متغیرهای نمونه می توانند در کلاس انتزاعی باشند یک رابط نمی تواند متغیرهای نمونه داشته باشد. سازندگان مجاز هستند رابط نمی تواند سازنده داشته باشد. روش های استاتیک مجاز است روش های استاتیک مجاز نیستند کلاس فقط می تواند یک والد انتزاعی داشته باشد یک رابط ممکن است کلاس های مختلفی را پیاده سازی کند کلاس انتزاعی ممکن است اجرای اینترفیس را فراهم کند. رابط نمی تواند اجرای کلاس انتزاعی را ارائه دهد. یک کلاس انتزاعی مجاز است کلاس جاوا دیگر را گسترش دهد و چندین رابط جاوا را پیاده سازی کند. یک رابط مجاز است فقط رابط جاوا دیگر را گسترش دهد. یک کلاس انتزاعی جاوا می تواند اعضای کلاس خصوصی و محافظت شده داشته باشد اعضای یک رابط جاوا به طور پیش فرض عمومی هستند -
آیا می توانیم
static
متغیرها و متدها را در یکabstract
کلاس تعریف کنیم؟بله، امکان تعریف
static
متغیرها و متدها درabstract
متد وجود دارد. هیچ الزامی برای ایجاد یک شی برای دسترسی به زمینه ایستا وجود ندارد.abstract
بنابراین ما اجازه داریم با استفاده از نام کلاس به متن استاتیک اعلام شده در داخل کلاس دسترسی داشته باشیمabstract
. -
چه نوع مناطق حافظه توسط JVM اختصاص داده می شود؟
Class Area ساختارهای perclass را ذخیره می کند، به عنوان مثال، استخر ثابت زمان اجرا، فیلدها، داده های متد و همه کدهای متدها.
Heap یک منطقه داده در زمان اجرا است که در آن حافظه به اشیاء تخصیص داده می شود.
پشته قاب ها را ذخیره می کند. این شامل متغیرهای محلی و نتایج جزئی است و در فراخوانی و بازگشت متد شرکت می کند. هر رشته دارای یک پشته JVM خصوصی است که همزمان با موضوع ایجاد می شود. هر بار که یک متد فراخوانی می شود یک فریم جدید ایجاد می شود. یک فریم زمانی از بین می رود که فراخوانی روش آن کامل شود.
ثبت شمارنده برنامه حاوی آدرسی از دستورالعمل ماشین مجازی جاوا است که در حال حاضر اجرا می شود.
Native Method Stack شامل تمام متدهای بومی است که در برنامه استفاده می شود.
-
چرا ارث چندگانه در جاوا مجاز نیست؟
واقعاً پیچیده خواهد بود. سه کلاس
A
,B
وC
وC
ارث می بردA
وB
. حالاA
وB
کلاسها هم همین متد را دارند و شما آن را از یک شی کلاس فرزند صدا میزنید... کدام یک؟A
's یاB
's؟ اینجا ما ابهام داریم.اگر سعی کنید دو کلاس را به ارث ببرید، جاوا خطای زمان کامپایل را ارائه می دهد.
-
آیا می توانیم
main()
روش را اضافه بار کنیم؟مطمئناً،
main
با استفاده از اضافه بار متد، به ما اجازه داده می شود تا روش های زیادی را در یک برنامه جاوا داشته باشیم. آن را امتحان کنید! -
آیا می توانیم یک سازنده را به عنوان اعلان کنیم
final
؟جواب منفی. یک سازنده را نمی توان به عنوان a اعلام کرد
final
زیرا نمی تواند ارث بری شود. بنابراین بی معنی است که سازنده ها را به عنوانfinal
. با این حال، اگر سعی کنید این کار را انجام دهید، کامپایلر جاوا برای شما خطایی ایجاد می کند. -
آیا می توانیم یک رابط را به عنوان اعلان کنیم
final
؟نه، ما نمی توانیم این کار را انجام دهیم. یک رابط نمی تواند باشد
final
زیرا اینترفیس باید توسط یک کلاس طبق تعریفش پیاده سازی شود. بنابراین، هیچ معنایی برای ایجاد یک رابط وجود نداردfinal
. با این حال، اگر سعی کنید این کار را انجام دهید، کامپایلر یک خطا نشان می دهد. -
تفاوت بین
static binding
و چیستdynamic binding
؟مواردی
binding
که در زمان کامپایل توسط کامپایلر قابل حل استstatic
، باند اولیه نامیده می شود.Binding
از همه روشstatic
هاprivate
وfinal
در زمان کامپایل انجام می شود.در
Dynamic binding
کامپایلر نمی توان متدی را برای فراخوانی انتخاب کرد. Overriding مثال کاملی ازdynamic binding
. در overriding هر دو کلاس والد و فرزند روش یکسانی دارند.Static Binding class Cat{ private void talk() {System.out.println("cat is mewing..."); } public static void main(String args[]){ Cat cat=new Cat(); cat.talk(); } } Dynamic Binding class Animal{ void talk(){ System.out.println("animal is talking..."); } } class Cat extends Animal{ void talk(){ System.out.println("cat is talking..."); } public static void main(String args[]){ Animal animal=new Cat(); animal.talk(); } }
-
چگونه یک کلاس فقط خواندنی در جاوا ایجاد کنیم؟
با خصوصی کردن تمام فیلدهای کلاس می توانید این کار را انجام دهید. کلاس فقط خواندنی فقط متدهای دریافت کننده دارد که ویژگی خصوصی کلاس را به
main
متد برمی گرداند. شما قادر به تغییر این ویژگی نیستید، دلیل آن عدم وجود روش تنظیم کننده است.public class HockeyPlayer{ private String team ="Maple leaf"; public String getTeam(){ return team; } }
-
چگونه یک کلاس فقط نوشتن در جاوا ایجاد کنیم؟
دوباره، شما باید تمام فیلدهای کلاس را بسازید
private
. حال، کلاس فقط نوشتن شما باید فقط متدهای تنظیم کننده داشته باشد و هیچ گیرنده ای نداشته باشد. بنابراین، ما نمی توانیم ویژگی های کلاس را بخوانیم.public class HockeyPlayer{ private String team; public void setTeam(String college){ this.team = team; } }
-
هر
try
بلوک باید یکcatch
بلوک به دنبال داشته باشد، اینطور نیست؟جواب منفی. یک ضرورت نیست. هر
try
بلوک می تواند بدونcatch
بلوک باشد. میتواند با یک catchblock یا یک بلوک نهایی یا حتی بدون آنها دنبال شود.public class Main{ public static void main(String []args){ try{ int variable = 1; System.out.println(variable/0); } finally { System.out.println("the other part of the program..."); } } }
خروجی:
Exception in thread main java.lang.ArithmeticException:/ by zero the other part of the program...
یک مثال دیگر:class Main { public static void main(String[] args) throws IOException { try(InputStreamReader inputStreamReader = new InputStreamReader(System.in); BufferedReader reader = new BufferedReader(inputStreamReader)){ System.out.println("test"); } } }
خروجی:
test
PS: قبل از جاوا 8 متدها در اینترفیس ها می توانستند فقط انتزاعی باشند. در جاوا 8 یا جدیدتر، امکان تعریف روش های پیش فرض و پیاده سازی مستقیم آنها در رابط فراهم شد. -
throw
تفاوت بین و کلمات کلیدی چیستthrows
؟Throws
برای اعلام یک استثنا استفاده می شود، بنابراین شبیه بهtry-catch
بلوک کار می کند.Throw
کلمه کلیدی برای پرتاب یک استثنا به صراحت از یک متد یا هر بلوک کد دیگری استفاده می شود.Throw
به دنبال نمونه ای ازException
کلاس و پرتاب ها با نام کلاس های استثنا دنبال می شود.Throw
در بدنه روش برای پرتاب یک استثنا استفاده می شود.Throws
در امضای متد برای اعلام استثناهایی که ممکن است در عبارات موجود در متد رخ دهد استفاده می شود.امکان پرتاب یک استثنا در یک زمان وجود دارد، اما میتوانید چندین استثنا را با استفاده از
throw
کلمه کلیدی اعلام کنید .public void method()throws IOException
SQLException
GO TO FULL VERSION