2016計算機二級《Java語言程序設計》知識考點
《Java語言程序設計》是計算機二級考試科目之一,為了幫助考生們熟悉考試科目的考點,明確備考的方向,下面本站小編為大家搜索整理了關於《Java語言程序設計》知識考點,歡迎參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!
一、java簡介
2009年04月20日,美國甲骨文公司74億美元收購Sun,取得java的版權。
Java 是面向對象的語言,沒有面向對象編程經驗的讀者需要花費不少時間來了解面向對象的概念、語法和編程思想,有不能理解的地方請大家一定要堅持,多花時間編寫代碼自然會豁然開朗,從面向過程到面相對象需要一個適應期。
Java 不只是一種編程語言,它是一個完整的平台,擁有龐大的庫,將諸如圖形繪製、Socket連接、數據庫存取等複雜操作進行了最大程度的簡化。
Java 是跨平台的,一次編譯,到處運行,在 Windows 上編寫的代碼可以不加修改的移植到 Linux 上,反之也可以。
在世界編程語言排行榜中,Java幾乎佔據着第二名的位置,僅次於C語言。
二、String
1、初始化:
一般由String聲明的字符串,長度是不可變的,這也是它與StringBuffer和StringBuilder最直觀的一個區別。一般初始化方式:String s = "hello world";經過這條語句,JVM的棧內存中產生一個s變量,堆內存中產生hello world字符串對象。s指向了hello world的地址。像上面這種方式產生的字符串屬於直接量字符串對象,JVM在處理這類字符串的時候,會進行緩存,產生時放入字符串池,當程序需要再次使用的時候,無需重新創建一個新的字符串,而是直接指向已存在的字符串。
2、String s = "123" + "456"內存中產生幾個字符串對象?
這是個比較有爭議的問題,面試的時候,老師還挺喜歡問,論壇上大家説幾個的也有,我給大家分析一下,因為我們前面有提到Java字符串的緩存機制,編譯器在編譯的時候會進行優化,所以在編譯的過程中123和456被合成了一個字符串"123456",因此,如果緩存池中目前沒有123456這個對象,那麼會產生一個,即""123456",且棧中產生一個引用s指向它,如果緩存池中已經存在"123456",那麼將產生0個對象,直接用s指向它。
3、StringBuffer、StringBuilder
StringBuffer和StringBuilder就是所謂的可變字符串類,共四個構造方法:
StringBuffer()
public StringBuffer(int paramInt)
public StringBuffer(String paramString)
public StringBuffer(CharSequence paramCharSequence)
觀察其源碼發現,使用StringBuffer()時,默認開闢16個字符的長度的空間,使用public StringBuffer(int paramInt)時開闢指定大小的空間,使用public StringBuffer(String paramString)時,開闢th+16大小的空間。都是調用父類的構造器super()來開闢內存。這方面StringBuffer和StringBuilder都一樣,且都實現AbstractStringBuilder類。
二者幾乎沒什麼區別,基本都是在調用父類的各個方法,一個重要的區別就是StringBuffer是線程安全的,內部的大多數方法前面都有關鍵字synchronized,這樣就會有一定的性能消耗,StringBuilder是非線程安全的,所以效率要高些。
三、對象
1、初始化順序:總體來説執行順序為:靜態塊->靜態屬性->非靜態塊->屬性->構造器。接下來我們分析一下類的屬性和方法。
2、屬性:
類中的屬性一般分為類屬性(全局變量)、實例屬性(全局變量)、局部屬性(局部變量)。<我是這麼分的,儘管有人不這麼分,但是分法無所謂,理解它們的含義最重要>.
類屬性:前面已經説過就是那些聲明為static的屬性,在整個過程中只進行一次初始化,在內存中只開闢一個空間,不論在哪兒調用,值保持一致。一旦被修改,所有引用它的地方都會跟着修改。一般直接通過類名進行調用。
實例屬性:實例變量是可以不進行初始化,比如一個整型的實例變量假如沒有初始化,則默認值為0;而局部變量假如不賦初值語法上是通過的,但是在使用這個變量是程序就報錯了。實例變量在堆和棧中都分配內存空間,在堆當中分配的是對象本身,而棧中則是對這個對象的引用。
局部屬性:局部變量是在方法內部聲明的變量,生命期僅在方法內,方法結束後變量就消失了;局部變量必須初始化再使用,否則會報錯,也就是説,假如你在方法內定義了一個局部變量,並且沒有賦值,那麼你在使用這個變量的時候一定得賦值,不然就報錯了。同時,局部變量可屏蔽全局變量。
3、重載:
是指在同一個類中,具有相同的`方法名,不同的參數列表的方法之間的一種機制。參數列表的不同體現在:類型不同、個數不同、順序不同,只要滿足任一一個,就可以進行方法重載。
4、重寫:
重寫是在繼承中存在的,在兩個類(子類和父類之間存在的關係)中,子類重寫父類的方法,方法名相同,參數也相同的一種機制。
5、不定參數調用
public static String a(String ... value);
和下面的效果一樣
public static String a(String[] value);
6、類與對象的關係
1)類是一類具有相同屬性的事物的統稱,是一種抽象。
2)對象是類的具體體現,又稱實例。
3)類是一種靜態的概念,而對象是一種動態的機制。
四、抽象類、接口
1、抽象類與接口:
抽象類是一種類,裏面除了有抽象方法外,還可以有具體的方法;
接口裏面必須都是抽象的方法;
在Java中,凡是聲明為形如:abstract void function()的方法,都是抽象方法;
包含抽象方法的類就是抽象類,抽象類中是可以沒有抽象方法的;
有抽象方法的類必須是抽象類;
抽象類不一定有實體方法。
2、繼承:
Java繼承機制不允許多重繼承類,但一個類允許實現多個接口
繼承抽象類時,必須重寫其抽象方法;
抽象類不能被聲明為final類型的,因為加final關鍵字的類保證不能被繼承,因此為抽象類加final關鍵字,這個類就沒法用了。抽象類只能被繼承,不能被實例化!
聲明為interface的類為接口,比抽象類更加抽象的一種機制。在接口中,我們不能提供任何實現,所有方法必須都是抽象的,可以不加 abstract關鍵字,但是編譯器對於接口中的方法,都是直接按抽象方法處理的。我們通過implements來實現某個接口。當我們實現某個接口時,必須重寫其所有方法。
3、總結一下抽象類與接口的區別和聯繫:
a) 抽象類是類,可以有實體方法。
b) 抽象類不能實現多繼承,而接口可以。
c) 如果需要創建不帶任何方法定義和成員變量的基類,則使用接口,如果類中需要有部分具體的實現,則使用抽象類。
d) 如果事先想要將某類設計為一個基類,那麼首選接口。