【源碼+項(xiàng)目部署】Java項(xiàng)目實(shí)戰(zhàn)_Java圖書管理系統(tǒng)_Java課程設(shè)計(jì)_Java課設(shè)項(xiàng)目
是不是還有同學(xué)沒有交上作業(yè)吶?這個(gè)項(xiàng)目可以學(xué)習(xí)一下喔——Java圖書管理系統(tǒng)!


聲明自定義注解使用 @interface 關(guān)鍵字(interface 關(guān)鍵字前加 @ 符號(hào))實(shí)現(xiàn)。定義注解與定義接口非常像,如下代碼可定義一個(gè)簡(jiǎn)單形式的注解類型。
// 定義一個(gè)簡(jiǎn)單的注解類型
public @interface Test {
}
上述代碼聲明了一個(gè) Test 注解。默認(rèn)情況下,注解可以在程序的任何地方使用,通常用于修飾類、接口、方法和變量等。
定義注解和定義類相似,注解前面的訪問(wèn)修飾符和類一樣有兩種,分別是公有訪問(wèn)權(quán)限(public)和默認(rèn)訪問(wèn)權(quán)限(默認(rèn)不寫)。一個(gè)源程序文件中可以聲明多個(gè)注解,但只能有一個(gè)是公有訪問(wèn)權(quán)限的注解。且源程序文件命名和公有訪問(wèn)權(quán)限的注解名一致。
不包含任何成員變量的注解稱為標(biāo)記注解,例如上面聲明的 Test 注解以及基本注解中的 @Override 注解都屬于標(biāo)記注解。根據(jù)需要,注解中可以定義成員變量,成員變量以無(wú)形參的方法形式來(lái)聲明,其方法名和返回值定義了該成員變量的名字和類型。代碼如下所示:
public @interface MyTag {
// 定義帶兩個(gè)成員變量的注解
// 注解中的成員變量以方法的形式來(lái)定義
String name();
int age();
}
以上代碼中聲明了一個(gè) MyTag 注解,定義了兩個(gè)成員變量,分別是 name 和 age。成員變量也可以有訪問(wèn)權(quán)限修飾符,但是只能有公有權(quán)限和默認(rèn)權(quán)限。
如果在注解里定義了成員變量,那么使用該注解時(shí)就應(yīng)該為它的成員變量指定值,如下代碼所示。
public class Test {
// 使用帶成員變量的注解時(shí),需要為成員變量賦值
@MyTag(name="xx", age=6)
public void info() {
...
}
...
}
注解中的成員變量也可以有默認(rèn)值,可使用 default 關(guān)鍵字。如下代碼定義了 @MyTag 注解,該注解里包含了 name 和 age 兩個(gè)成員變量。
public @interface MyTag {
// 定義了兩個(gè)成員變量的注解
// 使用default為兩個(gè)成員變量指定初始值
String name() default "C語(yǔ)言中文網(wǎng)";
int age() default 7;
}
如果為注解的成員變量指定了默認(rèn)值,那么使用該注解時(shí)就可以不為這些成員變量賦值,而是直接使用默認(rèn)值。
public class Test {
// 使用帶成員變量的注解
// MyTag注釋的成員變量有默認(rèn)值,所以可以不為它的成員變量賦值
@MyTag
public void info() {
...
}
...
}
當(dāng)然也可以在使用 MyTag 注解時(shí)為成員變量指定值,如果為 MyTag 的成員變量指定了值,則默認(rèn)值不會(huì)起作用。
根據(jù)注解是否包含成員變量,可以分為如下兩類。
標(biāo)記注解:沒有定義成員變量的注解類型被稱為標(biāo)記注解。這種注解僅利用自身的存在與否來(lái)提供信息,如前面介紹的 @Override、@Test 等都是標(biāo)記注解。
元數(shù)據(jù)注解:包含成員變量的注解,因?yàn)樗鼈兛梢越邮芨嗟脑獢?shù)據(jù),所以也被稱為元數(shù)據(jù)注解。