Heim >Java >javaLernprogramm >So verwenden Sie Anmerkungen und Reflexion in Java
Anmerkungen sind nicht das Programm selbst und können während der Programmkompilierung, beim Laden der Klasse und zur Laufzeit gelesen werden Verarbeitung. Das Format der Annotation ist „@annotation name (Parameterwert)“, das an Pakete, Klassen, Methoden und Felder angehängt werden kann, und auf die Annotation kann über den Reflexionsmechanismus zugegriffen werden.
@Override: Unterklassen-Überschreibungsmethode einschränken
Diese Anmerkung zeigt an, dass die Überschreibung erfolgt ist Methoden ihrer übergeordneten Klasse, stellen Sie sicher, dass die Unterklasse tatsächlich die Methode der übergeordneten Klasse überschreibt, um Fehler auf niedriger Ebene zu vermeiden
/** * 该注解标识覆盖的是其父类的方法,当子类重写父类方法时,确保子类确实重写了父类的方法,避免出现低级错误 * @return */ @Override public String toString() { return super.toString(); }
@ Veraltet: Als veraltet markiert
Diese Anmerkung weist darauf hin, dass eine Eigenschaft, Methode oder Klasse veraltet ist (ein Programmelement, von dessen Verwendung Programmierern abgeraten wird, normalerweise weil es gefährlich oder besser ist). Wenn eine alternative Methode vorhanden ist, gibt der Compiler eine Warnung (durchgestrichen) aus, wenn andere Programme veraltete Eigenschaften, Methoden oder Klassen verwenden.
/** * 该注解表示此方法已过时,存在危险,不推荐使用,其有代替方法,如果继续使用会通过删除线进行标识 */ @Deprecated public static void test() { System.out.println("标记已过时"); }
@SuppressWarnings(parameter): Compiler-Warnungen unterdrücken
Die von dieser Annotation betroffenen Klassen, Methoden und Eigenschaften unterdrücken die Anzeige des Compilers Warnungen, seine Parameter dienen hauptsächlich für Warnanweisungen und Abbruch (nicht aktiviert) usw.
@SuppressWarnings("取消此类的所有警告") public class BuiltAnnotation { @SuppressWarnings("取消此属性的警告") private String username; @SuppressWarnings("取消此方法的警告") public static void main(String[] args) { // ... } }
Die Rolle der Meta-Annotation besteht darin, andere Annotationen zu kommentieren. Java definiert 4 Standard-Meta-Annotationstypen, die Beschreibungen des Umfangs bereitstellen und Arten anderer Anmerkungen sowie andere Anmerkungen können durch Meta-Anmerkungen angepasst werden.
@Target: Beschreiben Sie den Anwendungsbereich von Anmerkungen. @Target(ElementType .TYPE) gibt an, dass es auf eine Klasse oder Schnittstelle usw. wirkt.
/** * @Target注解:描述注解的使用范围 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Target { /** * 类或接口:ElementType.TYPE; * 字段:ElementType.FIELD; * 方法:ElementType.METHOD; * 构造方法:ElementType.CONSTRUCTOR; * 方法参数:ElementType.PARAMETER; * ... */ ElementType[] value(); }
@Retention: Gibt an, auf welcher Ebene die Anmerkungsinformationen gespeichert und zur Beschreibung verwendet werden müssen der Lebenszyklus der Annotation
#🎜 🎜#Normalerweise verwenden benutzerdefinierte Annotationen @Retention(RetentionPolicy.RUNTIME), was den Laufzeiteffekt darstellt. /**
* @Retention:表示需要在什么级别保存该注解信息,用于描述注解的生命周期
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* RetentionPolicy.SOURCE:仅编译期,注解将被编译器丢弃。
* RetentionPolicy.CLASS:仅class文件,注释将由编译器记录在类文件中,但VM不需要在运行时保留,如果不指定则默认为class。
* RetentionPolicy.RUNTIME:运行期,注释将由编译器记录在类文件中,并由VM在运行时保留,因此可以反射读取。通常自定义的注解都是RUNTIME。
* 范围:RUNTIME>CLASS>SOURCE
*/
RetentionPolicy value();
}
@Iherited: Definiert, ob Unterklassen vererbbar sind Von der übergeordneten Klasse definierte Anmerkungen.
@Inherited ist nur für Annotationen vom Typ @Target(ElementType.TYPE) nützlich und kann nur eine Vererbung der Klasse sein, keine Vererbung der Schnittstelle: 1.4 Benutzerdefinierte Anmerkung
Definitionsanmerkung/** * 1. 使用@interface定义注解; * 3. 通过元注解配置该注解,配置注解的使用范围和生命周期等 * @author Loner */ @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Report{ /** * 2. 添加参数、默认值,如果没有默认值,就必须给参数赋值,一般把最常用的参数定义为value(),推荐所有参数都尽量设置默认值 * 形式为:参数类型 参数名(); */ int type() default 0; String value() default "LonerMJ"; }
Anmerkung verwenden
@Report(type = 1, value = "test") public class CustomerAnnotation { @Report(type = 1, value = "test") public void testCustomerAnnotation() { System.out.println("测试自定义注解"); } }#🎜 🎜# 2. Reflexion
2.1 Reflexion und Reflexionsmechanismus
Reflexionsmechanismus
Der Reflexionsmechanismus bedeutet, dass das Programm, wenn es ausgeführt wird, die Inhaltsinformationen jeder Klasse über die Reflection-API erhält. und kann alle internen Eigenschaften und Methoden des Objekts direkt bedienen.2.2 So erhalten Sie die Class-Klasse und allgemeine Methoden
java.lang.Class-Klasse, die Kernklasse, die die Reflektion nach Abschluss des Klassenladens in der Methode implementiert Bereich des Heap-Speichers Es wird ein Klassenobjekt generiert (eine Klasse hat nur ein Klassenobjekt). Durch dieses Objekt können Sie die Struktur der Klasse sehen.public class InstantiationClass { public static void main(String[] args) throws ClassNotFoundException { Teacher teacher = new Teacher("张三", "123456"); // 方式一:调用Class类的静态方法forName(String className) Class<?> c1 = Class.forName("com.loner.mj.reflection.Teacher"); // 方式二:已知某个类的实例,调用该实例的getClass()方法,getClass是Object类中的方法。 Class<? extends Teacher> c2 = teacher.getClass(); // 方式三:已知具体类,通过类的class属性获取,该方法最安全可靠,程序性能最高 Class<Teacher> c3 = Teacher.class; // 方式四:通过基本内置类型的包装类的TYPE属性获得CLass实例 Class<Integer> c4 = Integer.TYPE; // 方式五:通过当前子类的Class对象获得父类的Class对象 Class<?> c5 = c1.getSuperclass(); } }
Gemeinsame Methoden der Klassenklasse#🎜🎜 #
Methodenname
Methodenfunktionstatische Klasse forName(String name)#🎜 🎜# | Das Klassenobjekt des angegebenen Klassennamens zurückgeben Klassenobjekt Eine Instanz von|
---|---|
Gibt die durch diese Klasse dargestellte Entität (Klasse, Schnittstelle, Array-Klasse oder Leere) zurück Objektname | |
Gibt das Klassenobjekt der übergeordneten Klasse des aktuellen Klassenobjekts zurück | #🎜🎜 ##🎜🎜 # | Class[] getinterfaces()
ClassLoader getClassLoader( ) | |
Methode getDeclareMethod(String name, Class6b3d0130bba23ae47fe2b8e8cddf0195 ... parameterTypes)#🎜 🎜# | Holen Sie sich die Methode, deren Methodenname mit der Parameterliste übereinstimmt. geerbte Methoden|
Method[] getMethods() | Alle nicht privaten Methoden abrufen |
Feld getDeclareField(String name ) | Spezifizierte Attribute abrufen |
Field[] getDeclareFields() | #🎜 🎜 #Alle Attribute abrufen# 🎜🎜# |
Alle nicht-privaten Eigenschaften abrufen | #🎜 🎜# | Constructor getConstructor(Class< ;?>... parameterTypes
Konstruktor getConstructors() | |
A getAnnotation(Class6b3d0130bba23ae47fe2b8e8cddf0195 annotationClass) | #🎜 🎜#Geben Sie die angegebene Annotation#🎜🎜 ## 🎜 🎜 ## 🎜🎜 ## 🎜🎜##Annotation [] getDeclaredAnnotations ()#🎜🎜 ## 🎜🎜#zurück alle Annotationen#🎜🎜 ## 🎜🎜 ## 🎜🎜 🎜🎜 🎜🎜#zurückgeben #
Das obige ist der detaillierte Inhalt vonSo verwenden Sie Anmerkungen und Reflexion in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!