本文介绍的JAVA规则的说明分为个主要级别本篇抛弃了平时开发中很少遇到的情况那些用得比较少的以后再高级篇里面出现并有六个有用的国际软件开发重要注意的有关String的问题遵守了这些规则可以提高程序的效率使代码又更好的可读性等
() 如果有JDBC连接没有关掉的话需要在finally方法中关掉
如果数据库连接失败或者是没有释放连接看上去无关紧要但是其他的用户就需要用更长的时间等待连接这样数据库利用效率就会下降确保你的代码在任何情况下包括出错或者程序异常终止的情况下都释放数据库连接在finally方法中关掉连接就可以确保这一点
错误示例
try {
Statement stmt = concreateStatement();
} catch(SQLException e) {
eprintStackTrace();
}
正确示例
try {
Statement stmt = concreateStatement();
} finally {
if (con != null && !conisClosed()) {
conclose();
}
}
() 尽量避免使用Threadresume () Threadstop () Threadsuspend ()和 RuntimerunFinalizersOnExit () 方法
这些方法在平时的开发或者是教科书里面也有用到过但是这些方法会导致四锁的倾向一下有充足的资料来说明为什么不建议用上述方法
参考javalangThread in the JDK API documentation
Paul Hyde: Java Thread Programming
Sams ISBN: pp
() 在表示长整常量的时候用L来代替l
因为l很容易和混一起
错误示例
long temp = l;
正确示例
long temp = L;
参考Ken Arnold James Gosling: The Java Programming Language Second EditionAddison Wesley pp
() 最好在jsp开头写一条注释
在 jsp文件头上面写一条注释这样可以帮助别人来理解你的代码这条规则不仅适用于jsp更是用于任何开发的文档
正确示例<% JSP comment %>
()明确的初始化一个构造类里面的所有的字段
因为没有初始化的字段会是一个潜在的bug所以最好初始化类里面的所有的字段特别是静态的字段最好在一开始就分配一个初始值
错误示例
public class CSI {
public CSI () {
this ();
k = ;
}
public CSI (int val) {
j = val;
}
private int i = ;
private int j;
private int k;
}
正确示例
public class CSIFixed {
public CSIFixed () {
this ();
}
public CSIFixed (int val) {
j = val;
k = ;
}
private int i = ;
private int j;
private int k;
}
参考
() 国际化开发建议逻辑操作符不要再一个单个的字符的前面或者后面
一个单个字符的前后不要用逻辑操作符如果代码要在一个国家环境中运行的话我们可以使用字符比较方法这些方法使用统一字符比较标准来定义字符的属性的
错误示例public class CLO {
public boolean isLetter (char ch) {
boolean _isLetter = ( ch >= a && ch <= z) //错误
|| (ch >= A && ch <= Z);
return _isLetter;
}
}
正确示例
public class CLOFixed {
public boolean isLetter (char ch) {
boolean _isLetter = CharacterisLetter(ch);
return _isLetter;
}
}
参考
更多的字符比较方法请参考
() 国际化开发建议不要对日期对象使用DatetoString ()
不要使用DatetoString ()方法日期格式对于地区和语言不同的国家来说是不一样的务必不要使用
错误示例DateFormat类提供了一个预定义的格式类型来指定本地的格式
public void printToday () {
Date today = new Date ();
String todayStr = todaytoString ();
Systemoutprintln (todayStr);
}
正确示例
public void printToday () {
Locale currentLocale = LocalegetDefault ();
DateFormat dateFormatter = DateFormatgetDateInstance (
DateFormatDEFAULT currentLocale);
Date today = new Date ();
String todayStr = dateFormatterformat (today);
Systemoutprintln (todayStr);
}
参考
l
() 国际化开发建议不要对数字变量使用toString ()方法
在全球化的开发中不要对数字变量使用toString ()方法对于javalangNumber的任何子类都适用包括BigDecimal BigInteger Byte Double Float Integer Long and Short对于这样的情况java里也与定义了NumberFormat方法来格式化
错误示例
public class NTS {
public void method (Double amount) {
String amountStr = amounttoString ();
Systemoutprintln (amountStr);
}
}
正确示例
public class NTSFixed {
public void method (Double amount) {
Locale currentLocale = LocalegetDefault ();
NumberFormat numberFormatter =
NumberFormatgetNumberInstance (currentLocale);
String amountStr = numberFormatterformat (amount); //
Systemoutprintln (amountStr + + currentLocaletoString ());
}
}
参考
tml
() 国际化开发建议:不要使用Stringequals ()方法
建议不要使用Stringequals ()方法因为在统一字符比较标准中不一定按照相关的顺序来比较Collator提供的预定义整理规则来排序stringCollator类调用getInstance ()方法一般来说可以为默认的本地创建一个Collator例如Collator myCollator = CollatorgetInstance ();创建Collator的时候你也可以指定一个特殊的locale例如Collator myFrenchCollator = CollatorgetInstance (LocaleFRENCH);然后就可以调用pare ()来执行一个本地的字符比较pare (ss);从这里可以了解更多的有关Collator类的信息tml
错误示例
public class SE {
public boolean compstr (String s String s) {
boolean b = (sequals (s));
return b;
}
}
正确示例
public class SEFixed {
public boolean compstr (String s String s) {
Collator myCollator = CollatorgetInstance ();
boolean b = (pare(ss) == );
return b;
}
}
参考
() 国际化开发建议不要使用StringTokenizer()方法
错误示例StringTokenizer st = new StringTokenizer(str);
可以从这里得到更多的信息
参考
() 国际化开发建议不要使用TimetoString ()方法
因为时间的格式各个国家也不一样如果你使用日期格式类你的应用就能够在世界上各个地方正确的显示时间和日期了首先用getTimeInstance ()方法创建一个formatter然后调用format ()方法
错误示例
public class TTS {
public void printTime (Time t) {
String timeStr = ttoString ();
Systemoutprintln (timeStr);
}
}
正确示例
import javasqlTime;
import javatextDateFormat;
import javautilLocale;
public class TTSFixed {
public void printTime (Time t) {
DateFormat timeFormatter = DateFormatgetTimeInstance(
DateFormatDEFAULT LocalegetDefault ());
String timeStr = timeFormatterformat(t);
Systemoutprintln (timeStr);