仓酷云

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

[学习教程] JAVA网页编程之Annotations中文翻译

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

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

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

x
对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net也不过3,4本书足以,这就是区别。中文
BYme

很多API都必要必定数目的榜样编码。比方,为了写一个JAX-RPCweb服务,你必需供应一对接口和完成组合。假如一个被远程会见的程序被正文标识所粉饰,那末这个模板就能够使用工具来主动天生。



另有一些APIs必要分外文件(sidefiles)和程序一同并行来保持。比方,JavaBean必要一个BeanInfo类和该Bean一同并行保持,而企业级JavaBean(EJB)则必要一个设置形貌符。假如在分外文件中的信息以程序正文的情势保留在程序自己中,那将加倍便当而且使毛病偏向更少。



Java平台已具有了出格的正文机制。比方transient润色是一个出格的正文标识:该地区应当被一连子体系疏忽。而@deprecated标识是一种特别正文标识:办法不该该再被利用。到了5.0版本中,该平台具有一个多目标的工具就是同意你界说并利用你本人的正文范例。这类工具包含声明正文范例的语法,正文声明的语法,读取正文的APIs,暗示正文的类文件和一个正文处置工具。



正文不间接影响程序的语义,可是它们影响工具和库处置该程序的办法,如许就可以够转已往影响运转时程序的语义。正文从源文件,类文件中被读取,大概在运转时反应出来。



典范的使用程序历来不用界说一个正文范例,但如许做也不难。正文范例声明于一般的接口(interface)声明类似。在关头字interface前加个@标记。每个办法声明界说一个正文范例的元素。办法声明不用有参数或throws语句。前往值被限定为原始的String,Class,enums,annotations和以上范例array。办法能够由缺省值。这是一个正文范例声明的例子:



/**

*DescribestheRequest-For-Enhancement(RFE)thatled

*tothepresenceoftheannotatedAPIelement.

*/

public@interfaceRequestForEnhancement{

intid();

Stringsynopsis();

Stringengineer()default"[unassigned]";

Stringdate();default"[unimplemented]";

}





一旦一个正文范例被界说,你能够用它往正文声明。一个正文是一个特别品种的润色成份,可以用在别的润色成份(比方:public,static,大概final)可以利用的任何中央。依据协议,凝视应先于别的润色成份。正文由一个at标记@随着正文范例和括号括起来的元素值对列表。这些值必需是编译时的常量。这里有一个带有正文的对应上述正文范例声明的办法声明:







@RequestForEnhancement(

id=2868724,

synopsis="Enabletime-travel",

engineer="Mr.Peabody",

date="4/1/3007"

)

publicstaticvoidtravelThroughTime(Datedestination){...}

一个不带元素正文范例被界说为一个marker正文范例,比方:



/**

*IndicatesthatthespecificationoftheannotatedAPIelement

*ispreliminaryandsubjecttochange.

*/

public@interfacePreliminary{}

在marker正文中省略括号是能够的,好比:



@PreliminarypublicclassTimeTravel{...}



在正文中带有一个独自的元素,这个元素应当被定名为value,象以下:



/**

*AssociatesacopyrightnoticewiththeannotatedAPIelement.

*/

public@interfaceCopyright{

Stringvalue();

}

在一个元素名为value的单位素正文中,省略元素名和=号是同意的,比方:



@Copyright("2002YoyodynePropulsionSystems")

publicclassOscillationOverthruster{...}





为了把一切的接洽起来,我们将创建一个复杂的基于正文的测试框架。起首我们必要一个marker正文范例来指出一个办法是一个测试办法,而且应当被测试工具来实行:



importjava.lang.annotation.*;





/**

*Indicatesthattheannotatedmethodisatestmethod.

*Thisannotationshouldbeusedonlyonparameterlessstaticmethods.

*/

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public@interfaceTest{}

注重这个正文范例声明是自正文的。如许的正文被叫做meta-annotations。第一个(@Retention(RetentionPolicy.RUNTIME))指出带有这类范例的正文被假造机保存,因而它们可以在运转时反应出来。第二个(@Target(ElementType.METHOD)指出这个正文范例只可以正文办法声明。

这有一个示例程序,其办法中的一些由上述接口来正文:





publicclassFoo{

@Testpublicstaticvoidm1(){}

publicstaticvoidm2(){}

@Testpublicstaticvoidm3(){

thrownewRuntimeException("Boom");

}

publicstaticvoidm4(){}

@Testpublicstaticvoidm5(){}

publicstaticvoidm6(){}

@Testpublicstaticvoidm7(){

thrownewRuntimeException("Crash");

}

publicstaticvoidm8(){}

}





这是测试工具:





importjava.lang.reflect.*;





publicclassRunTests{

publicstaticvoidmain(String[]args)throwsException{

intpassed=0,failed=0;

for(Methodm:Class.forName(args[0]).getMethods()){

if(m.isAnnotationPresent(Test.class)){

try{

m.invoke(null);

passed++;

}catch(Throwableex){

System.out.printf("Test%sfailed:%s%n",m,ex.getCause());

failed++;

}

}

}

System.out.printf("Passed:%d,Failed%d%n",passed,failed);

}

}





这个工具用一个类名作为命令行参数而且反复一切的定名类中试图挪用每个用Test正文范例(下面界说的)正文的办法的办法。这个映照行列来找出是不是一个办法有一个被用绿色夸大的Test正文。假如测试办法启动抛出一个非常,测试则被以为已失利。而且一个失利呈报被打印出来。最初。一个择要被打印出来显现经由过程和失利的测试的数目。这是在Foo程序上运转这个测试工具的情形:



$javaRunTestsFoo

TestpublicstaticvoidFoo.m3()failed:java.lang.RuntimeException:Boom

TestpublicstaticvoidFoo.m7()failed:java.lang.RuntimeException:Crash

Passed:2,Failed2





这个小的测试工具树模了正文的功能,也能够被轻松扩大来克制它的限定。

到时我们不用学struts,不用学spring,不用学Hibernate,只要能把jsf学会了,完全可以替代所有的框架,包括AJAX,都知道AJAX并不是新技术,虽说我没深入学习jsf但我认为jsf应该已经能通过其它技术替代AJAX,实现无缝刷新。
第二个灵魂 该用户已被删除
沙发
发表于 2015-1-19 12:56:33 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
深爱那片海 该用户已被删除
板凳
发表于 2015-1-24 12:39:59 来自手机 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
若天明 该用户已被删除
地板
发表于 2015-1-31 05:55:18 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
海妖 该用户已被删除
5#
发表于 2015-2-1 23:36:20 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
若相依 该用户已被删除
6#
发表于 2015-2-3 12:27:45 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
小女巫 该用户已被删除
7#
发表于 2015-2-8 23:16:51 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
飘飘悠悠 该用户已被删除
8#
发表于 2015-2-16 22:30:38 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
9#
发表于 2015-3-5 11:06:37 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
蒙在股里 该用户已被删除
10#
发表于 2015-3-10 21:59:47 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
飘灵儿 该用户已被删除
11#
发表于 2015-3-17 11:08:23 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
再现理想 该用户已被删除
12#
发表于 2015-3-24 08:06:32 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 03:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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