仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 740|回复: 13
打印 上一主题 下一主题

[学习教程] JAVA网页编程之深切了解Java:注解(Annotation)自界说注解进门仓酷云

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:22:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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>
  1. @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>
  1. @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>
  1. @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>
  1. /****@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>
  1. 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>
  1. 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>
  1. 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网页编程的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。
沙发
发表于 2015-1-20 22:18:52 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
深爱那片海 该用户已被删除
板凳
发表于 2015-1-25 21:40:39 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
飘灵儿 该用户已被删除
地板
发表于 2015-1-27 20:16:01 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
小女巫 该用户已被删除
5#
发表于 2015-1-28 12:00:37 来自手机 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
小妖女 该用户已被删除
6#
发表于 2015-1-30 15:16:37 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
乐观 该用户已被删除
7#
发表于 2015-2-1 16:18:58 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
蒙在股里 该用户已被删除
8#
发表于 2015-2-1 16:59:15 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
变相怪杰 该用户已被删除
9#
发表于 2015-2-7 09:59:59 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
若天明 该用户已被删除
10#
发表于 2015-2-19 07:54:10 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
灵魂腐蚀 该用户已被删除
11#
发表于 2015-2-26 20:48:27 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
第二个灵魂 该用户已被删除
12#
发表于 2015-3-8 17:30:49 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
海妖 该用户已被删除
13#
发表于 2015-3-13 05:11:58 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
再现理想 该用户已被删除
14#
 楼主| 发表于 2015-3-20 13:42:05 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 23:35

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表