بسم الله الرحمن الرحيم
اسم البرنامج في الجافا
هناك خطأ يقع فيه الكثير من مبرمجي الجافا و متعلميها، لا يُظهر هذا الخطأ رسالة خطأ عند التنفيذ ولكن هو خطأ عام في مفهوم برنامج الجافا
هناك عبارة منتشرة وبشكل كبير تقول أن برنامج الجافا يجب أن يسمى بنفس اسم الـ class الذي يحتوي على جملة الـ main function وهذا غير صحيح بل يُفضل...
لمعرفة هذا يجب معرفة ماذا يحصل عندما يتم ترجمة و تنفيذ البرنامج
كما هو معلوم ان برنامج الجافا يتكون من مجموعة من الـ classes هذه classes ممكن ان تكون Public
عندما نعرف في البرنامج public class يجب ان نسمي البرنامج بنفس اسم الـ classe وان لم يحتوي على الدالة main لذا لايمكن ان يحتوي البرنامج على أكثر من public class
قد تتساءل كيف ذلك ان كان التنفيذ يبدأ من جملة main؟
اولا يجب ان تعلم ان البرنامج الواحد يمكن أن يحتوي على أكثر من main function بل ان class الواحد ممكن أن يحتوي على أكثر من main function بشرط اختلاف الـ parameters وهذا مايعرف بـ overload
وان العبارة المطلوبة للتنفيذ يشترط ان تكون بالصيغة التالية:
public static void main(String []s
أو
public static void main(String s[])
Example c.java
class a
{public static void main(String []s)
{System.out.println(“…..Hi ..class a…”);}
}
class b
{
Public static void main(String []s)
{Systm.out.println(“….Hi .. class b…”);}
}
فماذا سيكون اسم البرنامج؟؟؟؟؟؟؟؟؟ هناك two classes يحتويان على main function .....!!!!!!!!!
عندما تسمي البرنامج ليكن مثلا c.java
ثم تعمل complier {javac c.java} فإنك لن تحصل على رسالة خطأ لصحة البرنامج وتوافقه مع الصيغة العامة الـ (Syntax) و الناتج ملفينa, B)) من نوع class files يمكن تنفيذ كل منهما على حده بمجرد كتابة الأمر التالي
Java a
Output …..Hi ..class a…
Where as
Java b
Output….Hi .. class b…
Java c
OutputException in Thread “main” java.lang.NoSucMethodError:main
هذه الرسالة تظهر عندما ننفذ باسم البرنامج لماذا؟
لأنك تتطلب من الجافا ان ينفذ جملة main function الموجود في الملف cمن نوع class file بينما لم يتكون هذا الملف لأنه لا يوجد class داخل البرنامج بهذا الأسم
لذلك لايمكن ان ننفذ البرنامج بالطريقة الأفتراضية وهي ان تسمي الملف بنفس اسم الكلاس
ولكن ان تذهب الى toolsRuncommand(java)prameters(a)Ok
كي يتم تنفيذ الملف a أو اكتب b بدلا من الـ a كي يتم تنفيذ الـ b class file
هذا بالنسبة لمستخدمي الـ textpadا ما غير ذلك فبمايكافئ هذه الطريقة
ولكن يمكن ان تكون هذه الجمل بالـ Dos لمستخدمي جميع برامج كتابة برامج الجافا
Example c.java
class a
{public static void main(String []s)
{System.out.println(“…..Hi ..class a…”);}
Public void main(int i)
{ System .out.println(“hhiiiiiiiiiii…+”i);
}
}
class b
{
Public static void main()
{Systm.out.println(“….Hi .. class b…”);}
}
Class d
{
Public static void main(String str[])
{
a Obja=new a();
b Objb=new b();
String []s={};
Obja.main(s);
Obja.main(3);
Objb.main();
}
Compilerjavac c.java
Rinjava d
Runjava a
Runjava c
Runjava b
عندما تنفذ الـ c,b ستحصل على رسالة خطأ هل تعلم لماذا؟؟؟؟؟؟
هناك معلومة اخيرة أحب اضافتها وهي عندما تسمي نفس الأسماء للـ classes في برامج مختلفة جميعها مخزنة في نفس المجلد فان اخر الـ class files الولى تحل محلها الجديدة فان الكلاس فايل الموجودة هي لآخر برنامج تم تنفيذه وذلك بسبب ان من مميزات الجافا نقلها بين الأجهزة المختلفة دون الحاجة لعمل compiler لها من جديد
فيمكن أخذ الـ class file من جهاز وعمل runjava class file name على جهاز أخر لتحصل على النتائج (potability)
أرجو أن أكون قد وفقت في توصيل الفكرة.....واستحق دعواتكم
وهذا ملف بالورد فيه الشرح كاملا