JAVA编程:JAVA划定规矩――中级篇
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解本文先容的JAVA划定规矩的申明分为3个次要级别,中级是平常开辟用的对照多的级别,在从此将连续写出其他的划定规矩。恪守了这些划定规矩能够进步程序的效力、使代码又更好的可读性等。(1)在finally办法里关失落input大概output资本
再办法体内里界说了input大概output流的话,必要在finally内里把它关失落。
以下这几种挪用不必要恪守这条划定规矩,由于colse()办法不起感化:)
java.io.StringWriterjava.io.ByteArrayOutputStreamjava.io.ByteArrayInputStream
假如再办法前往的时分没有挪用close()办法来开释input()和output()的资本的话,会招致一个体系资本泄露。并且在任何情形下都要断定在前往全挪用了close()办法,包含呈现非常的时分。以是必要在finally办法内里到场这个办法。如许就包管了在任何情形下城市封闭资本。
毛病示例:
publicclassCIO{
publicvoidmethod(java.io.Filef){
java.io.FileInputStreamfis=null;
try{
fis=newjava.io.FileInputStream(f);
fis.read();
fis.close();
}catch(java.io.FileNotFoundExceptione1){
System.out.println("Filenotfound");
}catch(java.io.IOExceptione2){
System.out.println("I/OException");
}
//假如呈现非常,这里就不克不及包管封闭资本。
}
}
修改后的代码:
publicclassCIOFixed{
publicvoidmethod(java.io.Filef){
java.io.FileInputStreamfis=null;
try{
fis=newjava.io.FileInputStream(f);
fis.read();
}catch(java.io.FileNotFoundExceptione1){
System.out.println("Filenotfound");
}catch(java.io.IOExceptione2){
System.out.println("I/OException");
}finally{
if(fis!=null){
try{
fis.close();
}catch(java.io.IOExceptione){
System.out.println("I/OException");
}
}
}
}
}
(2)else的注重成绩.
一样平常总以为假如if语句只要一句的话,那末{}就是可要可不要的了。但是假如if有else嵌套的话,就纷歧样了,{}是必须的
毛病示例:
if(i<5)
if(i<2)
i++;
else
i--;
修正后:
if(i<5){
if(i<2)
i++;
}
else{
i--;
}
(3)不要再catch()块里甚么代码也不放
在catch()块内里放进一些毛病处置代码是一个好的习气。可是假如catch()内里有有关javadoc的代码,那也是能够的。
毛病示例:
try{
System.in.read();
}catch(java.io.IOExceptione){
//毛病
}
准确:
try{
System.in.read();
}catch(java.io.IOExceptione){
System.out.println("Descriptiveerror");
}
参考:JoshuaBloch:"EffectiveJava-ProgrammingLanguageGuide".
Addison-Wesley,2001,pp.187
(4)不要在if前提内里附值
假如如许做的话,体系会呈报毛病。在java的良多前提声明内里用附值是很不明智的,并且体系也会呈报毛病。很简单引发非常。恪守这条规者可以使保护复杂,制止纷歧致。
毛病示例:
if(b=true)
准确的:
if(b==true)
参考:Section10.4ofhttp://java.sun.com/docs/codeconv/html/CodeConventions.doc9.html#547
(5)for语句必要轮回体。
假如没有{}的话,for语句只会实行一次!
毛病示例:
for(i=0;i<10;i++);
System.out.println(i);
这里print()只会实行一次。
准确:
for(i=0;i<10;i++){//FIXED
System.out.println(i);
}
(5)不要把办法界说成main().
在java里,main()办法是一个出格的办法。以是在本人界说办法的时分不要界说如许的名字,以避免引发混扰。
(6)不要间接大概直接的界说Error和Throwable的子类
java.lang.Error只在JVM呈现变态的时分掩盖这个办法,假如你界说了间接大概不间接的类承继了类Error,也就指出了这个毛病是JVM外部的,而不是这个类的。以是关于java编译器来讲是不成见的,如许就不克不及反省毛病的非常处置了。
java.lang.Throwable是java.lang.Exception和java.lang.Error的下级类,用户假如象界说非常类的话应当承继java.lang.Exception。
毛病示例:publicclassABCextendsError
准确:publicclassABCextendsException
(7)有关"switch"语句内里的"case"成绩
最幸亏每个“case”里都界说一个”return”大概“break”来把持不要走到上面的“case”里往。假如一个”case”语句在代码的最初没有一个”break”大概”return”句,程序就会走到下一个”case”。假如这个”case”是最初一个的话,那就没甚么成绩,假如前面另有”case”的话,看起来就不太平安了。
毛病示例:
switch(i){
case1:
x=10;
break;
case2:
x=20;
default:
a=40;
break;
准确:
switch(i){
case1:
x=10;
break;
case2://VIOLATION
x=20;
break;
default:
x=40;
break;
(8)倡议不要利用System.getenv()
不倡议利用System.getenv(),这个办法看起来很好用,不外并非一切的体系都有情况变量的。不必这个办法也大概带来一些不便利。
毛病示例:
voidmethod(Stringname){
System.getenv(name);//能够用其他办法来取代
}
假如不必这个办法,我们能够用别的的办法来取代。好比:System.getProperty()’,getTypeName()等,这也能够找到java的体系属性。
参考:DavidFlanagan:"JavainaNutshell".OReilly
November,1999:ThirdEdition,pp.190-192
(9)不要利用’
’大概来分行
这两个标志看来很广泛,出格是’
’。我们常常用来作为分行用。可是分歧的体系用分歧的分行字符,以是这些字符在某些意义上违反了java的平台有关性。
毛病示例:
System.out.println("Hello
"+name);
我们能够用别的的一些办法来取代,好比println(),这个办法在分歧的体系平台上都起到不异的感化。后者保举人人用这个办法:System.getProperty("line.separator")
参考:DavidFlanagan:"JavainaNutshell".OReilly,
November1999:ThirdEdition,pp.191-192
(10)使一切的外部类"private".
Java同意一个类包括别的一个类,带是Javabytecode没有这个观点。类被编译器注释成package-private类。从更深的水平来讲,包括类的任何外部公有对象能被外部类会见的也能被统一个包内的其他类会见。
毛病示例:
publicclassINNER{
classINNER_Class{
voidsetValue(inti){
_value=i;//如今包就能够会见了
}
}
privateint_value;
}
以是必要加上privateclassINNER_Class
参考:StaticallyScanningJavaCode:FindingSecurityVulnerabilities.
JohnViega,GaryMcGraw,TomMutdosch,andEdwardW.Felten
IEEESOFTWARESeptember/October2000
(11)不要使接口序列化
假如一个字节数组包括了一个被序列化的对象。打击者就可以读到这个对象的外部形态合字段(包含private的)。
毛病示例:
publicinterfacesampleextendsjava.io.Serializable
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 是一种使网页(Web Page)产生生动活泼画面的语言 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 是一种将安全性(Security)列为第一优先考虑的语言 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
页:
[1]
2