最近在學習jvm,發現隨着對虛擬機底層的了解,對java的多線程也有了全新的認識,原來一個小小的synchronized關鍵字里別有洞天。決定把自己關於java多線程的所學整理成一篇文章,從最基礎的為什么使用多線程,一直深入講解到jvm底層的鎖實現。 多線程的目的 為什么要使用多線程?可以簡單 ...
首先,明確一下,Java多態的三個必要條件: 繼承 子類重寫父類方法 父類引用指向子類對象 然后看一個例子 輸出結果為: 給出結論:當滿Java多態的三個條件時,可以發現c.eat 調用的實際上是子類的eat,但c.age調用的還是父類的age,而c.play 則不會通過編譯。 下面從JVM的角度解釋上面這種現象 我們就從Father c new Child 這句話切入 這句話首先會執行new C ...
2017-05-14 19:54 7 2310 推薦指數:
最近在學習jvm,發現隨着對虛擬機底層的了解,對java的多線程也有了全新的認識,原來一個小小的synchronized關鍵字里別有洞天。決定把自己關於java多線程的所學整理成一篇文章,從最基礎的為什么使用多線程,一直深入講解到jvm底層的鎖實現。 多線程的目的 為什么要使用多線程?可以簡單 ...
最近在看jvm,發現隨着自己對jvm底層的了解,現在對java代碼可以說是有了全新的認識。今天就從jvm的角度來看一看以前自以為很了解的單例模式。 了解單例模式的人都知道,單例模式有兩種:“餓漢模式”和“懶漢模式”。 引用一段網上對這兩種模式的介紹: “餓漢模式的特點是加載類時比較慢 ...
1. 字符串生成過程 我們都知道String s = "hello java";會將“hello java”放入字符串常量池,但是從jvm的角度來看字符串和三個常量池有關,class常量池,運行時常量池,全局字符串常量池(也就是常說的字符串常量池) 第一個是class的常量池,看一下 ...
從虛擬機指令執行的角度分析JAVA中多態的實現原理 前幾天突然被一個“家伙”問了幾個問題,其中一個是:JAVA中的多態的實現原理是什么? 我一想,這肯定不是從語法的角度來闡釋多態吧,隱隱約約地記得是與Class文件格式中的方法表有關,但是不知道虛擬機在執行的時候,是如何選擇正確的方法來執行 ...
面向對象編程有三大特性:封裝、繼承、多態。 封裝隱藏了類的內部實現機制,可以在不影響使用的情況下改變類的內部結構,同時也保護了數據。對外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。 繼承是為了重用父類代碼。兩個類若存在IS-A的關系就可以使用繼承。,同時繼承也為實現多態做了鋪墊 ...
我們都知道面向對象有四個基本特性:抽象、封裝、繼承、多態。這四個特性,概括起來可以這么理解,抽象、封裝、繼承是多態的基礎,多態是抽象、封裝、繼承的表現。多態,是Java中非常重要的一個部分,所以今天來談一下多態(Polymorphism)。 什么是多態 不同類的對象對同一消息作出 ...
多態是指當系統A訪問系統B的服務時,系統B可以通過多種方式來提供服務,而這一切對系統A是透明的.比如動物園的飼養員能夠給各種各樣的動物喂食.下圖顯示了飼養員Feeder,食物Food和動物Animal及它的子類的類框圖. 可以把Feeder,Animal和Food都看成獨立的子系統 ...
1.i++和++i的問題 反編譯結果為 Code: 0: iconst_1 1: istore_1 2: iinc 1, 1 //這個個指令,把局部變量1,也就是 ...