|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用java开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。
您可曾想过像Checkstyle或FindBugs如许的工具怎样实行静态代码剖析吗,大概像NetBeans或Eclipse如许的集成开辟情况(IntegratedDevelopmentEnvironmentsIDE)怎样实行疾速代码修复或查找在代码中声明的字段的完整援用吗?在很多情形下,IDE具有本人的API来剖析源码并天生尺度树布局,称为笼统语法树(AbstractSyntaxTreeAST)或“剖析树”,此树可用于对源码元素的进一步剖析。好动静是,借助于在Java中作为JavaStandardEdition6刊行版的一部分引进的三个新API,如今能够完成上述义务和其他更多义务。大概与必要实行源码剖析的Java使用程序开辟职员相干的API有JavaCompilerAPI(JSR199)、可拔出注解处置(PluggableAnnotationProcessing)API(JSR269)和CompilerTreeAPI。
在本文中,我们切磋了个中每一个API的功效,并持续开辟一个复杂的演示使用程序,来在作为输出提供的一套源码文件上考证特定的Java编码划定规矩。此有用程序还显现了编码背规动静和作为输入的背规源码的地位。思索一个复杂的Java类,它掩盖Object类的equals()办法。要考证的编码划定规矩是完成equals()办法的每一个类也应当掩盖具有符合署名的hashcode()办法。您能够看到上面的TestClass类没有界说hashcode()办法,即便它具有equals()办法。
publicclassTestClassimplementsSerializable{
intnum;
@Override
publicbooleanequals(Objectobj){
if(this==obj)
returntrue;
if((obj==null)||(obj.getClass()!=this.getClass()))
returnfalse;
TestClasstest=(TestClass)obj;
returnnum==test.num;
}
}
让我们持续借助这三个API将此类作为构建历程的一部分举行剖析。
从代码中挪用编译器:JavaCompilerAPI
我们全体利用javac命令行工具来将Java源文件编译为类文件。那末我们为何必要API来编译Java文件呢?好的,谜底极为复杂:正如称号所示,这个新的尺度API告知我们从本人的Java使用程序中挪用编译器;好比,能够经由过程编程体例与编译器交互,从而举行使用程序级别服务的编译部分。此API的一些典范利用以下。
CompilerAPI匡助使用服务器最小化部署使用程序的工夫,比方,制止了利用内部编译器来编译从JSP页面中天生的servlet源码的开支
IDE等开辟职员工具和代码剖析器能够从编纂器或构建工具中挪用编译器,从而明显下降编译工夫。
JavaCompiler类包装在javax.tools包中。此包的ToolProvider类供应了一个名为getSystemJavaCompiler()的办法,此办法前往某个完成了JavaCompiler接口的类的实例。此编译器实例可用于创立一个将实行实践编译的编译义务。然后,要编译的Java源文件将传送给此编译义务。为此,编译器API供应了一个名为JavaFileManager的文件办理器笼统,它同意从各类来历中检索Java文件,好比从文件体系、数据库、内存等。在此示例中,我们利用StandardFileManager,一个基于java.io.File的文件办理器。此尺度文件办理器能够经由过程挪用JavaCompiler的getStandardFileManager()办法来取得。上述步骤的代码段以下所示:
//Getaninstanceofjavacompiler
JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();
//Getanewinstanceofthestandardfilemanagerimplementation
StandardJavaFileManagerfileManager=compiler.
getStandardFileManager(null,null,null);
//Getthelistofjavafileobjects,inthiscasewehaveonly
//onefile,TestClass.java
Iterable<?extendsJavaFileObject>compilationUnits1=
fileManager.getJavaFileObjectsFromFiles("TestClass.java");
<p>
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看NetBeans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。 |
|