在平時的編程中注釋一直與我們為伴,但是在Java編程中我們會經常性的使用注解。一字之差,也不知是否會有“失之毫厘差以千里”之說??

一起來看:
### 一、注解:
??首先來看在ITOO Java中使用的注解:
~~~
@Stateless(name = "SystemStudentIdModuleValueBean")
@Remote(SystemStudentIdModuleValueBean.class)
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class SystemStudentIdModuleValueBeanImpl extends BaseBeanImpl implements
SystemStudentIdModuleValueBean {
}
~~~
從本質上說,注解就是一種類型!它可以定義、使用,以及包含有自己的屬性、方法。
先來對注解這個東西進行一下宏觀的了解:
1).注解這個東西主要是給編譯器看的,比如最常見的@override表示這個方法重寫了父類中的方法;
2).大家共同認可的,就**可以使用一個公式來代替,以節省代碼**:這就是注解
3).注解為我們在代碼中添加信息提供了一種形式化的方法,使我們可以在之后的某個時刻**方便的使用這些數據**(通過解析注解來使用這些數據),常見的作用有如下幾種:
○ 生成文檔:這是最常見的,也是Java最早提供的注解,常用的有@see,@param,@return等
○ 跟蹤代碼依賴性,實現替代配置文件的功能。現在的框架基本上都使用了這種配置里減少配置文件的數量。
○ 在編譯時進行格式檢查。如@override放在方法錢前,如果這個方法并不是覆蓋的超類的方法,則會在編譯時被檢查出來。
? 其次,當我們定義了注解,難道直接使用??肯定不是的唄!! ? ?
在使用反射之前必須使用import java.lang.reflect.* 來導入和反射相關的類。
α要得到某一個類或接口的注解信息,可以使用如下代碼:
Annotation annotation = TestAnnotation.class.getAnnotation(MyAnnotation.class);
β要得到全部的注解信息可使用如下語句:
Annotation[] annotations = TestAnnotation.class.getAnnotations();或
Annotation[] annotations = TestAnnotation.class.getDeclaredAnnotations(); ?
γ要得到其它成員的注解,可先得到這個成員,然后再得到相應的注解。如得到myMethod的注解。
Method method = TestAnnotation.class.getMethod("myMethod", null); Annotation annotation = method.getAnnotation(MyAnnotation.class); PS:要想使用反射得到注解信息,這個注解必須使用@Retention(RetentionPolicy.RUNTIME)進行注解。
所以注解是編程給我們提供的一個橋梁,幫我們擺脫繁雜無序的代碼,使我們無限靠近“面向對象”這座城堡,讓我們走向編程世界的更遠方:

### 二、注釋
對于每日相伴的注釋我們應該很熟悉:主要是幫助我們理解某些代碼的或者用來記錄一些信息(比如開發時間、開發人員),在myEclipse中:
? 單行注釋:Ctrl+/ ? : 在行代碼上打上雙斜線。
? 多行注釋:/**/
? .jsp頁面的注釋:<-- 這是要被注釋掉的內容 -->
? .properties頁面注釋:將鍵盤切換到英文狀態,使用#(或者!)進行注釋
所以注釋就像是編程向我們伸出的援助之手,隨時向我們提供幫助:

### 三、總結:
注解和注釋雖然一字之差,卻帶著我們走入兩個不同的世界,一個幫助我們理解(不會對編譯器或者程序造成影響),一個通過對配置文件的封裝幫助我們高效開發:
注解是J2SE5.0提供的一項非常有趣的功能。它不但有趣,而且還非常有用。如即將出臺的EJB3.0規范就是借助于注解實現的。這樣將使EJB3.0在實現起來更簡單,更人性化。還有Hibernate3.0除了使用傳統的方法生成hibernate映射外,也可以使用注解來生成hibernate映射。總之,如果能將注解靈活應用到程序中,將會使你的程序更加簡潔和強大。
到這里,"形似"的注解和注釋就說完了,如果有什么問題,歡迎大家踴躍拍磚。也期待大家的交流和意見哦:
