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必須嗎?.必須嗎?;必須嗎?


本文摘自: 編程十萬個爲什麼(http://www.bcwhy.com) 詳細出處請參考:http://www.bcwhy.com/thread-1816-1-1.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章