-
"تفكيك"
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وStringBuilderthatStringBufferهو أن الأساليب متزامنة في حين أن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