10條困惑java程序員的地方
如果你是JAVA程序員,是不是經常這樣被困擾?
一,重復的類型申明
User user=new User();
說明:Java是靜態語言,為了這一點,聲明變量的時候必須明確告訴編譯器該變量的類型。Java編譯器就不能智能點嗎?
二,臨時變量
int total=0;
for(int i=0;i<10;i++)
{
total+=i;
}
說明:total和i變量,造成局部代碼臃腫,代碼有更多的狀態,多線程控制非常困難。
三,static對面向對象的沖擊
public class Person {
public static int total=0;
}
說明:static把不屬于對象模板的東西硬生生的塞進去,使得模板不倫不類。
四,不支持高階函數和閉包
public void loan(operate)
{
BufferedReader in = null;
try{
in=new BufferedReader(new FileReader(filename));
operate
}catch(Exception e)
{
e.printStackTrace();
}finally{
in.close();
}
}
說明:不能以函數作為參數,使得Java處理上面類似的需求時,最優雅的實現就是:先申明一個接口,寫多個類實現這個接口中的方法,然后把這個接口作為這個函數的參數。結果便是,類的數量迅速增加,類也變成了只是一個方法的包裝器!
五,switch只支持int和enum類型
switch(name){//java不支持這樣寫
case "zhangshan":...
case "lisi":...
case "wangwu":...
default:...
}
說明:相信有很多Java程序員質疑,Java的switch為什么只支持int和enum類型?
六,synchronized泛濫
public synchronized void getResouce()
{
...
}
說明:Java編程中最難的要數多線程編程,synchronized是很多程序員邁不過的檻!
七,轉義之痛
String path="c:\test\test.java";
String content="hello ,\"Mr Right\"";
說明:轉義,讓優秀的程序員也不得不從流暢的編程中停下來,為編譯器的無能做低級勞動。
八,運算符重載
public class Complex {
private int real;
private int imaginary;
+(Complex complex){
return new Complex(real+complex.real,
imaginary+complex.imaginary);
}
}
說明:運算符重載,多么優美的風景線,Java卻無情的拉上了封條。
九,繁瑣的多重循環
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
...
}
}
說明:大家也許已經習慣了多重循環,但我們為什么要習慣這種笨拙的實現?
十,多余的字符
public String getName()
{
return this.name;
}
說明:()必須嗎?String必須嗎?return必須嗎?.必須嗎?;必須嗎?