java編程遇到的幾個代碼問題

一、List<PolicyBasicBo> listPolicyBasic = new ArrayList<>();java

List list = new ArrayList();
這是個典型的向下轉型,即多態性的表現.
由於list是一個接口,接口的方法須要被覆寫纔可以直接拿過來使用.數據庫

至關於:Animal a=new Monkey();猴子也是動物的一種。編程

這是用父類的引用指向子類對象。
面向接口編程都是這麼寫的。如:public void test(List list) {
   //do something...
}若是這個方法帶的參數是ArrayList類型的,那麼只有ArrayList的對象才能夠傳過來
而如今是用List作爲參數,就表示只要是List接口的子類對象均可以傳進來,如ArrayList,LinkedList,Vector 。設計模式

List<String> list =  new ArrayList<String>();

編譯時類型是List,運行時類型是ArrayList,而List接口的實現類不僅有ArrayList一個,用一個List類型的引用這是「面向接口編程」,好處有不少,提可是儘可能面向接口編程,這裏只說一個這樣寫的好處:

之後咱們會用到不少不是咱們寫的類,咱們叫第三方類庫,在類庫裏面極可能會返回一個這樣的列表,可是他未必會返給你一個ArrayList,沒準是人家自 己寫的一個實現類都說不許,那麼咱們面向接口編程,不須要了解是什麼實現類,咱們都把它們當List接收過來就行了,咱們就當成List來用。提升程序的 透明性,讓底層的實現對上層使用者封裝。 對底層來講,這種轉換的時間幾乎能夠忽略不計,這個是實現多態的基礎,
若是瞭解工廠方法設計模式,只有這樣才能達到要求,這種作法也是面向對
象程序設計三大特性之一——多態。若是我哪天不用 ArrayList 了,要用
其餘的 LinkedList 了,這樣我只要在變量聲明部分修改就能夠了,下面
的代碼能夠一行不動。

實際上這樣作,在 Java 中還有不少,像 JDBC 中的 Connection、
PreparedStatment、ResultSet 等等,這些都是接口,若是不去研究 JDBC
驅動提供的源代碼,根本就不會知道其具體的實現類是哪個,對於開發人員
來講,只要知道這些接口中的方法,以及該如何使用這些方法就足夠了,不需
要去考慮底層的實現,正由於如此,換一種數據庫只要更改其鏈接驅動和鏈接
字符串就夠了,其餘的根本用不着改。

固然了,若是要使用某個類中的獨有的方法,那隻能使用第二種寫法了。數組

二、if (null != listPolicyBasic && !listPolicyBasic.isEmpty()) {
                PolicyBasicBo policyBasic = listPolicyBasic.get(0);
                policyBo.setPolicyBasic(policyBasic);
            }函數

判斷字符串不爲空,而後執行邏輯,原來是listPolicyBasic.size()>0, IsEmpty函數 返回Boolean值 。工具

1 java中的length屬性是針對數組說的,好比說你聲明瞭一個數組,想知道這個數組的長度則用到了length這個屬性.
2 java中的length()方法是針對字符串String說的,若是想看這個字符串的長度則用到length()這個方法.
3.java中的size()方法是針對泛型集合說的,若是想看這個泛型有多少個元素,就調用此方法來查看!
這個例子來演示這兩個方法和一個屬性的用法
public static void main(String[] args) {
String []list={"ma","cao","yuan"};
String a="macaoyuan";
System.out.println(list.length);
System.out.println(a.length());
List<Object> array=new ArrayList();
array.add(a);
System.out.println(array.size());
}
輸出的值爲:
3
9
1設計

 

三、日誌

@Repository("polResumeDao")
public class PolResumeDaoImpl implements PolResumeDao {
    
    /**
     * 日誌管理工具實例.
     */
    private static final Logger logger = LoggerFactory.getLogger(PolResumeDaoImpl.class);對象


}

final 是本 logger 不能再指向其餘 Logger 對象 , static 修飾的變量是無論建立了new了多少個實例,也只建立一次,節省空間,若是每次都建立Logger的話比較浪費內存, static 是加載即建立實例。使用的時候能夠直接拿來 ,用static修飾既節約空間,效率也好 ;

**.class是將你要加入日誌的類加進入  假如你的 PolResumeDaoImpl 這個類須要加日誌信息就在
private static Logger logger = Logger.getLogger( PolResumeDaoImpl .class); 
這是獲取一個 PolResumeDaoImpl 類的logger,  PolResumeDaoImpl 內定義的日誌信息就可以顯示出來了,
獲得 PolResumeDaoImpl 的Class類型對象,由於Logger.getLogger方法須要傳入Class類型對象,這樣該logger的信息中會詳細體現出是哪一個路徑的哪一個類的日誌。
相關文章
相關標籤/搜索