Java虛擬機是可以執行字節碼的虛擬機進程。Java源文件被編譯成被Java虛擬機執行的字節碼文件。
Java被設計成允許應用程序運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者重新編譯。Java虛擬機讓這個變成了可能,因為它知道底層硬件平台的指令長度和其他特征。
“static”關鍵字表明一個成員變量或者成員方法,在沒有所屬類的實例變量的情況下被訪問。
Java中static方法不能被覆蓋,因為覆蓋是基於運行時動態綁定的,而static方法時編譯時靜態綁定的。static方法跟類的任何實例都不相關。
static變量在Java中是屬於類的,它在所有的實例中的值是一樣的。當類被Java虛擬機載入的時候,會對static變量進行初始化。如果你的代碼嘗試不用實例來訪問非static的變量,編譯器會報錯,因為這些變量還沒有被創建出來,還沒有跟任何實例關聯上。
Java語言支持的8種基本數據類型是:byte,short,int,long,float,doble,boolean,char
同時Java語言還支持引用數據類型。
自動裝箱時Java編譯器在基本數據類型和對應的對象包裝類型之間的一個轉化,比如:把int轉化為Integer,double轉化為Double,等等。反之就是自動拆箱。
Java中的方法重載時發生在一個類裡面兩個或多個方法的方法名相同但是參數不同的情況。
與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回值類型。
當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java編譯器會為這個類創建一個默認的構造函數。
Java構造函數的重載和普通方法重載相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。
Java不支持向C++中那樣的復制構造函數,這個不同點是因為如果你自己不寫構造函數的情況下,Java不會創建默認的復制構造函數。
Java中不支持多繼承。只支持單繼承(也就是說一個類只有一個父類)。但是Java中的接口支持多繼承,即一個子接口可以有多個父接口。
接口的作用是用來擴展對象的功能,一個子接口繼承多個父接口,說明子接口擴展了多個功能,當類實現接口時。類就擴展了相應的功能。
Java提供和支持創建抽象類和接口。他們的實現由共同點。不同點在於:
I> 接口中所有的方法隱含的都是抽象的,而抽象類則可以同時包含抽象和非抽象的方法。
II> 類可以實現多個接口,但只能繼承一個抽象類。
III> 類可以不實現抽象類和接口聲明的所有方法,當然,這種情況下,類也必須聲明是抽象的。
IV> 抽象類可以在不提供接口方法實現的情況下實現接口。
V> Java接口中聲明的變量默認是final的,抽象類可以包含非final的變量
VI> Java接口中的成員函數默認是public的,抽象類的成員函數可以是private,protected,或者public
VII> 接口時絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含main()方法的話是可以被調用的。
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響對象的值。
對象被引用傳遞,以為著傳遞的並不是實例對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
注意:Java中只有按值傳遞,沒有按引用傳遞。