Java知识整理——基础知识
生活随笔
收集整理的這篇文章主要介紹了
Java知识整理——基础知识
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java虛擬機(Java Virtual Machine)是可以執行Java字節碼的虛擬機,每個Java源文件將被編譯成字節碼文件,然后在JVM中執行。Java之所以被設計成可以在任意的平臺運行,而不需要重寫或者在不同的平臺下重新編譯,這些都要歸功于Java虛擬機(JVM),因為JVM非常了解特定的指令的長度以及底層硬件平臺的特殊性。
Java運行環境(Java Runtime Enviroment) 是運行Java程序的基本的Java虛擬機,包括執行applet的瀏覽器插件。JDK (Java Development Kit) 是為了開發,編譯和執行Java應用程序,針對Java的全功能的軟件開發包,包含了JRE,編譯器和工具(比如說 JavaDoc 和Java Debugger)。
static 關鍵字表示,訪問這個成員變量或方法時,不必獲取它屬于的類的實例。
Java 里的 static 方法不能被 override,因為 override 的機制是運行時(runtime)的動態綁定,而 static 方法是在編譯時靜態綁定的。static 方法并不與任何類的具體實例有關,因此無法應用繼承的概念。
Java 中的 static 變量歸相應的類所有,它的值對于類的所有實例都是相同的。static 變量是在 JVM 加載類的時候初始化的。如果代碼試圖訪問非靜態的變量,而且不是通過類的實例去訪問,編譯器會報錯,因為這些非靜態變量還沒有被創建呢,并且它們沒有與實例相關聯。
Java語言支持的8個基本數據類型如下:
byte short int long float double boolean char
Autoboxing 是指在基本數據類型和對應的包裝(wrapper)類之間Java 編譯器所做的自動轉換。例如,編譯器將 int 轉換為 Integer,將 double 轉換為 Double ,等等。逆向的轉換稱為 unboxing。
Java中方法的 overload 發生的條件是,同一個類里,有兩個或以上的方法名稱完全相同,但參數列表不同。另一方面,方法的 override 是指,子類重定義了父類里的同一個方法。Override 的方法必須方法名、參數列表和返回類型都完全相同。Override 的方法不會限制原方法的訪問權限。
當類的對象被創建的時候,調用它的構造函數。每個類都有一個構造函數。如果程序員沒有為類編寫構造函數,Java編譯器自動為類創建一個缺省的構造函數。
構造函數重載和Java中函數重載類似,可以為同一個類創建不同的構造函數,每個構造函數必須擁有唯一的參數列表。
Java與C++不同,它不支持拷貝構造函數,但是區別僅僅是,如果你沒有編寫類的拷貝構造函數,Java不會自動創建它。
Java不支持多繼承,每個類只允許繼承一個類,但是可以實現多個接口。
Java同時提供和支持抽象類和接口,它們的實現有一些共同的特點,也有如下不同:
接口中所有的方法默認都是抽象的,而抽象類可以同時包含抽象和非抽象的方法。
一個類可以實現多個接口,但它只能繼承一個抽象類。
一個類要實現某個接口,必須實現這個接口聲明的所有方法。而一個類不需要實現抽象父類中聲明的所有方法,不過,這時候這個類也必須聲明為抽象類。
抽象類可以實現接口,而且不需要實現接口中的方法。
接口中聲明的變量默認是final的,而抽象類可以包含非final的變量。
接口中的成員默認是public的,而抽象類的成員可以是private,protected,或public的。
接口是絕對抽象的,不可實例化,抽象類也不可以實例化,但可以在main方法中觸發實例化(注:通過匿名類實現)。
當對象通過傳值調用時,傳遞的是這個對象的一個拷貝。因此,即使函數修改這個對象,也不會影響原對象的值。
當對象通過傳引用調用時,對象本身沒有被傳遞,而傳遞的是對象的一個引用。因此,外部函數對這個對象的修改,也會反映到任何出現這個對象的地方。
先談equals。equals是Object類提供的方法之一,只有當一個實例等于它本身的時候,equals()才會返回true值。
要想正確改寫equals()方法,你必須要遵守它的通用約定。下面是約定的內容,來自java.lang.Object的規范,equals方法實現了等價關系,以下是要求遵循的5點:
了解了equals重寫,我們再看hashCode()這個方法,hashcode()這個方法也是從object類中繼承過來的,在object類中定義如下:
public native int hashCode();
說明是一個本地方法,它的實現是根據本地機器相關的。再看它比較“官方”的詳細說明:hashCode()返回該對象的哈希碼值,該值通常是一個由該對象的內部地址轉換而來的整數,它的實現主要是為了提高哈希表(例如java.util.Hashtable提供的哈希表)的性能。
你可以對它的這樣“官方式”的定義漠視,但以下這一點你必須銘記:在每個重寫了equals方法的類中,你必須也要重寫hashCode方法。如果不這樣做的話,就會違反Object.hashCode的通用約定,從而導致該類無法與所有基于散列值(hash)的集合類結合在一起正常運行。
hashCode()的返回值和equals()的關系如下:
如果x.equals(y)返回“true”,那么x和y的hashCode()必須相等。
如果x.equals(y)返回“false”,那么x和y的hashCode()有可能相等,也有可能不等。
Java是支持并發,基于類的以及面向對象的一種計算機編程語言. 以下列舉了面向對象編程的優勢:
1)模塊化編程,使維護和修改更加容易
2)代碼重用
3)提高代碼的可靠性以及靈活性
4)提高代碼可讀性
面向對象編程有其非常明顯的特性,比如說封裝,繼承,多態和抽象. 下面我們來分析一下每種特性.
封裝(Encapsulation)
封裝,提供的對象隱藏內部特性和行為的一種能力,每個對象提供了一些方法,其他的對象可以訪問并改變其內部數據。在Java中,提供了三種訪問修飾符: 公有的,私有的以及保護的。每個修飾符都設定了不同的訪問權限,這個權限設置不會因為包的不同而有差異。
下面是使用封裝的一些優點:
1)通過隱藏屬性來保護對象的內部信息
2)因為可以獨立的修改或者擴展對象的行為,從而提高代碼的可用性以及維護性
3)隔離,通過阻止對象使用不希望的互動方式來交互,以此來提高模塊化程度。
你可以通過鏈接訪問我們的教程查看關于封裝更多的細節和實例.
多態(Polymorphism)
多態就是針對不同的基礎數據類型呈現相同接口的一種能力,多態類型就是其操作可以適用于不同類型值的一種類型。
繼承(Inheritance)
繼承提供了一個對象從基類獲取字段和方法的一種能力.繼承提供了代碼的重用性,并且在不更改現有類的情況下,對現有類增加額外的功能。
抽象(Abstraction)
抽象是從具體的實例中分離想法的過程,根據他們各自的功能而非具體的實現來開發類. Java中支持創建和存在暴露接口的抽象類, 而沒有包括方法的具體實現。抽象方法的宗旨就是將類的行為和具體實現分離開。
抽象和封裝的異同
抽象和封裝是個互補的概念。一方面,抽象專注在對象的行為上,而另外一方面,封裝專注于對象的行為的具體實現。封裝是通過隱藏對象的內部信息來實現的,因此也可以被看做是抽象的一種策略。
總結
以上是生活随笔為你收集整理的Java知识整理——基础知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式概览
- 下一篇: Java知识整理——线程