.java
文件 -> 編譯 -> .class
字節碼文件 -> 放到jvm虛擬機裏解釋執行)把一個對象私有化,同時提供一些能夠被外界訪問的屬性的方法。java
程序中定義的引用變量所指向的具體類型和經過該引用變量出發的方法調用在編程時並不肯定,而是在程序運行期間才肯定,即一個引用變量到底會指向哪一個類的實例對象。該引用變量發出的方法調用究竟是哪一個類中實現的方法,必須在由程序運行期間才能決定。編程
在java中有兩種形式能夠實現多態:繼承(多個子類對同一方法的重寫)和接口(實現接口並覆蓋接口中同一方法)。安全
static
、final
變量,不能有其餘變量,而抽象類中則不必定。extends
關鍵字擴展多個接口。public
,抽象方法能夠有public
、protected
和default
這些修飾符(抽象方法就是爲了被重寫因此不能使用private關鍵字修飾)。注:在jdk8中,接口也能夠定義靜態方法,能夠直接用接口名調用,實現類和實現是不能夠調用的。若是同時出現兩個接口,接口中定義了同樣的默認方法,則必須重寫,否則會報錯。網絡
public
、private
、static
等修飾符所修飾,而局部變量不能被訪問控制修飾符及static
所修飾;可是,成員變量和局部變量都能被final所修飾。static
修飾的,那麼這個成員變量是屬於類的,若是沒有使用static
修飾,這個成員變量是屬於實例的。而對象存在與對內存,局部變量則存在於棧內存。final
修飾的成員變量必須顯式地賦值),而局部變量則不會自動賦值。hashCode()
的做用是獲取哈希碼,也成爲散列碼,它其實是一個int
整數。這個哈希碼的做用是肯定該對象在哈希表中的索引位置。hashCode()
定義在JDK的Object
對象中,這就意味着java中全部類的對象都包含該函數。多線程
散列表存儲的鍵值對(key-value),特色是:能根據「key」快速檢索出對應的「value」。這其中就利用到了散列碼。併發
當你把對象加入HashSet
時,HashSet
會先計算對象的hashcode
值來判斷對象加入的位置,同時也會與其餘已經加入的對象的hashcode
值做比較,若是沒有相符的hashcode
,HashSet
會假設對象沒有重複出現。可是若是發現有相同hashcode
值的對象,這時會調用equals()
方法來檢查hashcode
相等的對象是否真的相同。若是二者相同,HashSet
就不會讓其加入操做成功。若是不一樣的話,就會從新散列到其餘位置。這樣咱們就大大減小了equals
的次數,相應就大大提升了執行速度。框架
經過咱們能夠看出:hashCode()
的做用就是獲取哈希碼,也稱爲散列碼;它其實是返回一個int整數。這個哈希碼的做用是肯定該對象在哈希表中的索引位置。hashCode()
在散列表中才有用,在其它狀況下沒用。在散列表中hashCode()
的做用是獲取對象的散列碼,進而肯定該對象在散列表中的位置。異步
hashCode
必定也是相同的equals
方法都返回true
hashCode
值,它們也不必定是相等的hashCode()
的默認行爲是對堆上的對象產生獨特值。若是沒有重寫 hashCode()
,則該類的兩個對象不管如何都不會相等(即便這兩個對象指向相同的數據)狀態名稱 | 說明 |
---|---|
NEW | 初始狀態,線程被構建,可是尚未調用start()方法 |
RUNNABLE | 運行狀態,Java縣城將操做系統中的就緒和運行兩種狀態籠統地稱做「運行中」 |
BLOCKED | 阻塞狀態,表示線程阻塞於鎖 |
WAITING | 等待狀態,表示線程進入等待狀態,進入該狀態表示但錢縣城須要等待其餘線程作出一些特定動做(通知或中斷) |
TIME_WAITING | 超時等待狀態,該狀態不一樣於WAITING,它是能夠在指定的時間自行返回 |
TERMINATED | 終止狀態,表示當前縣城已經執行完畢 |
在 Java 中,全部的異常都有一個共同的祖先java.lang包中的 Throwable類。Throwable: 有兩個重要的子類:Exception(異常) 和 Error(錯誤) ,兩者都是 Java 異常處理的重要子類,各自都包含大量子類。jvm
Error(錯誤):是程序沒法處理的錯誤,表示運行應用程序中較嚴重問題。大多數錯誤與代碼編寫者執行的操做無關,而表示代碼運行時 JVM(Java 虛擬機)出現的問題。例如,Java虛擬機運行錯誤(Virtual MachineError),當 JVM 再也不有繼續執行操做所需的內存資源時,將出現 OutOfMemoryError。這些異常發生時,Java虛擬機(JVM)通常會選擇線程終止。函數
這些錯誤表示故障發生於虛擬機自身、或者發生在虛擬機試圖執行應用時,如Java虛擬機運行錯誤(Virtual MachineError)、類定義錯誤(NoClassDefFoundError)等。這些錯誤是不可查的,由於它們在應用程序的控制和處理能力之 外,並且絕大多數是程序運行時不容許出現的情況。對於設計合理的應用程序來講,即便確實發生了錯誤,本質上也不該該試圖去處理它所引發的異常情況。在 Java中,錯誤經過Error的子類描述。
Exception(異常):是程序自己能夠處理的異常。Exception 類有一個重要的子類RuntimeException。RuntimeException 異常由Java虛擬機拋出。NullPointerException(要訪問的變量沒有引用任何對象時,拋出該異常)、ArithmeticException(算術運算異常,一個整數除以0時,拋出該異常)和 ArrayIndexOutOfBoundsException(下標越界異常)。
注意:異常和錯誤的區別:異常能被程序自己能夠處理,錯誤是沒法處理。
在一下4種特殊狀況下,finally 塊不會被執行
System.exit(int)
已退出程序。exit
是帶參函數;若該語句在異常語句以後,finally 會執行關於返回值
若是try 語句裏有return,返回的是try 語句塊中變量值。詳細執行過程以下:
Java IO流共涉及40多個類,這些類看上去很雜亂,但實際上頗有規則,並且彼此之間存在很是緊密的聯繫,Java IO流的40多個類都是從以下4個抽象類基類中派生出來的。
按操做方式分類結構圖:
按操做對象分類結構圖:
Socket
和 ServerSocket
相對應的 SocketChannel
和 ServerSocketChannel
兩種不一樣的套接字通道實現,兩種通道都支持阻塞和非阻塞兩種模式。阻塞模式使用就像傳統中的支持同樣,比較簡單,可是性能和可靠性都很差;非阻塞模式正好與之相反。對於低負載、低併發的應用程序,可使用同步阻塞I/O來提高開發速率和更好的維護性;對於高負載、高併發的(網絡)應用,應使用 NIO 的非阻塞模式來開發