|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net网页编程的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。 要深切进修注解,我们就必需能界说本人的注解,并利用注解,在界说本人的注解之前,我们就必需要懂得Java为我们供应的元注解和相干界说注解的语法。
元注解:
元注解的感化就是卖力注解其他注解。Java5.0界说了4个尺度的meta-annotation范例,它们被用来供应对别的annotation范例作申明。Java5.0界说的元注解:
1.@Target,
2.@Retention,
3.@Documented,
4.@Inherited
这些范例和它们所撑持的类在java.lang.annotation包中能够找到。上面我们看一下每一个元注解的感化和响应分参数的利用申明。
@Target:
@Target申明了Annotation所润色的对象局限:Annotation可被用于packages、types(类、接口、列举、Annotation范例)、范例成员(办法、机关办法、成员变量、列举值)、办法参数和当地变量(如轮回变量、catch参数)。在Annotation范例的声明中利用了target可加倍了了其润色的方针。
感化:用于形貌注解的利用局限(即:被形貌的注解能够用在甚么中央)
取值(ElementType)有:
1.CONSTRUCTOR:用于形貌机关器
2.FIELD:用于形貌域
3.LOCAL_VARIABLE:用于形貌部分变量
4.METHOD:用于形貌办法
5.PACKAGE:用于形貌包
6.PARAMETER:用于形貌参数
7.TYPE:用于形貌类、接口(包含注解范例)或enum声明
利用实例:
<br>- @Target(ElementType.TYPE)public@interfaceTable{/***数据表称号注解,默许值为类称号*@return*/publicStringtableName()default"className";}@Target(ElementType.FIELD)public@interfaceNoDBColumn{}
复制代码
<br>
注解Table能够用于注解类、接口(包含注解范例)或enum声明,而注解NoDBColumn仅可用于注解类的成员变量。
@Retention:
@Retention界说了该Annotation被保存的工夫是非:某些Annotation仅呈现在源代码中,而被编译器抛弃;而另外一些却被编译在class文件中;编译在class文件中的Annotation大概会被假造机疏忽,而另外一些在class被装载时将被读取(请注重其实不影响class的实行,由于Annotation与class在利用上是被分别的)。利用这个meta-Annotation能够对Annotation的“性命周期”限定。
感化:暗示必要在甚么级别保留该正文信息,用于形貌注解的性命周期(即:被形貌的注解在甚么局限内无效)
取值(RetentionPoicy)有:
1.SOURCE:在源文件中无效(即源文件保存)
2.CLASS:在class文件中无效(即class保存)
3.RUNTIME:在运转时无效(即运转时保存)
Retentionmeta-annotation范例有独一的value作为成员,它的取值来自java.lang.annotation.RetentionPolicy的列举范例值。详细实比方下:
<br>- @Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public@interfaceColumn{publicStringname()default"fieldName";publicStringsetFuncName()default"setField";publicStringgetFuncName()default"getField";publicbooleandefaultDBValue()defaultfalse;}
复制代码
<br>
Column注解的的RetentionPolicy的属性值是RUTIME,如许注解处置器能够经由过程反射,猎取到该注解的属性值,从而往做一些运转时的逻辑处置
@Documented:
@Documented用于形貌别的范例的annotation应当被作为被标注的程序成员的大众API,因而能够被比方javadoc此类的工具文档化。Documented是一个标志注解,没有成员。
<br>- @Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceColumn{publicStringname()default"fieldName";publicStringsetFuncName()default"setField";publicStringgetFuncName()default"getField";publicbooleandefaultDBValue()defaultfalse;}
复制代码
<br>
@Inherited:
@Inherited元注解是一个标志注解,@Inherited论述了某个被标注的范例是被承继的。假如一个利用了@Inherited润色的annotation范例被用于一个class,则这个annotation将被用于该class的子类。
注重:@Inheritedannotation范例是被标注过的class的子类所承继。类其实不从它所完成的接口承继annotation,办法其实不从它所重载的办法承继annotation。
当@Inheritedannotation范例标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API加强了这类承继性。假如我们利用java.lang.reflect往查询一个@Inheritedannotation范例的annotation时,反射代码反省将睁开事情:反省class和其父类,直到发明指定的annotation范例被发明,大概抵达类承继布局的顶层。
实例代码:
<br>- /****@authorpeida**/@Inheritedpublic@interfaceGreeting{publicenumFontColor{BULE,RED,GREEN};Stringname();FontColorfontColor()defaultFontColor.GREEN;}
复制代码
<br>
自界说注解:
利用@interface自界说注解时,主动承继了java.lang.annotation.Annotation接口,由编译程序主动完成其他细节。在界说注解时,不克不及承继其他的注解或接口。@interface用来声明一个注解,个中的每个办法实践上是声了然一个设置参数。办法的称号就是参数的称号,前往值范例就是参数的范例(前往值范例只能是基础范例、Class、String、enum)。能够经由过程default来声明参数的默许值。
界说注解格局:
public@interface注解名{界说体}
注解参数的可撑持数据范例:
1.一切基础数据范例(int,float,boolean,byte,double,char,long,short)
2.String范例
3.Class范例
4.enum范例
5.Annotation范例
6.以上一切范例的数组
Annotation范例内里的参数该怎样设定:
第一,只能用public或默许(default)这两个会见权润色.比方,Stringvalue();这里把办法设为defaul默许范例;
第二,参数成员只能用基础范例byte,short,char,int,long,float,double,boolean八种基础数据范例和String,Enum,Class,annotations等数据范例,和这一些范例的数组.比方,Stringvalue();这里的参数成员就为String;
第三,假如只要一个参数成员,最好把参数称号设为"value",后加小括号.例:上面的例子FruitName注解就只要一个参数成员。
复杂的自界说注解和利用注解实例:
<br>- packageannotation;importjava.lang.annotation.Documented;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;/***生果称号注解*@authorpeida**/@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceFruitName{Stringvalue()default"";}
复制代码
<br>
<br>- packageannotation;importjava.lang.annotation.Documented;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;/***生果色彩注解*@authorpeida**/@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceFruitColor{/***色彩列举*@authorpeida**/publicenumColor{BULE,RED,GREEN};/***色彩属性*@return*/ColorfruitColor()defaultColor.GREEN;}
复制代码
<br>
<br>- packageannotation;importannotation.FruitColor.Color;publicclassApple{@FruitName("Apple")privateStringappleName;@FruitColor(fruitColor=Color.RED)privateStringappleColor;publicvoidsetAppleColor(StringappleColor){this.appleColor=appleColor;}publicStringgetAppleColor(){returnappleColor;}publicvoidsetAppleName(StringappleName){this.appleName=appleName;}publicStringgetAppleName(){returnappleName;}publicvoiddisplayName(){System.out.println("生果的名字是:苹果");}}
复制代码
<br>
注解元素的默许值:
还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net网页编程的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。 |
|