باستخدام java.lang.Class
< span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >java.lang.Class هي واحدة من الفئات المهمة في جافا ولكن نادرا ما يلاحظها مبرمجو جافا. هذا الفصل مفيد للغاية لأنه يحتوي على عدة طرق مثل: < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >getClass () < / span > ، < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >forName() الذي يمكن استخدامه لتحميل فئة دراسية، ويمكنك أيضا تحميل برامج تشغيل Oracle وMySQL. نمط Class أيضا طرقا مثل Class.newInstance() الذي يسمح لك بإنشاء مثيل لفئة دون استخدام النمط جديد ()< / امتداد>. نمط java.lang.Class على منشئات عامة ، ويتم إنشاء مثيله بواسطة JVM عند تحميله. كائن الفئة Class أيضا لتمثيل الفئات والتعدادات والواجهات والتعليقات التوضيحية في تطبيق جافا قيد التشغيل. يتم تمثيل الأنواع البدائية بايت وقصير وحرف و int وعائم ومزدوج ومنطقي بمثيلات java.lang.Class. يمكنك الحصول على المثيل الفئة< / الامتداد> المقابلة بهذه الطريقة: int.class، float.class أو فئة منطقية< / سبان>. تستخدم هذه الفئة أيضا لتمثيل مثيل صفيف في جافا. كل لوحة مع نفسه نبسب؛ النوع ونفس البعد يشتركان في نفسه مثيل من الفصل < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >الفئة< / الامتداد>. استخدام آخر لنمط java.lang.Class ، عند تنفيذ نمط يساوي () < / span> للتحقق مما إذا كان هناك كائنان مستحقان نفسه اكتب أم لا.الكائن java.lang.Class في كل مرة بواسطة JVM الذي يصف نوع الكائن. تشترك جميع مثيلات نفس الفئة في نفس الكائن Class< / span> ويمكنك الحصول على الكائن Class عن طريق استدعاء الطريقة getClass () < / span >. هذه الطريقة موروثة من نمط java.lang.Object.
لنفترض في هذا المثال أننا أنشأنا مثيلات مختلفة لمقارنتها بما يلي:
الفراغ الثابت العام الرئيسي (String[] args) {نحن بحاجة إلى الأساليب < span style = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >newInstance() و forName() لأنه في بعض الأحيان لا يمكننا معرفة اسم الفئة التي تم إنشاء مثيل لها في وقت التشغيل ، لذا فإن هذه الطرق تجعل الأمور أكثر بساطة بالنسبة لنا.
String str1 = سلسلة جديدة () ، str2 = سلسلة جديدة () ؛
System.out.println(str1.getClass().getName());
System.out.println(str2.getClass().getName());
if(str1.getClass().equals(str2.getClass())){
System.out.println("str1 وstr2 مثيلان من نفس الفئة");
}else{
System.out.println("str1 وstr2 هي مثيلات لفئات مختلفة");
}
عدد صحيح A = عدد صحيح جديد (1);
منطقي B = منطقي جديد (صحيح) ؛
System.out.println(A.getClass().getName());
System.out.println (B.getClass () .getName ()) ؛
if(A.getClass().equals( B.getClass())){
System.out.println("A وB هما مثيلان من نفس الفئة");
}else{
System.out.println("A وB هي مثيلات من فئات مختلفة");
}
}
< / pre>وقت التشغيل:
< pre class = "prettyprint lang-java" >java.lang.String
java.lang.String
str1 و str2 هي مثيلات من نفس الفئة
java.lang.Integer
java.lang.Boolean
A و B هي مثيلات الفئات المختلفة
try {هناك طرق أخرى لاختبار نوع الفئة:
/*newInstance() المكافئ لسلسلة جديدة () * /
String str2 = str1.getClass () .newInstance();
System.out.println(str2.getClass().getName());
System.out.println(str2.getClass().getSimpleName());
System.out.println(str2.getClass().getCanonicalName());
} catch (InstantiationException e) {
// TODO كتلة الصيد التي تم إنشاؤها تلقائيا
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO كتلة الصيد التي تم إنشاؤها تلقائيا
e.printStackTrace ();
}
< / pre>وقت التشغيل:
< pre class = "prettyprint lang-java" >java.lang.String
String
java.lang.String
isEnum(): إرجاع true إذا كان النوع عبارة عن تعداد.
isArray(): إرجاع true إذا كان النوع عبارة عن صفيف.
isInstance(Object o): إرجاع true إذا كانت الفئة مثيلا للكائن o.
isLocal () < / span>: إرجاع true إذا تم الإعلان عن الفئة محليا.
< pre class = "prettyprint lang-java" > String str1 = سلسلة جديدة ();
سلسلة [] صفيف = {"aa"، "bb"، "cc"}؛
String[] array2 = {"fd","be","ce"};
System.out.println(array.getClass().isArray()); true
System.out.println(array.getClass().isInstance(array2)); true
System.out.println(array.getClass().isLocalClass()); false
احصل على منشئات وواجهات وأساليب class
فائدة أخرى لاستخدام نمط < / span >< span = "عائلة الخط:" ساعي جديد" , " ساعي" ، حافلة صغيرة؛" >java.lang.Class هو أنه يمكننا عرض جميع قوائم المنشئات والسمات والأساليب والواجهات باستخدام الطرق التالية:java.lang.Class.getConstructors(): إرجاع صفيف يحتوي على كافة كائنات المنشئ المتعلقة بالمنشئات العامة للفئة. يتم إرجاع صفيف بحجم 0 إذا لم يكن للفئة منشئات عامة ، أو إذا كانت الفئة عبارة عن صفيف.
java.lang.Class.getMethods (): ترجع صفيف يحتوي على جميع أساليب الأعضاء في الفئة أو الواجهة، بما في ذلك تلك المعلنة في الفئة أو الواجهة، أو تلك الموروثة من فئة أصل وواجهات أصلية. يتم إرجاع صفيف من الحجم 0 إذا لم يكن للفئة طريقة عامة ، أو إذا كانت الفئة عبارة عن صفيف.
java.lang.Class.getInterfaces(): تحدد هذه الطريقة الواجهات التي يتم تنفيذها بواسطة فئة أو يمثلها هذا الكائن. هي إرجاع صفيف يحتوي على كافة الواجهات في الفئة، بما في ذلك تلك المعلنة في الفئة أو تلك الموروثة من فئة أصل. يتم إرجاع صفيف بحجم 0 إذا لم يكن للفئة واجهة عامة ، أو إذا كانت الفئة عبارة عن صفيف.
يعد استخدام هذه الطرق الثلاث أمرا سهلا ، كما هو موضح في الكود التالي:
< pre class = "prettyprint lang-java" >java.lang.Class button = Class.class.forName ("javax.swing.JButton") ؛
System.out.println("منشئو "+button.getClass()); < br / > المنشئ<؟ > [] c = button.getClass () .getConstructors ();
for(int i=0; أنا< ج. الطول؛ i++)
System.out.println(c[i]);
System.out.println("واجهات "+button.getClass());
java.lang.Class<؟ > [] واجهات = button.getClass () .getInterfaces ();
for(int i=0; أنا< واجهات.الطول؛ i++)
System.out.println(interfaces[i]);
System.out.println("Methods"+button.getClass());
Method [] m = button.getClass () .getMethods ();
for(int i=0; أنا< م الطول. i++)
System.out.println(m[i]);
< / pre>ينتج عن تشغيل هذا الجزء من التعليمات البرمجية قائمة طويلة من طرق النمط java.lang.String ، لذلك سنعرض فقط قائمة المنشئات والواجهات:
< pre class = "prettyprint lang-java" >javax.swing.JButton
javax.swing.JButton
interface java.io.Serializable
interface java.lang.reflect.GenericDeclaration
interface java.lang.reflect.Type
interface java.lang.reflect.AnnotatedElement
< br / > Class Methods javax.swing.JButton
public static java.lang.Class java.lang.Class.forName (java.lang.String,boolean,java.lang.ClassLoader) يلقي java.lang.ClassNotFoundException
public static java.lang.Class java.lang.Class.forName(java.lang.String) يلقي java.lang.ClassNotFoundException
public native boolean java.lang.Class.isAssignableFrom(java.lang.Class)
public native java.lang.Class java.lang.Class.getSuperclass()
public native java.lang.Class java.lang.Class.getComponentType()
public java.lang.String java.lang.Class.toString()
public native boolean java.lang.Class.isInstance(java.lang.Object)
public native int java.lang.Class.getModifiers()
public native boolean java.lang.Class.isInterface()
public native boolean java.lang.Class.isArray()
public native boolean java.lang.Class.isPrimitive()
public java.lang.String java.lang.Class.getName()
public java.lang.Class java.lang.Class.asSubclass(java.lang.Class)
public java.lang.Object java.lang.Class.cast(java.lang.Object)
public java.lang.Class[] java.lang.Class.getClasses()
public java.lang.reflect.Field java.lang.Class.getField(java.lang.String) يلقي java.lang.NoSuchFieldException,java.lang.SecurityException
java.lang.reflect.Field العام[] java.lang.Class.getFields() يلقي java.lang.SecurityException
public java.lang.reflect.Method java.lang.Class.getMethod(java.lang.String,java.lang.Class[]) يلقي java.lang.NoSuchMethodException,java.lang.SecurityException
public java.lang.reflect.Method[] java.lang.Class.getMethods() يلقي java.lang.SecurityException
public java.lang.Package java.lang.Class.getPackage()
public java.net.URL java.lang.Class.getResource(java.lang.String)
public native java.lang.Object[] java.lang.Class.getSigners()
public boolean java.lang.Class.isAnnotation()
public boolean java.lang.Class.isEnum()
public boolean java.lang.Class.isLocalClass()
public boolean java.lang.Class.isSynthetic()
public java.lang.Object java.lang.Class.newInstance() يلقي java.lang.InstantiationException ، java.lang.IllegalAccessException
public boolean java.lang.Class.desiredAssertionStatus()
public java.lang.annotation.Annotation java.lang.Class.getAnnotation(java.lang.Class)
public java.lang.annotation.Annotation[] java.lang.Class.getAnnotations()
public java.lang.String java.lang.Class.getCanonicalName()
public java.lang.ClassLoader java.lang.Class.ClassLoader()
public java.lang.reflect.Constructor java.lang.Class.getConstructor(java.lang.Class[]) يلقي java.lang.NoSuchMethodException,java.lang.SecurityException
public java.lang.reflect.Constructor[] java.lang.Class.getConstructors() يلقي java.lang.SecurityException
public java.lang.annotation.Annotation[] java.lang.Class.getDeclaredAnnotations()
public java.lang.Class[] java.lang.Class.getDeclaredClasses() يلقي java.lang.SecurityException
public java.lang.reflect.Constructor java.lang.Class.getDeclaredConstructor(java.lang.Class[]) يلقي java.lang.NoSuchMethodException,java.lang.SecurityException
public java.lang.reflect.Constructor[] java.lang.Class.getDeclaredConstructors() يلقي java.lang.SecurityException
public java.lang.reflect.Field java.lang.Class.getDeclaredField(java.lang.String) يلقي java.lang.NoSuchFieldException,java.lang.SecurityException
java.lang.reflect.Field[] java.lang.Class.getDeclaredFields() يلقي java.lang.SecurityException
public java.lang.reflect.Method java.lang.Class.getDeclaredMethod(java.lang.String,java.lang.Class[]) يلقي java.lang.NoSuchMethodException,java.lang.SecurityException
public java.lang.reflect.Method[] java.lang.Class.getDeclaredMethods() يلقي java.lang.SecurityException
public native java.lang.lang.Class java.lang.Class.getDeclaringClass()
public java.lang.Class java.lang.Class.getEnclosingClass()
public java.lang.reflect.Constructor java.lang.Class.getEnclosingConstructor()
public java.lang.reflect.Method java.lang.Class.getEnclosingMethod()
public java.lang.Object[] java.lang.Class.getEnumConstants()
public java.lang.reflect.Type[] java.lang.Class.getGenericInterfaces()
public java.lang.reflect.Type java.lang.Class.getGenericSuperclass()
public native java.lang.Class[] java.lang.Class.getInterfaces()
public java.security.ProtectionDomain java.lang.Class.getProtectionDomain()
public java.io.InputStream java.lang.Class.getResourceAsStream(java.lang.String)
public java.lang.String java.lang.Class.getSimpleName()
public java.lang.reflect.TypeVariable[] java.lang.Class.getTypeParameters()
public boolean java.lang.Class.isAnnotationPresent(java.lang.Class)
public boolean java.lang.Class.isAnonymousClass()
public boolean java.lang.Class.isMemberClass()
public final void java.lang.Object.wait(long,int) يلقي java.lang.InterruptedException
public النهائي الأصلي void java.lang.Object.wait(long) يلقي java.lang.InterruptedException
public Final void java.lang.Object.wait() رميات java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
المراجع:
Javadoc: java.lang.Class