如果你是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必須嗎?.必須嗎?;必須嗎?
本文摘自: 編程十萬個爲什麼(http://www.bcwhy.com) 詳細出處請參考:http://www.bcwhy.com/thread-1816-1-1.html