
-
"تفكيك"
public static void main(String args[])
.أحد أسئلة مقابلات جافا الشائعة للمبتدئين، وهو سهل للغاية.
-
public
هو معدّل الوصول. نستخدمها لتحديد الوصول إلى هذه الطريقة. المُعدِّل هنا "عام"، لذا فإن أي فئة لديها حق الوصول إلى هذه الطريقة. -
static
. تعني كلمة Java الأساسية هذه أننا نستخدم هذه الطريقة دون إنشاء كائن فئة جديد. -
Void
هو نوع الإرجاع للطريقة. وهذا يعني أن الطريقة لا تُرجع أي قيمة. -
main
هو اسم الطريقة. "يعرفها" JVM كنقطة دخول إلى التطبيق (يجب أن يكون له توقيع معين).Main
هي الطريقة التي يحدث فيها التنفيذ الرئيسي. -
String args[]
. هذه هي المعلمة التي تم تمريرها إلى الطريقة الرئيسية. لدينا هنا وسيطات نوع السلسلة التي يقبلها تطبيق Java الخاص بك عند تشغيله. يمكنك كتابتها على المحطة.
-
-
ما هو الفرق بين
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
ماذا عن الغياب التام للطريقة الرئيسية؟ إذا حاولت تشغيل فئة عادية بدون الطريقة الرئيسية على الإطلاق، فستحصل على الخطأ التالي: لم يتم العثور على الطريقة الرئيسية في اختبار الفئة، يرجى تحديد الطريقة الرئيسية على النحو التالي: 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";
الجواب هو "واحد فقط" لأن Java بها مجموعة سلاسل. عندما نقوم بإنشاء كائن سلسلة باستخدام عامل التشغيل new()، فإنه يقوم بإنشاء كائن جديد في ذاكرة الكومة. إذا استخدمنا بناء الجملة الحرفي للسلسلة، كما هو الحال في مثالنا، فقد يُرجع كائنًا موجودًا من تجمع السلسلة، إذا كان موجودًا بالفعل.
-
كم عدد الكائنات التي تم إنشاؤها في الكود التالي؟
String s = new String("Hello");
هناك 2 كائنات. أحدهما موجود في مجموعة ثابتة من السلسلة (إن لم يكن موجودًا بالفعل) والآخر موجود في الكومة.
-
ما هو الفرق بين
String
والفئاتStringBuilder
فيStringBuffer
جافا؟هناك أحد الأسئلة الرائدة في مقابلة جافا.
أولا وقبل كل شيء
String
هو فئة غير قابلة للتغيير. وهذا يعني أنه لا يمكنك تعديل محتواه بمجرد إنشائه. بينماStringBuffer
وStringBuilder
هي فئات قابلة للتغيير، لذا يمكنك تغييرها لاحقًا. إذا قمنا بتغيير محتوىString
الكائن، فإنه ينشئ سلسلة جديدة وبالتالي لا يعدل السلسلة الأصلية. لهذا السبب فإن الأداءStringBuffer
معString
.الفرق الرئيسي بين أساليب
StringBuffer
وStringBuilder
thatStringBuffer
هو أن الأساليب متزامنة في حين أنStringBuilder
الأساليب ليست كذلك. -
هل هناك أي اختلاف في
String
ما تم إنشاؤه باستخدام الحرفي ومعnew()
المشغل؟هنالك. إذا قمنا بإنشاء سلسلة باستخدام
new()
عامل التشغيل، فإنها تظهر في الكومة وفي تجمع السلاسل (إذا لم تكن موجودة بالفعل). إذا قمت بإنشاء حرفString
باستخدام حرفي، فسيتم إنشاؤه في تجمع السلسلة (إذا لم يكن موجودًا بالفعل). تجمع السلسلة عبارة عن منطقة تخزين داخل الكومة، والتي تقوم بتخزين سلسلة حرفية. -
هل يمكنك تجاوز
private
أوstatic
طريقة في جافا؟أحد أسئلة مقابلة جافا الصعبة للمبتدئين. لا يمكنك حقًا التجاوز
private
أوstatic
الأسلوب في Java.لا يمكنك تجاوز
private
الأساليب لأن نطاق محدد الوصول الخاص يقع داخل الفصل فقط. عندما تريد تجاوز شيء ما، يجب أن يكون لدينا فئة الوالدين والطفل. إذا كانت طريقة الفئة الفائقة هيprivate
، فلن تتمكن الفئة الفرعية من استخدامها، وسيتم التعامل مع الطرق الموجودة في الفئة الفرعية على أنها طرق جديدة (لا يتم تجاوزها).Static
لا يمكن أيضًا تجاوز الأساليب، لأنstatic
الأساليب هي جزء من الفئة نفسها، وليست جزءًا من أي كائن في الفئة. بالتأكيد يمكنك الإعلان عن نفسstatic
الطريقة بنفس التوقيع في الفئات الفرعية، ولكن مرة أخرى، سيتم التعامل معها كطرق جديدة. -
الفرق بين
Abstract Class
وInterface
أحد الأسئلة الشائعة لمقابلة مطوري جافا والتي تتعلق بمبادئ OOP. أولا وقبل كل شيء، في جافا
interface
يحدد السلوك ويخلقabstract class
التسلسل الهرمي.فئة مجردة واجهه المستخدم من الممكن أن يكون هناك نص أسلوب (طرق غير مجردة) في فئة مجردة يمكن أن تحتوي الواجهة على طرق مجردة فقط. في Java 8 أو الأحدث، أصبح من الممكن تحديد الأساليب الافتراضية وتنفيذها مباشرة في الواجهة. أيضًا، يمكن أن تحتوي الواجهات في Java 8 على طرق ثابتة. يمكن أن تكون متغيرات الحالة في فئة مجردة لا يمكن أن تحتوي الواجهة على متغيرات مثيل. يسمح للبناء لا يمكن أن تحتوي الواجهة على أي مُنشئ. الأساليب الثابتة مسموح بها الأساليب الثابتة غير مسموح بها يمكن أن يكون للفئة أصل مجرد واحد فقط قد تقوم واجهة واحدة بتنفيذ فئات مختلفة قد توفر الفئة المجردة تنفيذ الواجهة. لا يمكن للواجهة توفير تنفيذ الفئة المجردة. يُسمح للفئة المجردة بتوسيع فئة Java الأخرى وتنفيذ واجهات Java المتعددة. يُسمح للواجهة بتوسيع واجهة Java الأخرى فقط. يمكن أن تحتوي فئة Java المجردة على أعضاء فئة خاصة ومحمية يكون أعضاء واجهة Java عامًا بشكل افتراضي -
هل يمكننا الإعلان عن
static
المتغيرات والأساليب فيabstract
الفصل؟نعم، من الممكن الإعلان عن
static
المتغيرات والأساليب فيabstract
الطريقة. ليست هناك حاجة لإنشاء كائن للوصول إلى السياق الثابت. لذلك يُسمح لنا بالوصول إلى السياق الثابت المعلن داخل الفصلabstract
باستخدام اسم الفصلabstract
. -
ما أنواع مناطق الذاكرة المخصصة بواسطة JVM؟
تقوم منطقة الفئة بتخزين بنيات كل فئة، على سبيل المثال، التجمع الثابت لوقت التشغيل، والحقول، وبيانات الطريقة، وجميع التعليمات البرمجية الخاصة بالطرق.
الكومة هي منطقة بيانات وقت التشغيل حيث يتم تخصيص الذاكرة للكائنات.
كومة مخازن الإطارات. يحتوي على متغيرات محلية ونتائج جزئية، ويشارك في استدعاء الطريقة وإرجاعها. يحتوي كل مؤشر ترابط على مكدس JVM خاص، يتم إنشاؤه في نفس وقت إنشاء الخيط. يتم إنشاء إطار جديد في كل مرة يتم فيها استدعاء الطريقة. يتم تدمير الإطار عند اكتمال استدعاء الطريقة الخاصة به.
يحتوي سجل عداد البرنامج على عنوان تعليمات جهاز Java الظاهري الذي يتم تنفيذه حاليًا.
يحتوي Native Method Stack على كافة الطرق الأصلية المستخدمة في التطبيق.
-
لماذا لا يسمح بالميراث المتعدد في جافا؟
سيكون الأمر معقدًا حقًا. تخيل ثلاث فئات
A
وB
وC
وC
يرثA
وB
. الآن،A
والفئاتB
لها نفس الطريقة وتستدعيها من كائن فئة فرعية... أيهما؟A
's أوB
's؟ وهنا لدينا الغموض.إذا حاولت أن ترث فئتين، فإن Java تعرض خطأً في وقت الترجمة.
-
هل يمكن أن نفرط في
main()
الطريقة؟بالتأكيد، يُسمح لنا بالحصول على العديد من
main
الأساليب في برنامج Java باستخدام طريقة التحميل الزائد. حاول! -
هل يمكننا أن نعلن المنشئ كـ
final
؟لا. لا يمكن الإعلان عن المنشئ
final
لأنه لا يمكن توريثه. لذلك فمن غير المنطقي أن نعلن عن المنشئين على أنهمfinal
. ومع ذلك، إذا حاولت القيام بذلك، فسيظهر لك مترجم Java خطأً. -
هل يمكننا أن نعلن عن الواجهة كـ
final
؟لا، لا يمكننا أن نفعل هذا. لا يمكن أن تكون الواجهة موجودة
final
لأنه يجب تنفيذ الواجهة بواسطة فئة معينة وفقًا لتعريفها. ولذلك، ليس هناك أي معنى لإنشاء واجهةfinal
. ومع ذلك، إذا حاولت القيام بذلك، سيظهر المترجم خطأ. -
ما هو الفرق بين
static binding
وdynamic binding
؟ما
binding
يمكن حله في وقت الترجمة بواسطة المترجم يسمىstatic
أو الربط المبكر.Binding
من جميع الطرقstatic
والطرقprivate
يتمfinal
إجراؤها في وقت الترجمة.في
Dynamic binding
المترجم لا يمكن اختيار طريقة ليتم استدعاؤها. التجاوز هو مثال مثالي لـdynamic binding
. في تجاوز كل من فصول الوالدين والطفل لها نفس الطريقة.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(); } }
-
كيفية إنشاء فئة للقراءة فقط في جافا؟
يمكنك القيام بذلك عن طريق جعل كافة حقول الفصل الدراسي خاصة. تحتوي فئة القراءة فقط على أساليب getter التي تعيد الملكية الخاصة للفئة إلى الطريقة
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
كتلة. يمكن أن يتبعه إما كتلة التقاط أو كتلة نهائية أو حتى بدونها على الإطلاق.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
ملاحظة: قبل أن تكون أساليب Java 8 في الواجهات مجردة فقط. في Java 8 أو الأحدث، أصبح من الممكن تحديد الأساليب الافتراضية وتنفيذها مباشرة في الواجهة. -
ما هو الفرق بين
throw
والكلماتthrows
الرئيسية؟Throws
يُستخدم للإعلان عن استثناء، لذا فهو يعمل بشكل مشابه للكتلةtry-catch
.Throw
يتم استخدام الكلمة الأساسية لطرح استثناء بشكل صريح من طريقة ما أو أي كتلة أخرى من التعليمات البرمجية.Throw
يتبعه مثيلException
للفئة ويتبع الرميات أسماء فئات الاستثناء.Throw
يتم استخدامه في نص الطريقة لطرح استثناء.Throws
يُستخدم في توقيع الطريقة للإعلان عن الاستثناءات التي قد تحدث في العبارات الموجودة في الطريقة.يُسمح بطرح استثناء واحد في كل مرة ولكن يمكنك التعامل مع استثناءات متعددة عن طريق الإعلان عنها باستخدام
throw
الكلمة الأساسية. يمكنك الإعلان عن استثناءات متعددة، على سبيل المثالpublic void method()throws IOException
،SQLException
.
GO TO FULL VERSION