首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 註解 與 註釋 深度解析:給機器看 vs 給人看

     編輯:程式設計疑難解答

一句話區別

註釋 給程序員看,編譯器直接忽略;註解 給編譯器/框架/工具看,保留在字節碼甚至運行時,驅動代碼生成、檢查、注入等自動化行為。

三種註釋

語法用途生命周期
// 單行代碼說明、TODO、臨時屏蔽僅源碼
/* 多行 */大段邏輯解釋、版權聲明僅源碼
/** 文檔註釋 */生成 API 文檔 (Javadoc)源碼 → HTML 文檔

註解 三大標準類型

@Retention(RetentionPolicy.SOURCE)   // 僅源碼階段保留 (如 @Override, @SuppressWarnings)
@Retention(RetentionPolicy.CLASS)    // 編譯進 .class,JVM 不加載 (默認)
@Retention(RetentionPolicy.RUNTIME)  // 運行時可通過反射獲取 (框架核心)

實戰場景:Hibernate/JPA 實體映射

@Entity
@Table(name = "users")
public class User {
    @Id @GeneratedValue
    private Long id;

    @Column(name = "username", nullable = false, length = 50)
    private String username;

    @Transient  // 不映射到數據庫
    private String tempToken;
}

Hibernate 啟動時,通過反射掃描實體類上的註解,構建元數據模型,自動生成建表 SQL、CRUD 語句。開發者**聲明式**定義映射關係,框架**自動化**處理樣板代碼。

註解處理器 — 編譯期魔法

  • Lombok:@Data 編譯期自動生成 getter/setter/toString/equals/hashCode。
  • MapStruct:@Mapper 編譯期生成高性能 Bean 映射實現類。
  • Dagger/Hilt:編譯期生成依賴注入代碼,避免運行時反射開銷。

自定義註解範例

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimit {
    int maxRequests() default 100;
    long windowMs() default 60000;
}

// 切面攔截
@Around("@annotation(rateLimit)")
public Object limit(ProceedingJoinPoint pjp, RateLimit rateLimit) {
    // 根據 rateLimit.maxRequests()... 實現限流邏輯
}

總結

註解是**元數據**,將「什麼意思」從邏輯代碼中剝離,交給框架/工具在編譯期/運行時解讀執行。善用註解 = 寫更少樣板代碼 + 讓意圖更清晰 + 享受框架自動化紅利。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved