احصل على طرق في الفصل:
الطريقة العامة [] getMethods () ؛ // احصل على جميع الأساليب العامة بما في ذلك نفسها والميراث (التنفيذ) - لا تدعم الأسلوب الأداء العام <> ، أي ، لا <>
الطريقة العامة [] getDeclaredMethods () ؛ // الحصول على جميع الأساليب (خاصة ، عامة ، محمية ، لا علاقة لها بحقوق الوصول). لا يشمل الطرق الموروثة التي يمكن أن تحصل مباشرة على سمات خاصة بعد JDK1.8. ليست هناك حاجة لتعيين أذونات ، ولكن لا تزال طريقة getDeclaredMethod فقط تحتاج إلى تعيين أذونات لطرق الطريقة.
الطريقة العامة [] getMethod (سلسلة الأسلوب ، الفئة <T> ... parametertypes) ؛ // تعني الحصول على طريقة عامة محددة ، بما في ذلك المعلمات الموروثة: methodname: يعني اسم الطريقة التي تم الحصول عليها
ParameterTypes: نوع الفئة الذي يمثل معلمة الطريقة التي تم استردادها
الطريقة العامة [] getDeclaredMethod (سلسلة الأسلوب ، فئة <T> ... parametertypes) ؛ // تعني الحصول على طريقة محددة في هذه الفئة (خاصة ، محمية ، عامة ، غير ذات صلة بأذونات الوصول) ، ولا تشمل الطرق الموروثة
class clazz = new person (). getClass () ؛ جرب {// استدعاء الطريقة المحددة/*@cumpresswarnings ("uncheced") method me = clazz.getDeclaredMethod ("getName" ، string.class) ؛ me.invoke (clazz.newinstance () ، "Zhangsan") ؛ *////احصل على جميع الطرق [] الأساليب = clazz.getDeclaredMethods () ؛ لـ (الطريقة الطريقة: الطرق) {system.out.println (method.getName ()) ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ }بالنسبة لمكالمات الطريقة التي تحتوي على معلمات متعددة: يمكن فهم أنواع المعلمة التي تليها getDeclaredMethod كمعلمة رسمية لنوع الفئة. من خلال الاتصال ، من الأفضل لف تعيين معلمات متعددة في كائن جديد [] {}.
suppressWarnings ("unchected") طريقة = clazz.getDeclaredMethod ("getName" ، فئة جديدة [] {string.class ، int.class}) ؛ method.invoke (new person () ، كائن جديد [] {"Zhangsan" ، 10}) ؛استدعاء الأساليب الثابتة
مستخدم الفئة {public static void staticmethod () {system.out.println ("static mthod invoke. هناك طريقتان لاستدعاء الطرق الثابتة:
1. لأن الطريقة الثابتة تنتمي إلى جميع كائنات المثيل ، يمكنك إنشاء كائن تعسفي للفئة والاتصال به من خلال الكائن.
staticmethod.invoke (clz.newinstance ()) ؛ // staticmethod ليس له أي معلمات ، لذلك لا يتم ملء نوع قائمة المعلمات.
2. إذا كانت الطريقة الأساسية ثابتة ، فيمكنك تجاهل معلمة OBJ المحددة وتعيين معلمة OBJ على NULL
StaticMethod.invoke (NULL) ؛
المزيد من المحتوى ذات الصلة:
واحد: مفهوم الانعكاس
يمكنك الحصول على متغيرات الأعضاء وطرق فئة معينة من خلال الفصل الدراسي والاتصال بها.
2: الحصول على الطرق والمتغيرات وطرق البناء من خلال الانعكاس
test // الحصول على تعريف الفئة طريقة public void testmethod () يلقي الاستثناء {suppressWarnings ("RawTypes") clazz = class.forname ("java.lang.string") ؛ الطريقة [] m = clazz.getDeclaredMethods () ؛ لـ (int i = 0 ؛ i <m.length ؛ i ++) {system.out.println (m [i] .getName () + "" + m [i] .getDeclaringClass ()) ؛ }} test // الحصول على تعريف الفئة متغير public void testfield () يلقي استثناء {suppressWarnings ("RawTypes") clazz = class.forname ("java.lang.string") ؛ الحقل [] الحقول = clazz.getfields () ؛ لـ (Field F: Fields) {system.out.println (f.getName ()) ؛ }} test // احصل على مُنشئ تعريف الفئة من خلال الانعكاس public void testconstructor () يلقي الاستثناء {suppressWarnings ("RawTypes") clazz = class.forname ("java.lang.string") ؛ suppressWarnings ("rawtypes") مُنشئ [] cons = clazz.getConstructors () ؛ لـ (suppressWarnings ("RawTypes") Constructor c: cons) {system.out.println (c + "" + c.getDeclaringClass ()) ؛ }}ثلاثة: اتصل بالطريقة المحددة بواسطة الفصل من خلال التفكير
test // استدعاء الطريقة المحددة بواسطة الفصل من خلال الانعكاس public void testinvokemethod () يلقي الاستثناء {class clazz = class.forname ("java.lang.string") ؛ // تحديد فئة نوع المعلمة [] params = فئة جديدة [1] ؛ params [0] = string.class ؛ الطريقة m = clazz.getDeclaredMethod ("indexof" ، params) ؛ // قم بتعيين كائن المعلمة [] p = كائن جديد [1] ؛ p [0] = "e" ؛ عدد صحيح S = (عدد صحيح) M.Invoke ("HelloWorld!" ، P) ؛ system.out.println (s) ؛ }