动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.转:学不会的JAVA,消不了的忧愁.
.Eclipse 3.2 Java开发工具的新特.
.专家为您详解JAVA数据库基本操作.
.程序员生活 J2EE学习者值得研究的.
.IBM 易捷产品免费讲座 (张江).
.Java技巧101applet间通信的替代方.
.关于JDBC检测数据库用户的问题.
.普通字符.
.基础应用:javaweb三层架构配置入.
.剖析事件监听和匿名类.
.创建灵活易扩展的J2EE企业应用程.
.Shark中的ToolAgent用法-JavaCla.
.轻松实现Java用户界面编程.
.使用Socket连接穿越CMWAP代理.
.一步一步用JBuilder5开发EJB(上).
.关于EJB的持久化对象技术分析(1).
.使用技巧:Java实现随机验证码功.
.Java的建造设计模式.
.Applet事件响应.
.Hibernate二级缓存攻略.

JAVA规则中级篇

发表日期:2008-1-5 |



  本文介绍的Java规则的说明分为3个主要级别,中级是平时开发用的比较多的级别,在今后将陆续写出其他的规则。遵守了这些规则可以提高程序的效率、使代码又更好的可读性等。
  (1) 在finally方法里关掉input或者output 资源
  再方法体里面定义了input或者output流的话,需要在finally里面把它关掉。
  以下这几种调用不需要遵守这条规则,因为colse()方法不起作用:)
  java.io.StringWriter java.io.ByteArrayOutputStream java.io.ByteArrayInputStream
  假如再方法返回的时候没有调用close()方法来释放input()和output()的资源的话,会导致一个系统资源泄漏。而且在任何情况下都要确定在返回全调用了close() 方法,包括出现异常的时候。所以需要在finally方法里面加入这个方法。这样就保证了在任何情况下都会关闭资源。
  错误示例:
  public class CIO {
  public void method (java.io.File f) {
  java.io.FileInputStream fis = null;
  try {
  fis = new java.io.FileInputStream (f);
  fis.read ();
  fis.close ();
  } catch (java.io.FileNotFoundException e1) {
  System.out.println("File not found");
  } catch (java.io.IOException e2) {
  System.out.println("I/O Exception");
  }
  // 假如出现异常,这里就不能保证关闭资源。
  }
  }
  修正后的代码:
  public class CIOFixed {
  public void method (java.io.File f) {
  java.io.FileInputStream fis = null;
  try {
  fis = new java.io.FileInputStream (f);
  fis.read ();
  } catch (java.io.FileNotFoundException e1) {
  System.out.println("File not found");
  } catch (java.io.IOException e2) {
  System.out.println("I/O Exception");
  } finally {
  if (fis != null) {
  try {
  fis.close ();
  } catch (java.io.IOException e) {
  System.out.println("I/O Exception");
  }
  }
  }
  }
  }
  
  (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.IOException e) {
  // 错误
  }
  
  正确:
  try {
  System.in.read ();
  } catch (java.io.IOException e) {
  System.out.println("Descriptive error");
  }
  参考:Joshua Bloch: "Effective Java - Programming Language Guide".
  Addison-Wesley, 2001, pp. 187
  
  (4) 不要在if条件里面附值
  假如这样做的话,系统会报告错误。在java的很多条件声明里面用附值是很不明智的,而且系统也会报告错误。很轻易引起异常。遵守这条规者能够使维护简单,避免不一致。
  错误示例:
  if (b = true)
  正确的:
  if (b == true)
  参考:Section 10.4 of http://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'。
  错误示例:public class ABC extends Error
  正确:public class ABC extends Exception
  
  (7)有关"switch"语句里面的"case"问题
  最好在每一个 “case”里都定义一个”return”或者“break”来控制不要走到下面的 “case”里去。假如一个”case”语句在代码的最后没有一个”break”或者”return”句,程序就会走到下一个”case”。假如这个”case”是最后一个的话,那就没什么问题,假如后面还有”case” 的话,看起来就不太安全了。
  错误示例:
  switch (i) {
  case 1:
  x = 10;
  break;
  case 2:
  x = 20;
  default:
  a = 40;
  break;
  正确:
  switch (i) {
  case 1:
  x = 10;
  break;
  case 2: // VIOLATION
  x = 20;
  break;
  default:
  x = 40;
  break;
  
  (8)建议不要使用'System.getenv ()'
  不建议使用'System.getenv ()',这个方法看起来很好用,不过并不是所有的系统都有环境变量的。不用这个方法也可能带来一些不方便。
  错误示例:
  void method (String name) {
  System.getenv (name); // 可以用其他方法来代替
  }
  假如不用这个方法,我们可以用其它的方法来代替。比如:'System.getProperty ()’,'getTypeName ()'等,这也可以找到java的系统属性。
  参考:David Flanagan: "Java in a Nutshell". O'Reilly
  November, 1999: Third Edition, pp.190-192
  
  (9)不要使用’\n’或者'\r'来分行
  这两个标记看来很普遍,非凡是’\n’。我们经常用来作为分行用。但是不同的系统用不同的分行字符,所以这些字符在某些意义上违反了java的平台无关性。
  错误示例:
  System.out.println("Hello\n" + name);
  我们可以用其它的一些方法来代替,比如println(),这个方法在不同的系统平台上都起到相同的作用。后者推荐大家用这个方法:System.getProperty("line.separator")
  参考:David Flanagan: "Java in a Nutshell". O'Reilly,
  November 1999: Third Edition, pp. 191-192
  
  (10) 使所有的内部类"private".
  Java答应一个类包含另外一个类,带是Java byte code没有这个概念。类被编译器解释成package-private类。从更深的程度来说,包含类的任何内部私有对象能被内部类访问的也能被同一个包内的其他类访问。
  错误示例:
  public class INNER {
  class INNER_Class {
  void setValue(int i) {
  _value = i; // 现在包就可以访问了
  }
  }
  private int _value;
  }
  所以需要加上private class INNER_Class
  参考:Statically Scanning Java Code: Finding Security Vulnerabilities.
  John Viega, Gary McGraw, Tom Mutdosch, and Edward W. Felten
  IEEE SOFTWARE September/October 2000
  
  (11)不要使接口序列化
  假如一个字节数组包含了一个被序列化的对象。攻击者就能读到这个对象的内部状态合字段(包括private的)。
  错误示例:
  public interface sample extends java.io.Serializable
上一篇:Java程序编码规范与技巧 人气:375
下一篇:Java应用程序中的按值传递语义以及相关评论 人气:291
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-30 HBcms(宏博cms)内容管理系统 v1.1
2008-8-30 邓西网站帮助系统 v2.3
2008-8-30 破竹CMS v4.0.7.21
2008-8-30 美女写真网图片小偷 v1.5 全站静
2008-8-30 PHP美女写真Cms v1.00
2008-8-30 PHPer.yang情书系统 v1.0
2008-8-30 快乐商城全站源码
2008-8-29 oblog v4.6 build 20080827
2008-8-29 ASBLOG v2.5 bulid 080828
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号