欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 中的注解詳解及示例代碼

 更新時間:2016年08月31日 11:36:10   投稿:lqh  
本文主要介紹Java 中的注解,這里提供了詳細的相關(guān)資料,及示例代碼,幫助大家學(xué)習(xí)理解,有興趣的小伙伴可以參考下

在Java中,注解(Annotation)引入始于Java5,用來描述Java代碼的元信息,通常情況下注解不會直接影響代碼的執(zhí)行,盡管有些注解可以用來做到影響代碼執(zhí)行。

注解可以做什么

Java中的注解通常扮演以下角色

  1. 編譯器指令
  2. 構(gòu)建時指令
  3. 運行時指令

其中

  1. Java內(nèi)置了三種編譯器指令,本文后面部分會重點介紹
  2. Java注解可以應(yīng)用在構(gòu)建時,即當你構(gòu)建你的項目時。構(gòu)建過程包括生成源碼,編譯源碼,生成xml文件,打包編譯的源碼和文件到JAR包等。軟件的構(gòu)建通常使用諸如Apache Ant和Maven這種工具自動完成。這些構(gòu)建工具會依照特定的注解掃描Java代碼,然后根據(jù)這些注解生成源碼或文件。
  3. 通常情況下,注解并不會出現(xiàn)在編譯后的代碼中,但是如果想要出現(xiàn)也是可以的。Java支持運行時的注解,使用Java的反射我們可以訪問到這些注解,運行時的注解的目的通常是提供給程序和第三方API一些指令。

注解基礎(chǔ)

一個簡單的Java注解類似與@Entity。其中@的意思是告訴編譯器這是一個注解。而Entity則是注解的名字。通常在文件中,寫法如下

public @interface Entity {
}

注解元素

Java注解可以使用元素來進行設(shè)置一些值,注解中的元素類似于屬性或者參數(shù)。定義包含元素的注解示例代碼

public @interface Entity {
  String tableName();
}

使用包含元素的注解示例代碼

@Entity(tableName = "vehicles")

上述注解的元素名稱為tableName,設(shè)置的值為vehicles。沒有元素的注解不需要使用括號。

如果注解包含多個元素,使用方法如下

@Entity(tableName = "vehicles", primaryKey = "id")

如果注解只有一個元素,通常我們的寫法是這樣的

@InsertNew(value = "yes")

但是這種情況下,當且僅當元素名為value,我們也可以簡寫,即不需要填寫元素名value,效果如下

@InsertNew("yes")

注解使用

注解可以用來修飾代碼中的這些元素

  1. 接口
  2. 方法
  3. 方法參數(shù)
  4. 屬性
  5. 局部變量

一個完整的使用示例如下

@Entity
public class Vehicle {

  @Persistent
  protected String vehicleName = null;


  @Getter
  public String getVehicleName() {
    return this.vehicleName;
  }

  public void setVehicleName(@Optional vehicleName) {
    this.vehicleName = vehicleName;
  }

  public List addVehicleNameToList(List names) {

    @Optional
    List localNames = names;

    if(localNames == null) {
      localNames = new ArrayList();
    }
    localNames.add(getVehicleName());

    return localNames;
  }

}

內(nèi)置的Java注解

Java中有三種內(nèi)置注解,這些注解用來為編譯器提供指令。它們是

  1. @Deprecated
  2. @Override
  3. @SuppressWarnings

@Deprecated

可以用來標記類,方法,屬性。
如果上述三種元素不再使用,使用@Deprecated注解
如果代碼使用了@Deprecated注解的類,方法或?qū)傩?,編譯器會進行警告。

@Deprecated使用很簡單,如下為注解一個棄用的類。

@Deprecated
public class MyComponent {

}


當我們使用@Deprecated注解后,建議配合使用對應(yīng)的@deprecated JavaDoc符號,并解釋說明為什么這個類,方法或?qū)傩员粭売茫呀?jīng)替代方案是什么。

@Deprecated
/**
 @deprecated This class is full of bugs. Use MyNewComponent instead.
*/
public class MyComponent {

}

@Override

@Override注解用來修飾對父類進行重寫的方法。如果一個并非重寫父類的方法使用這個注解,編譯器將提示錯誤。

實際上在子類中重寫父類或接口的方法,@Overide并不是必須的。但是還是建議使用這個注解,在某些情況下,假設(shè)你修改了父類的方法的名字,那么之前重寫的子類方法將不再屬于重寫,如果沒有@Overide,你將不會察覺到這個子類的方法。有了這個注解修飾,編譯器則會提示你這些信息。

使用Override注解的例子

public class MySuperClass {

  public void doTheThing() {
    System.out.println("Do the thing");
  }
}


public class MySubClass extends MySuperClass{

  @Override
  public void doTheThing() {
    System.out.println("Do it differently");
  }
}

@SuppressWarnings

@SuppressWarnings用來抑制編譯器生成警告信息。

可以修飾的元素為類,方法,方法參數(shù),屬性,局部變量

使用場景:當我們一個方法調(diào)用了棄用的方法或者進行不安全的類型轉(zhuǎn)換,編譯器會生成警告。我們可以為這個方法增加

@SuppressWarnings注解,來抑制編譯器生成警告。

注意:使用@SuppressWarnings注解,采用就近原則,比如一個方法出現(xiàn)警告,我們盡量使用@SuppressWarnings注解這個方法,而不是注解方法所在的類。雖然兩個都能抑制編譯器生成警告,但是范圍越小越好,因為范圍大了,不利于我們發(fā)現(xiàn)該類下其他方法的警告信息。

使用示例

@SuppressWarnings
public void methodWithWarning() {

}

創(chuàng)建自己的注解

在Java中,我們可以創(chuàng)建自己的注解,注解和類,接口文件一樣定義在自己的文件里面。如下

@interface MyAnnotation {
  String  value();
  String  name();
  int   age();
  String[] newNames();
}

上述代碼定義了一個叫做MyAnnotation的注解,它有4個元素。再次強調(diào)一下,@interface這個關(guān)鍵字用來告訴java編譯器這是一個注解。

仔細一看,你會發(fā)現(xiàn),注解元素的定義很類似于接口的方法。這些元素有類型和名稱。這些類型可以是

  1. 原始數(shù)據(jù)類型
  2. String
  3. Class
  4. annotation
  5. 枚舉
  6. 一維數(shù)組

如下為應(yīng)用自定義的注解

@MyAnnotation(
  value="123",
  name="Jakob",
  age=37,
  newNames={"Jenkov", "Peterson"}
)
public class MyClass {


}

注意,我們需要為所有的注解元素設(shè)置值,一個都不能少。

注解元素默認值

對于注解中的元素,我們可以為其設(shè)置默認值,使用方法為

@interface MyAnnotation {
  String  value() default "";
  String  name();
  int   age();
  String[] newNames();
}

上述代碼,我們設(shè)置了value元素的默認值為空字符串。當我們在使用時,可以不設(shè)置value的值,即讓value使用空字符串默認值。 使用示例代碼

@MyAnnotation(
  name="Jakob",
  age=37,
  newNames={"Jenkov", "Peterson"}
)
public class MyClass {

}

@Retention

@Retention是用來修飾注解的注解,使用這個注解,我們可以做到

控制注解是否寫入class文件
控制class文件中的注解是否在運行時可見

控制很簡單,使用使用以下三種策略之一即可。

RetentionPolicy.SOURCE 表明注解僅存在源碼之中,不存在.class文件,更不能運行時可見。常見的注解為@Override, @SuppressWarnings。
RetentionPolicy.CLASS 這是默認的注解保留策略。這種策略下,注解將存在與.class文件,但是不能被運行時訪問。通常這種注解策略用來處于一些字節(jié)碼級別的操作。
RetentionPolicy.RUNTIME 這種策略下可以被運行時訪問到。通常情況下,我們都會結(jié)合反射來做一些事情。

@Retention的使用示例

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
  String  value() default "";
}

@Target

使用@Target注解,我們可以設(shè)定自定義注解可以修飾哪些java元素。簡單示例

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})
public @interface MyAnnotation {
  String  value();
}

上述的代碼說明MyAnnotation注解只能修飾方法。

@Target可以選擇的參數(shù)值有如下這些

  1. ElementType.ANNOTATION_TYPE(注:修飾注解)
  2. ElementType.CONSTRUCTOR
  3. ElementType.FIELD
  4. ElementType.LOCAL_VARIABLE
  5. ElementType.METHOD
  6. ElementType.PACKAGE
  7. ElementType.PARAMETER
  8. ElementType.TYPE(注:任何類型,即上面的的類型都可以修飾)

@Inherited

如果你想讓一個類和它的子類都包含某個注解,就可以使用@Inherited來修飾這個注解。

java.lang.annotation.Inherited

@Inherited
public @interface MyAnnotation {

}
1
2
@MyAnnotation
public class MySuperClass { ... }
1
public class MySubClass extends MySuperClass { ... }

上述代碼的大致意思是

1.使用@Inherited修飾注解MyAnnotation
2.使用MyAnnotation注解MySuperClass
3.實現(xiàn)一個類MySubclass繼承自MySuperClass

通過以上幾步,MySubClass也擁有了MyAnnotation注解。

關(guān)于Java中的注解,一些基本的概念就是這些。

以上 就是關(guān)于Java 中的注解資料整理,后續(xù)繼續(xù)補充相關(guān)資料,謝謝大家對本站的支持!

相關(guān)文章

  • 基于Java protected的深入理解

    基于Java protected的深入理解

    本篇文章是對Java protected進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Java使用Zxing二維碼生成的簡單示例

    Java使用Zxing二維碼生成的簡單示例

    ZXing是一個開源的,用Java實現(xiàn)的多種格式的1D/2D條碼圖像處理庫,下面這篇文章主要給大家介紹了關(guān)于Java使用Zxing二維碼生成的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 并行Stream與Spring事務(wù)相遇會發(fā)生什么?

    并行Stream與Spring事務(wù)相遇會發(fā)生什么?

    這篇文章主要介紹了并行Stream與Spring事務(wù)相遇會發(fā)生什么?文章主要解決實戰(zhàn)中的Bug及解決方案和技術(shù)延伸,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 詳解Java打包及上傳到私服務(wù)的方法

    詳解Java打包及上傳到私服務(wù)的方法

    這篇文章主要介紹了Java打包及上傳到私服務(wù)的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-01-01
  • 深度解析SpringBoot內(nèi)嵌Web容器

    深度解析SpringBoot內(nèi)嵌Web容器

    這篇文章主要給大家介紹SpringBoot的內(nèi)嵌Web容器,SpringBoot將Web容器進行了內(nèi)嵌,我們只需要將項目打成一個jar包,就可以運行了,大大省略了開發(fā)成本,那么SpringBoot是怎么實現(xiàn)的呢,我們今天就來詳細介紹
    2023-06-06
  • Java下載文件的四種方式詳細代碼

    Java下載文件的四種方式詳細代碼

    這篇文章介紹了Java下載文件的四種方式,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 使用java代碼實現(xiàn)一個月內(nèi)不再提醒,通用到期的問題

    使用java代碼實現(xiàn)一個月內(nèi)不再提醒,通用到期的問題

    這篇文章主要介紹了使用java代碼實現(xiàn)一個月內(nèi)不再提醒,通用到期的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 基于Java實現(xiàn)空間濾波完整代碼

    基于Java實現(xiàn)空間濾波完整代碼

    空間濾波是一種采用濾波處理的影像增強方法。其理論基礎(chǔ)是空間卷積和空間相關(guān)。這篇文章主要介紹了基于Java的空間濾波代碼實現(xiàn),需要的朋友可以參考下
    2021-08-08
  • mybatis的if判斷不要使用boolean值的說明

    mybatis的if判斷不要使用boolean值的說明

    這篇文章主要介紹了mybatis的if判斷不要使用boolean值的說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 利用Java巧妙解決Excel公式迭代計算

    利用Java巧妙解決Excel公式迭代計算

    迭代計算其實是在?Excel?中,一種公式的循環(huán)引用,那么如何利用Java語言巧妙解決Excel公式迭代計算的問題呢,下面小編就來和大家詳細講講吧
    2023-10-10

最新評論