深入理解 Java注解及實例
Java注解
什么是注解?
Java中的注解就是Java源代碼的元數(shù)據(jù),也就是說注解是用來描述Java源代碼的。 基本語法就是:@后面跟注解的名稱。
①Override:標識某一個方法是否正確覆蓋了它的父類的方法。
②Deprecated:表示已經(jīng)不建議使用這個類成員了。 它是一個標記注解。
③SuppressWarnings:用來抑制警告信息 等等。
要更好的理解注解,我們可以自己寫一個注解
@Target : 用來限制注解可以用到那幾個地方。比方可以用到類上,可以用到方法勝都可以用@Target來限制
@Retention:這個是用來控制注解編譯在Class中的狀態(tài)的,默認是編譯到Class里去,但是不讀出來,還有兩種狀態(tài)是 不編譯到Class里面去, 最后一種是編譯過于,并且可以通過類反射讀出來的
@Documented : 可以利用網(wǎng)絡來生成注解的
@Inherited : 子類是否能繼承注解
那么下面是我們自己寫的注解類
package cn.hncu.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD}) //目標: 限制該注解能夠用在哪些地方,如果沒定義@Target則不限制即無論哪里都可以用
public @interface MyAnno {
public String schoolName() default "hncu"; //注解中的成員變量要這么定義
}
測試,學習使用
package cn.hncu.annotation;
import java.util.ArrayList;
import java.util.Collection;
@MyAnno
public class AnnotationHello {
private String name="hncu";
public static void main(String[] args) {
System.out.println("hello");
}
@Override
public String toString() {
return super.toString();
}
@MyAnno(schoolName="大城院")
@Deprecated
public void abc(){
System.out.println("abc...");
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public void colDemo(){
Collection col = new ArrayList();
col.add("aa");
}
//注解,只是給其它程序或代碼讀取信息的
@MyAnno(schoolName="湖南城市學院")
public void demo(){
System.out.println("1111111");
}
@MyAnno //因為該注解中的成員變量schoolName設置了默認值,因此這里可以不賦值。若沒設置默認值,則必須要在這里賦值
public void demo2(){
System.out.println("1111111");
}
//@MyAnno("abc") //如果注解中的變量名是value,則這里可以不給出變量名
public void demo3(){
System.out.println("33333333333");
}
}
通過類反射讀出來
package cn.hncu.annotation;
import java.lang.reflect.Method;
public class UseMyAnno {
public static void main(String[] args) {
try {
Class c = Class.forName("cn.hncu.annotation.AnnotationHello");
//判斷類上面是否有該注解(@MyAnno)
boolean boo = c.isAnnotationPresent(MyAnno.class);
System.out.println("類上是否有該注解:"+boo);
Method ms[] = c.getDeclaredMethods();
for(Method m: ms){
//判斷方法上面是否有該注解(@MyAnno)
if(m.isAnnotationPresent(MyAnno.class)){
System.out.println("有注解的方法:"+m.getName());
//演示讀取注解中成員變量的值----從m對象中獲取該注解,進而讀取它的成員變量的值
MyAnno ma = (MyAnno)m.getAnnotation(MyAnno.class);
System.out.println("學校名稱:=="+ma.schoolName());
//獲取到了這些數(shù)據(jù)過后,下面就可以開始你的處理了
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
使用springboot跳轉到指定頁面和(重定向,請求轉發(fā)的實例)
這篇文章主要介紹了使用springboot跳轉到指定頁面和(重定向,請求轉發(fā)的實例),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
java開發(fā)AOP基礎JdkDynamicAopProxy
這篇文章主要為大家介紹了java開發(fā)AOP基礎JdkDynamicAopProxy源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
IDEA之啟動參數(shù),配置文件默認參數(shù)的操作
這篇文章主要介紹了IDEA之啟動參數(shù),配置文件默認參數(shù)的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
使用AbstractRoutingDataSource實現(xiàn)數(shù)據(jù)源動態(tài)切換的實例
AbstractRoutingDataSource 是 Spring 框架提供的一個抽象類,用于實現(xiàn)動態(tài)數(shù)據(jù)源路由,這個類主要用于多數(shù)據(jù)源場景,其中可以根據(jù)不同的條件動態(tài)地切換到不同的數(shù)據(jù)源,本文給大家介紹了如何使用AbstractRoutingDataSource實現(xiàn)數(shù)據(jù)源動態(tài)切換,需要的朋友可以參考下2024-03-03

