طريقة Java هي مزيج من بعض العبارات لأداء العملية. على سبيل المثال ، عندما تقوم بالاتصال بالطريقة.
الآن سوف تتعلم كيفية إنشاء أساليبك الخاصة. يمكن أن يكون لديهم قيم إرجاع أو لا توجد قيم إرجاع ، يمكن أن يكون لها معلمات أو لا توجد معلمات. يجب أن تستخدم أساليب التحميل الزائد اسم الطريقة نفسها واستخدام طرق التجريد في البرمجة.
طريقة الخلق
دعونا نستخدم المثال التالي لشرح بناء جملة الطريقة:
static int funcname (int a ، int b) {// body}هنا
الأساليب تحتوي أيضًا على إجراءات أو وظائف.
يتضمن تعريف الطريقة رأس طريقة وجسم طريقة. كما هو موضح أدناه:
modifier returntype nameofmethod (قائمة المعلمة) {// method body}يشمل بناء الجملة أعلاه
مثال
هذه هي الطريقة MAX () المحددة أعلاه ، والتي تقبل معلمتين num1 و num2 لإرجاع القيمة القصوى بين الاثنين.
/** يرجع المقتطف الحد الأدنى بين رقمين*/int static int int int (int n1 ، int n2) {int min ؛ if (n1> n2) min = n2 ؛ آخر دقيقة = n1 ؛ العودة دقيقة. } استدعاء الطريقة
لاستخدام طريقة ، يجب استدعاء الطريقة. هناك طريقتان لاستدعاء الطريقة ، والآخر لديه قيمة إرجاع ، والآخر ليس له قيمة إرجاع.
استدعاء الطريقة بسيطة للغاية. عندما يحتاج البرنامج إلى استدعاء طريقة ، ينقل برنامج التحكم إلى الطريقة التي تسمى. ستعيد الطريقة شروطين إلى المتصل:
خذ الطريقة التي تُرجع باطلة كبيان استدعاء ، اسمحوا لي أن أرى المثال التالي:
System.out.println ("wiki.jikexueyuan.com!") ؛يمكن فهم قيمة إرجاع هذه الطريقة من خلال المثال التالي:
int النتيجة = sum (6 ، 9) ؛
مثال
يوضح المثال التالي كيفية تحديد طريقة وكيفية تسميتها:
الفئة العامة exampleminnumber {public static void main (string [] args) {int a = 11 ؛ int b = 6 ؛ int c = minfunction (a ، b) ؛ System.out.println ("الحد الأدنى value =" + c) ؛ } / ** إرجاع الحد الأدنى من رقمين* / static int int minfunction (int n1 ، int n2) {int min ؛ if (n1> n2) min = n2 ؛ آخر دقيقة = n1 ؛ العودة دقيقة. }}سيتم إنتاج النتائج التالية
الحد الأدنى القيمة = 6
الكلمة الرئيسية باطلة
يتيح لنا الفراغ الكلمة الرئيسية إنشاء طريقة بدون قيمة إرجاع. هنا نقوم بإنشاء نقاط MethodRankpoints طريقة الفراغ في المثال التالي. هذه الطريقة ليس لها نوع قيمة الإرجاع. يجب أن تعلن استدعاء طريقة الفراغ (255.7) ؛ ينتهي بيان Java بـ Semicolon ، كما هو موضح أدناه:
الفئة العامة examplevoid {public static void main (string [] args) {methentRankPoints (255.7) ؛ } public static void mestomrankpoints (double points) {if (points> = 202.5) {system.out.println ("Rank: A1") ؛ } آخر إذا (النقاط> = 122.4) {system.out.println ("Rank: A2") ؛ } آخر {system.out.println ("Rank: A3") ؛ }}}هذا سوف ينتج عنه النتائج التالية:
المرتبة: A1
تمرير المعلمات حسب القيم
يجب تمرير المعلمات عند استدعاء وظيفة. ويجب أن يكون ترتيبهم هو نفسه ترتيب المعلمات عند إنشاءها. يمكن تمرير المعلمات بالقيم أو المراجع.
تمرير المعلمات من خلال القيم يعني استدعاء معلمة الطريقة ، تم تمريرها إلى المعلمة من خلال قيمة المعلمة.
مثال
يعطي البرنامج التالي مثالاً لإظهار أن المعلمات يتم تمريرها حسب القيم. لن تتغير قيمة المعلمة بعد استدعاء الطريقة.
الفئة العامة swappingexample {public static void main (string [] args) {int a = 30 ؛ int b = 45 ؛ System.out.println ("قبل التبديل ، a =" + a + "و b =" + b) ؛ // استدعاء طريقة المبادلة swapfunction (a ، b) ؛ system.out.println ("/n ** الآن ، قبل وبعد تبديل القيم سيكون هو نفسه هنا **:") ؛ System.out.println ("بعد التبديل ، A =" + A + "و B IS" + B) ؛ } swapfunction static static static (int a ، int b) {system.out.println ("قبل التبديل (من الداخل) ، a =" + a + "b =" + b) ؛ // swap n1 with n2 int c = a ؛ أ = ب ؛ ب = ج ؛ system.out.println ("بعد التبديل (من الداخل) ، a =" + a + "b =" + b) ؛ }}هذا سوف ينتج عنه النتائج التالية:
قبل التبديل ، a = 30 و b = 45before تبديل (من الداخل) ، a = 30 b = 45 بعد التبديل (من الداخل) ، a = 45 b = 30 **
الطريقة الزائدة
عندما يكون للطريقة طريقتين أو أكثر ، تكون أسمائها متماثلة ولكن المعلمات مختلفة ، فهي تسمى الأسلوب الزائد. يختلف عن التغطية. يشير Override إلى عدد الطرق بنفس الاسم والنوع والمعلمات.
دعونا ننظر في المثال السابق لإيجاد الحد الأدنى لرقم عدد صحيح. إذا طلبنا العثور على أصغر رقم في نوع نقطة عائمة ، فنحن بحاجة إلى استخدام الحمل الزائد للطريقة لإنشاء طريقتين أو أكثر مع نفس اسم الوظيفة ولكن معلمات مختلفة.
تم شرح الأمثلة التالية:
example examploading {public static void main (string [] args) {int a = 11 ؛ int b = 6 ؛ مزدوج C = 7.3 ؛ Double D = 9.4 ؛ int result1 = minfunction (a ، b) ؛ // نفس اسم الوظيفة مع معلمات مختلفة double result2 = minfunction (c ، d) ؛ System.out.println ("الحد الأدنى value =" + result1) ؛ System.out.println ("الحد الأدنى value =" + result2) ؛ } // لـ Integer Public Static int minfunction (int n1 ، int n2) {int min ؛ if (n1> n2) min = n2 ؛ آخر دقيقة = n1 ؛ العودة دقيقة. } // للحصول على minfunction مزدوجة الثابتة (مزدوجة N1 ، مزدوجة n2) {double min ؛ if (n1> n2) min = n2 ؛ آخر دقيقة = n1 ؛ العودة دقيقة. }}هذا سوف ينتج عنه النتائج التالية:
الحد الأدنى القيمة = 6 قيمة الحد الأدنى = 7.3
أساليب التحميل الزائد تجعل البرنامج سهلاً للقراءة. هنا ، فإن الطريقتين لها نفس الاسم ولكن معلمات مختلفة. يولد الحد الأدنى لعدد الأنواع من عدد صحيح ونقاط عائمة نتيجة تشغيل البرنامج.
استخدم معلمات سطر الأوامر
في بعض الأحيان تريد تمرير المعلمات قبل تشغيل البرنامج. يمكن تحقيق ذلك عن طريق تمرير معلمات سطر الأوامر إلى الوظيفة الرئيسية.
في سطر الأوامر ، عندما تريد تنفيذ ملف برنامج ، تظهر معلمة سطر الأوامر مباشرة بعد اسم الملف. من السهل جدًا قبول معلمات سطر الأوامر في برامج Java. يتم تمريرها إلى صفيف أحرف الوظيفة الرئيسية.
مثال
يوضح المثال التالي برنامجًا يخرج جميع معلمات سطر الأوامر:
سطر الأوامر العام العام {public static void main (String args []) {for (int i = 0 ؛ i <args.length ؛ i ++) {system.out.println ("args [" + i + "]:" + args [i]) ؛ }}}تنفيذ البرنامج بواسطة:
خط الأوامر Java هذا هو سطر الأوامر 200 -100
هذا سوف ينتج عنه النتائج التالية:
args [0]: thisargs [1]: isargs [2]: Aargs [3]: commandargs [4]: Lineargs [5]: 200Args [6]: -100
مُنشئ
فيما يلي مثال بسيط على استخدام المنشئين:
// مُنشئ بسيط. myClass {int x ؛ // التالي هو مُنشئ myClass () {x = 10 ؛ }}يمكنك إنشاء مثيل لكائن عن طريق الاتصال بالمقدم:
الفئة العامة consdemo {public static void main (String args []) {myClass t1 = new myClass () ؛ myClass T2 = جديد myClass () ؛ System.out.println (t1.x + "" + t2.x) ؛ }}عادة ، ستحتاج إلى استخدام مُنشئ لقبول معلمة أو أكثر. المعلمة التي تمريرها هي نفس مرور المعلمة للطريقة العادية التي تم تقديمها أعلاه ، والتي تتمثل في سرد قائمة المعلمات بعد اسم المنشئ.
مثال
فيما يلي مثال بسيط على استخدام المنشئين:
// مُنشئ بسيط. myClass {int x ؛ // فيما يلي مُنشئ myClass (int i) {x = i ؛ }}يمكنك إنشاء مثيل لكائن عن طريق الاتصال بالمقدم:
الفئة العامة consdemo {public static void main (String args []) {myClass t1 = new myClass (10) ؛ myClass T2 = جديد myClass (20) ؛ System.out.println (t1.x + "" + t2.x) ؛ }}هذا سوف ينتج عنه النتائج التالية:
10 20
معلمات الطول المتغير
يمكن أن يسمح لك JDK1.5 بتمرير معلمات طول متغير من نفس النوع. أعلن ذلك باستخدام الطريقة التالية:
typename ... parameTername
عند الإعلان عن طريقة ما ، تحتاج إلى تحديد نوع المعلمة قبل القطع النارية ، ويمكن أن تكون هناك معلمة طول متغيرة واحدة فقط ، ويجب أن تكون المعلمة ذات الطول المتغير هي الأخيرة لجميع المعلمات.
مثال
الفئة العامة varargsdemo {public static void main (String args []) {// method method with args args printmax (34 ، 3 ، 3 ، 2 ، 56.5) ؛ printmax (new double [] {1 ، 2 ، 3}) ؛ } printmax static printmax (double ... أرقام) {if (number.length == 0) {system.out.println ("لا تم تمرير الوسيطة") ؛ يعود؛ } نتيجة مزدوجة = الأرقام [0] ؛ لـ (int i = 1 ؛ i <number.length ؛ i ++) if (number [i]> result) نتيجة = الأرقام [i] ؛ System.out.println ("القيمة الأقصى" + النتيجة) ؛ }}هذا سوف ينتج عنه النتائج التالية:
القيمة القصوى هي 56.5 القيمة القصوى هي 3.0
طريقة اللمسات الأخيرة ()
يمكنك تحديد طريقة لن يتم استدعاؤها إلا قبل تدميرها من قبل جامع القمامة. تسمى هذه الطريقة طريقة النهائيات () ، والتي يمكن استخدامها أيضًا لضمان تنظيف كائن.
على سبيل المثال ، يمكنك استخدام Finize () للتأكد من إغلاق الملف الذي تم فتحه بواسطة كائن.
لإضافة Finalizer إلى الفصل ، تحتاج فقط إلى تحديد طريقة اللمسات الأخيرة (). عندما تريد Java إعادة تدوير كائن من هذه الفئة ، سيتم استدعاء الطريقة.
في طريقة النهائيات () ، ستحدد بعض السلوك الذي يجب القيام به قبل تدمير الكائن.
تشبه طريقة اللمسات الأخيرة () بشكل عام ما يلي:
الفراغ المحمي النهائي () {// رمز الانتهاء هنا}هنا ، الكلمة الرئيسية المحمية هي التأكد من أن الكود خارج الفصل لا يمكنه الوصول إلى طريقة اللمسات الأخيرة ().
هذا يعني أنه لا يمكنك معرفة متى يتم تنفيذ اللمسات الأخيرة (). على سبيل المثال ، في حالة انتهاء البرنامج قبل حدوث جامع القمامة ، فلن يتم تنفيذ طريقة اللمسات الأخيرة ().
طرق عامة:
تُستخدم طرق Java العامة على نطاق واسع عندما تقوم الطريقة بإرجاع قيمة هي كائن فئة الحاويات.
القائمة الثابتة العامة <T> البحث (الفئة <T> clazz ، string userid) {....}بشكل عام ، عند كتابة طريقة جافا العامة ، يجب أن يكون نوع قيمة الإرجاع ونوع معلمة واحد على الأقل عامًا ، ويجب أن يكون النوع هو نفسه. إذا كان واحد فقط من نوع قيمة الإرجاع أو نوع المعلمة يستخدم عامًا عامًا ، فسيكون استخدام هذه الطريقة العامة مقيدًا بشكل كبير ، بشكل أساسي بنفس المستوى كما لو كنت لا تستخدم الأداء العام.
يقدم ما يلي بشكل أساسي استخدام طريقتتين متشابهتين للغاية من Java والاختلافات بينهما.
النوع الأول:
الثابت العام <t يمتد commonservice> t getService (class <t> clazz) {t service = (t) servicemap.get (clazz.getName ()) ؛ if (service == null) {service = (t) serviceLocator.getService (clazz.getName ()) ؛ servicemap.put (clazz.getName () ، service) ؛ } خدمة الإرجاع ؛ } النوع الثاني:
static public <T> t getService (Class <؟ Extends CommonService> clazz) {t service = (t) servicemap.get (clazz.getName ()) ؛ if (service == null) {service = (t) serviceLocator.getService (clazz.getName ()) ؛ servicemap.put (clazz.getName () ، service) ؛ } خدمة الإرجاع ؛ } هنا هو الفصل حيث توجد الطريقة العامة:
Public Abstract Classervice {private static hashmap <string ، commonservice> serviceMap = new hashmap <string ، commonservice> () ؛ // هنا هو تعريف الطريقة العامة. . } هاتان الطريقتان العامتان لهما توقيعات طرق مختلفة فقط وأجسام الأسلوب هي نفسها تمامًا. إذن ما هو الفرق؟
دعونا نستخدمها وستعرف الفرق.
استخدم الطريقة العامة الأولى:
الفئة العامة الرئيسية {public static void main (string [] args) {noticeservice noticeservice = commonservice.getService (noticeservice.class) ؛ // استخدم الطريقة العامة الأولى بشكل صحيح دون تجميع الأخطاء. Noticeservice Noticeservice = commonservice.getService (UserService.class) ؛ // إذا كنت تستخدم الطريقة العامة الأولى بشكل غير صحيح ، فسيحدث خطأ في التجميع. }} استخدم الطريقة العامة الثانية:
الفئة العامة الرئيسية {public static void main (string [] args) {noticeservice noticeservice = commonservice.getService (noticeservice.class) ؛ // استخدم الطريقة العامة الثانية بشكل صحيح ، ولن يكون هناك أي أخطاء في التجميع ، ولن يكون هناك منطق ، ولن يكون هناك استثناءات أثناء وقت التشغيل. Noticeservice Noticeservice = commonservice.getService (Userveservice.class) ؛ // إذا كنت تستخدم الطريقة العامة الثانية بشكل غير صحيح ، فلن تكون هناك أخطاء تجميع ، لكن المنطق غير صحيح ، وسيحدث استثناء أثناء وقت التشغيل ، وهو أمر خطير! }}الآن أعرف الفرق بين هاتين الطريقتين العامتين المتشابهتين للغاية؟