مقدمة
نحن على دراية بالوظائف الرئيسية في جافا. أعتقد أن كل من تعلم لغة Java يمكنه كتابة وظيفة الدخول بمهارة لهذا البرنامج. ومع ذلك ، لماذا تتم كتابة الوظائف الرئيسية بهذه الطريقة ، ماذا تعني كل كلمة رئيسية؟ ربما لا يستطيع الجميع الإجابة عليه بسهولة. واجهت أيضًا هذه المشكلة خلال دراستي. من خلال البحث عن المعلومات عبر الإنترنت وإضافة ممارستي الخاصة ، حصلت أخيرًا على بعض الخبرة. لا أجرؤ على الاحتفاظ بها وكتبتها لمشاركتها مع الجميع.
الطريقة الرئيسية () في جافا
يجد جهاز Java Virtual برنامج التشغيل الذي يجب بدء تشغيله من خلال الطريقة الرئيسية ، ويتحقق مما إذا كانت الفئة التي توجد فيها الوظيفة الرئيسية محملة بواسطة الجهاز الظاهري Java. إذا لم يتم تحميله ، فقم بتحميل الفصل وتحميل جميع الفئات الأخرى ذات الصلة. لذلك ، عند تشغيل البرنامج ، فإن الطريقة الأولى للتنفيذ هي الطريقة main() . عادة ، إذا كنت ترغب في تشغيل طريقة فئة ، فيجب عليك أولاً إنشاء كائن من هذه الفئة ، ثم تمرير اسم " اسم الطريقة. اسم () "، ولكن نظرًا لأن نقطة الدخول للبرنامج ، لم يتم إنشاء مثيل للكائن في هذا الوقت ، يتم الإعلان عن الطريقة الرئيسية على أنها ثابتة ، بحيث يمكن استدعاء هذه الطريقة مباشرة من خلال" اسم الفصل ". اسم الطريقة () ".
قبل النظر إلى الطريقة الرئيسية () في Java ، دعونا نلقي نظرة أولاً على أبسط تطبيق Java HelloWorld. سأستخدم هذا المثال لتوضيح لغز الطريقة main() في فئة Java. رمز البرنامج كما يلي:
/ *** شرح مفصل للطريقة الرئيسية () في java*/ public class helloWorld {public static void main (String args []) {system.out.println ("Hello World!") ؛ }}1. دعنا نتحدث عن الفئة أولاً:
هناك طريقة main() في فئة HelloWorld ، مما يعني أن هذا تطبيق Java يبدأ ويتم تشغيله مباشرة عبر JVM.
نظرًا لأنه فئة ، فإن Java تتيح أن لا تخضع الفصول الدراسية لقيود الكلمات الرئيسية العامة. بالطبع ، يمكن أن يقتصر تعريف الفصل على الكلمات الرئيسية العامة أو غير المحدودة (الافتراضي).
2. دعنا نتحدث عن الطريقة الرئيسية ()
تم الإعلان عن الطريقة main() على النحو التالي: public static void main(String args[]) . يجب تعريفه على هذا النحو ، هذا هو مواصفات Java.
لماذا يتم تعريفه مثل هذا؟ لها علاقة بتشغيل JVM.
عندما يكون هناك طريقة main() في فصل ما ، فإن تنفيذ الأمر "اسم فئة Java" سيبدأ الجهاز الظاهري لتنفيذ الطريقة الرئيسية في الفصل.
نظرًا لأن JVM سيتصل أولاً بالطريقة الرئيسية عند تشغيل تطبيق Java هذا. عند الاتصال ، لا يتم إنشاء كائن هذه الفئة ، ولكن يتم استدعاؤه مباشرة من خلال اسم الفصل ، لذلك يجب أن يقتصر على الثابت العام.
بالنسبة للطريقة الرئيسية في Java ، لدى JVM قيود ولا يمكن أن يكون لها قيمة إرجاع ، وبالتالي فإن نوع قيمة الإرجاع باطلة.
هناك أيضًا معلمة إدخال في الطريقة الرئيسية ، وهي سلسلة النوع [] ، وهي أيضًا مواصفات Java. يجب أن تحتوي الطريقة main() على معلمة إدخال ، ويجب أن تكون تفاصيل الفصل String[] . أما بالنسبة لاسم صفيف السلسلة ، يمكن تعيين هذا بنفسك. وفقًا للعادات ، فإن اسم صفيف السلسلة هذا يتسق عمومًا مع اسم معلمة Mian في مثال مواصفات Sun Java ، ويسمى args.
لذلك ، يجب أن يكون تعريف الطريقة main() : " public static void main(String 字符串数组参数名[]) ".
3. يمكن أن ترمي الطريقة الرئيسية () الاستثناء
لذلك ، يمكن إلقاء استثناء بالطريقة main() ، ويمكن أيضًا الإعلان عن استثناء على الطريقة main() .
على سبيل المثال ، ما يلي صحيح:
الطبقة العامة testmain {public static void main (string [] args) يلقي الاستثناء {system.out.println ("hahhahahahahaha") ؛ رمي استثناء جديد ("") ؛ }}النتيجة الجارية: ههههههههههههههههههههههههههههههههههههههههههههههههه Sun.Reflect.DelegatingMethodAccessorImpl.invoke (DevatingMethodAccessorImpl.java:25) في java.lang.reflect.method.invoke (method.java:585) في com.intellij.rt.execution.application.appmain.main
4. وظيفة صفيف المعلمة السلسلة في الطريقة الرئيسية ()
في الطريقة main() ، يتم فصل وظائف صفيف المعلمة السلسلة لتلقي معلمات إدخال سطر الأوامر ، ويتم فصل معلمات سطر الأوامر بواسطة المسافات.
فيما يلي مثال لمعرفة كيفية تهيئة واستخدام هذه الصفيف.
/ *** طباعة معلمات إدخال في الطريقة الرئيسية*/ الفئة العامة testmain {public static void main (String args []) {system.out.println ("Print Parameters in main method!") ؛ لـ (int i = 0 ؛ i <args.length ؛ i ++) {system.out.println (args [i]) ؛ }}} طريقة التنفيذ ونتائج التشغيل
D:/study/basetest/src> javac testmain.java d:/study/basetest/src> java testmain 1 2 3 اطبع معلمات الإدخال في الطريقة الرئيسية! 1 2 3
5. إعطاء نسخة أخرى من HelloWorld
/ *** النسخة المنحرفة من HelloWorld.hehe*/ public Class HelloWorld2 {static {system.out.println ("Hello Wordld!") ؛ } public static void main (String args []) {system.exit (0) ؛ }} تنفذ الطريقة main() محتوى الجملة " System.exit(0); " ، بهدف جعل البرنامج ينتهي بشكل طبيعي. أين "HelloWorld!" طباعة من؟ يتم طباعة السر في ثابت ، لأنه سيتم استدعاء محتويات كتلة الكود الثابت قبل المكالمة الرئيسية.
السادس. مثال
يبدأ الجهاز الظاهري عن طريق استدعاء الطريقة الرئيسية لفئة محددة ، وتمريرها إلى معلمة صفيف السلسلة ، بحيث يتم تحميل الفئة المحددة ، وربط الأنواع الأخرى المستخدمة من قبل الفصل ، وتهيئتها. على سبيل المثال ، للبرنامج:
الطبقة العامة HelloApp {public static void main (string [] args) {system.out.println ("Hello World!") ؛ لـ (int i = 0 ؛ i <args.length ؛ i ++) {system.out.println (args) ؛ }}}بعد التجميع ، اكتب في وضع سطر الأوامر: Java HelloApp Run Virtual Machine
سيتم بدء تشغيل جهاز Java Virtual عن طريق استدعاء طريقة HelloApp الرئيسية وتم تمريرها إلى صفيف رئيسي يحتوي على ثلاثة سلاسل "Run" و "Virtual" و "Machine". الآن نصف بإيجاز الخطوات التي قد تتخذها الأجهزة الافتراضية عند تنفيذ HelloApp.
بدأت أحاول تنفيذ الطريقة الرئيسية لفئة HelloApp ووجدت أنه لم يتم تحميل الفصل ، مما يعني أن الجهاز الظاهري لا يحتوي حاليًا على الممثل الثنائي للفئة. لذلك استخدم الجهاز الظاهري classloader لمحاولة العثور على مثل هذا الممثل الثنائي. إذا فشلت هذه العملية ، يتم طرح استثناء. بعد تحميل الفصل ، قبل أن يتم استدعاء الطريقة الرئيسية ، يجب ربط الفصل HelloApp بأنواع أخرى وتهيئة. يتكون الرابط من ثلاث مراحل: التفتيش والإعداد والتحليل. تحقق من رموز ودلالات الفئة الرئيسية المحملة ، والاستعداد لإنشاء مجالات ثابتة للفئة أو الواجهة وتهيئة هذه المجالات إلى القيم الافتراضية القياسية ، والتحليل مسؤول عن التحقق من المراجع الرمزية للفئة الرئيسية إلى فئات أو واجهات أخرى. إنه اختياري في هذه الخطوة. تهيئة الفئة هي تنفيذ وظيفة التهيئة الثابتة ومُنشئ التهيئة للمجال الثابت المعلن في الفصل. يجب تهيئة فئة الوالدين للفئة قبل تهيئتها.
العملية برمتها على النحو التالي:
لخص
كمواصفات خاصة ، تختلف الطريقة الرئيسية تمامًا عن الطرق العادية ولها العديد من القيود. يتطلب فهم مبادئها تعلم المعرفة المتعلقة بـ JVM. إنها عقبة رئيسية أمام التعلم في جافا. ما سبق هو ملخص مبدأ واستخدام الرئيسي الذي جمعه المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل.