大四Java複習筆記之Java基礎

1、static和finaljava

    學習Java那麼久,好像本身就沒有怎麼用過final,因此對fianl的理解不夠。final不但出如今變量的修飾裏面,還能夠出如今方法和類的修飾。final類不能被繼承,所以final類的成員方法沒有機會被覆蓋,默認都是final的。final方法鎖定方法,子類不能覆蓋修改方法,同時方法會高效。final變量final修飾的成員變量表示常量,只能被賦值一次,賦值後值沒法改變,final是指引用的變量不能不能變,可是引用所指向的對象中的內容能夠變,同時若是是null的final變量能夠賦值一次。數組

2、一個「.java」文件能夠包含多個類安全

    能夠有多個類,不過只能有一個「public」的類,並且名字跟文件名一致。jvm

3、&和&&學習

    &和&&均可以做爲邏輯運算的與的運算符。可是&&會出現短路功能,也就是說若是前面的條件不成立的時候,後面的條件不會執行,例如:(1==2&&j++>1)。線程

    &還能夠做爲位運算,&表示按位與運算(相同位的兩個數字都爲1,則爲1;如有一個不爲1,則爲0)。設計

4、integer和int對象

    int是Java的8種原始數據類型之一。Java爲每一個原始數據提供封裝類,integer是Java爲int提供的封裝類。int的默認值是0,而integer的默認值是null。繼承

5、Java中string的建立索引

    Java中String是一個特殊的包裝類數據有兩種建立形式:

    一、String s = "abc";

    二、String s = new String("abc");    

    第一種先在棧中建立一個對String類的對象引用變量s,而後去查找"abc"是否被保存在字符串常量池中,若是沒有則在棧中建立三個char型的值'a'、'b'、'c',而後在堆中建立一個String對象object,它的值是剛纔在棧中建立的三個char型值組成的數組{'a'、'b'、'c'},接着這個String對象object被存放進字符串常量池,最後將s指向這個對象的地址,若是"abc"已經被保存在字符串常量池中,則在字符串常量池中找到值爲"abc"的對象object,而後將s指向這個對象的地址。

第一種特色:JVM會自動根據棧中數據的實際狀況來決定是否有必要建立新對象。

    第二種能夠分解成兩步一、String object = "abc"; 二、String s = new String(object); 第一步參考第一種建立方式,而第二步因爲"abc"已經被建立並保存到字符串常量池中,所以jvm只會在堆中新建立一個String對象,它的值共享棧中已有的三個char型值。

    第二種特色:一律在堆中建立新對象,而無論其字符串值是否相等,是否有必要建立新對象。

6、error和exception

    error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。 exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。

7、sleep() 和 wait() 

    sleep就是正在執行的線程主動讓出cpu,cpu去執行其餘線程,在sleep指定的時間事後,cpu纔會回到這個線程上繼續往下執行,若是當前線程進入了同步鎖,sleep方法並不會釋放鎖,即便當前線程使用sleep方法讓出了cpu,但其餘被同步鎖擋住了的線程也沒法獲得執行。wait是指在一個已經進入了同步鎖的線程內,讓本身暫時讓出同步鎖,以便其餘正在等待此鎖的線程能夠獲得同步鎖並運行,只有其餘線程調用了notify方法(notify並不釋放鎖,只是告訴調用過wait方法的線程能夠去參與得到鎖的競爭了,但不是立刻獲得鎖,由於鎖還在別人手裏,別人還沒釋放。若是notify方法後面的代碼還有不少,須要這些代碼執行完後纔會釋放鎖,能夠在notfiy方法後增長一個等待和一些代碼,看看效果),調用wait方法的線程就會解除wait狀態和程序能夠再次獲得鎖後繼續向下運行。

8、run()和start()

    在java裏start()是啓動線程,run()是啓動線程後執行的方法。

9、arraylist和vector

    一、同步性

    vector線程安全,arraylist非線程安全。

    備註:對於Vector&ArrayList、Hashtable&HashMap,要記住線程安全的問題,記住Vector與Hashtable是舊的,是java一誕生就提供了的,它們是線程安全的,ArrayList與HashMap是java2時才提供的,它們是線程不安全的。因此,咱們講課時先講老的。

    二、數據增加

    arraylist和vector都會用一個初始的容量大小,當存儲超出大小的時候,vector增加原來的一倍,arraylist增加原來的0.5倍。

10、list和map

    一個是存儲單列數據的集合,另外一個是存儲鍵和值這樣的雙列數據的集合。list是有順序的,而且容許有重複;map中存儲的數據沒有順序,其鍵值不容許存在重複,可是值是容許重複的。

11、arraylist、vector和linklist

    arraylist和vector都是使用數組方式存儲數據。此數組元素數大於實際存儲的數據以便增長和插入元素。它們容許按序號索引元素,可是插入元素也涉及數組元素移動等內存操做,因此索引快和插入慢。vector因爲使用線程安全,因此效率相對arraylist差,其實在新的jvm上它們的效率相差不大。linklist採用雙向鏈表實現存儲,按序號索引數據須要按前向遍歷或者後向遍歷,可是插入數據時,只要記錄先後項數據既可,因此插入速度快。linklist是非線程安全。

12、heap和stack

    Java的內存分爲兩類,一類是棧內存,一類是堆內存。棧內存是指程序進入方法時,會爲這個方法單獨分配一塊私屬存儲空間,用於存儲這個方法內部的局部變量。當這個方法結束時,分配給這個方法的棧也會釋放,這個棧裏面的變量也會隨之釋放。

    堆與棧做用不一樣的內存,通常用於存放不放在當前方法棧中的數據,例如使用new建立的對象都放在堆裏,因此它不會隨這方法的結束也消失。方法中的局部變量使用final修飾後,放在堆中而不是棧中。

相關文章
相關標籤/搜索