10條困惑java程序員的地方

quguiliang 14年前發布 | 3K 次閱讀 模擬器 云計算

如果你是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必須嗎?.必須嗎?;必須嗎?

 本文由用戶 quguiliang 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!