您好,登錄后才能下訂單哦!
本文介紹的Java規(guī)則的說明分為3個主要級別,中級是平時開發(fā)用的比較多的級別,在今后將陸續(xù)寫出其他的規(guī)則。遵守了這些規(guī)則可以提高程序的效率、使代碼又更好的可讀性等。
方法體里面定義了input或者output流的話,需要在finally里面把它關(guān)掉。以下這幾種調(diào)用不需要遵守這條規(guī)則,因為colse()方法不起作用:
java.io.StringWriter
java.io.ByteArrayOutputStream
java.io.ByteArrayInputStream
如果再方法返回的時候沒有調(diào)用close()方法來釋放input()和output()的資源的話,會導致一個系統(tǒng)資源泄漏。而且在任何情況下都要確定在返回全調(diào)用了close()方法,包括出現(xiàn)異常的時候。所以需要在finally方法里面加入這個方法。這樣就保證了在任何情況下都會關(guān)閉資源。
錯誤示例:
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");
}
// 如果出現(xiàn)異常,這里就不能保證關(guān)閉資源。
}
}
修正后的代碼:
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");
}
}
}
}
}
一般總認為如果if語句只有一句的話,那么{}就是可要可不要的了。可是如果if有else嵌套的話,就不一樣了,{}是必需的
錯誤示例:
if (i < 5)
if (i < 2)
i++; else
i--;
修改后:
if (i < 5)
{
if (i < 2)
i++;
} else
{
i--;
}
在catch()塊里面放入一些錯誤處理代碼是一個好的習慣。但是如果catch()里面有有關(guān)javadoc 的代碼,那也是可以的。
錯誤示例:
try {
System.in.read ();
}
catch (java.io.IOException e)
{
// 錯誤
}
正確:
try {
System.in.read ();
}
catch (java.io.IOException e)
{
System.out.println("Descriptive error");
}
如果這樣做的話,系統(tǒng)會報告錯誤。在java的很多條件聲明里面用附值是很不明智的,而且系統(tǒng)也會報告錯誤。很容易引起異常。遵守這條規(guī)者能夠使維護簡單,避免不一致。
錯誤示例:
if (b = true)
正確的:
if (b == true)
如果沒有{}的話,for語句只會執(zhí)行一次!錯誤示例:
for (i = 0; i < 10; i++);
System.out.println (i);
這里print() 只會執(zhí)行一次。正確:
for (i = 0; i < 10; i++)
{
// FIXED
System.out.println (i);
}
在java里,main()方法是一個特別的方法。所以在自己定義方法的時候不要定義這樣的名字,以免引起混擾。
java.lang.Error
只在JVM出現(xiàn)反常的時候覆蓋這個方法,如果你定義了直接或者不直接的類繼承了類'Error',也就指出了這個錯誤是JVM內(nèi)部的,而不是這個類的。所以對于java編譯器來說是不可見的,這樣就不能檢查錯誤的異常處理了。
java.lang.Throwable'是'java.lang.Exception
和java.lang.Error
的上級類,用戶如果象定義異常類的話應(yīng)該繼承java.lang.Exception
。
錯誤示例:
public class ABC extends Error
正確:
public class ABC extends Exception
最好在每一個 “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;
不建議使用'System.getenv()',這個方法看起來很好用,不過并不是所有的系統(tǒng)都有環(huán)境變量的。不用這個方法也可能帶來一些不方便。
錯誤示例:
void method (String name)
{
System.getenv (name);
// 可以用其他方法來代替
}
如果不用這個方法,我們可以用其它的方法來代替。比如:'System.getProperty()’,'getTypeName ()'等,這也可以找到j(luò)ava的系統(tǒng)屬性。
這兩個標記看來很普遍,特別是’\n’。我們經(jīng)常用來作為分行用。但是不同的系統(tǒng)用不同的分行字符,所以這些字符在某些意義上違背了java的平臺無關(guān)性。
錯誤示例:
System.out.println("Hello\n" + name);
我們可以用其它的一些方法來代替,比如println(),這個方法在不同的系統(tǒng)平臺上都起到相同的作用。后者推薦大家用這個方法:
System.getProperty("line.separator")
Java允許一個類包含另外一個類,帶是Java byte code沒有這個概念。類被編譯器解釋成package-private類。從更深的程度來說,包含類的任何內(nèi)部私有對象能被內(nèi)部類訪問的也能被同一個包內(nèi)的其他類訪問。
錯誤示例:
public class INNER
{
class INNER_Class
{
void setValue(int i)
{
_value = i;
// 現(xiàn)在包就可以訪問了
}
}
private int _value;
}
所以需要加上private class INNER_Class
如果一個字節(jié)數(shù)組包含了一個被序列化的對象。***者就能讀到這個對象的內(nèi)部狀態(tài)合字段(包括private的)。
錯誤示例:
public interface sample extends
java.io.Serializable
愛碼仕i:專注于Java開發(fā)技術(shù)的研究與知識分享!
————END————
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。