java 基礎知識2

Final 和static

1.      final類不能被繼承,沒有子類,final類中的方法默認是final的

2.      final方法不能被子類的方法覆蓋,但可以被繼承

3.      final成員變量表示常量,只能被賦值一次,複製後值不再改變

4.      final不能用於修飾構造方法

注意:父類的private成員方法是不能被子類方法覆蓋的,因此private類型方法默認是final類型的

Final類

不能被繼承,final類中的方法沒有機會被覆蓋,默認是final的

final方法

如果一個類不允許子類覆蓋某些方法,則可以把這個方法聲明爲final方法

使用final方法的原因:

1.      把方法鎖定,防止任何繼承類修改它的意義和實現

2.      高效,編譯器在遇到調用final方法時會轉入內嵌機制,大大提高執行效率

Final變量

Final修飾的變量有三種,靜態變量、實例變量和局部變量,分別表示三種類型的常量

 Final參數

當函數參數爲final類型時。可以讀取該參數,但無法改變該參數的值

Public void test( final int i){
	//i++; i是final類型的,值不允許改變的
	}

Static

Static表示“全局”或靜態的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊,但是java語言中沒有全局變量的概念

 

被static修飾的成員變量和成員方法獨立於該類的任何對象。也就是說它不依賴於特定的實例,被類的所有實例共享。只要這個類被加載,java虛擬機就能根據類名在運行時數據區的方法區內定找到,因此static對象可以在它的任何對象創建之前訪問,無需引用任何對象

用public 修飾的static成員變量和成員方法本質是全局變量和全局方法,

當聲明它類的對象時,不生成static變量的副本,而是所有的實例共享同一final變量

Static變量前可以有private修飾,表示這個變量不能再其他類直接訪問

1.      static 變量

類成員變量分爲被static修身的變量,稱爲靜態變量或類變量,沒有被static修飾變量,叫實例變量區別:

對於靜態變量在內存中只有一個拷貝(節省內存),JVM只爲靜態變量分配一次內存,在加載類的過程中王城靜態變量的內存分配,可用類名直接訪問,當然也可以通過對象來訪問

對於實例變量,每創建一個實例都會爲實例變量分配一次內存,實例變量可以在內存中有多個拷貝,互不影響

2.       靜態方法

可以直接通過類名調用,任何的實例也都可以調用,靜態方法不能用this和super關鍵字,不能直接訪問不帶static的成員變量和成員方法

因爲static方法獨立於任何實例,因此static方法必須被實現,而不能是抽象的abstract

3.       Static代碼塊

也叫靜態代碼塊,是類中獨立於類成員的static語句塊,JVm加載類時會執行這些代碼

數組

1.      數組中元素類型必須相同

2.      數組的長度一旦指定即不能改變

3.      數組中的值通過數組名和下表組合起來進行訪問

數組類型變量的聲明
int[] a = null,a1;//引用類型變量一定要指向一個對象
		int b[]=null,b1;//b1是int類型的變量,b是int類型數組
		//a = {1,2,3}  數組常量只能使用在初始化中
		a = new int[]{1,2,3};//直接給數組元素初始化,a存儲的是數組的首元素的內存地址
		int[] c = {1,2,3};
		a1 = new int[3];//創建元素並沒有初始化

靜態初始化和動態初始化

靜態初始化也稱數組的整體賦值

語法格式:

數據類型[] 數據名稱 = {值1,值2,…….值n}

靜態初始化必須和數組的聲明位於同一行,即只能在聲明數組的同時進行靜態初始化

動態初始化。

只爲數組指定長度,並在內存中申請空間

數據類型[] 數組名稱 = new 數據類型[長度

方法(method)

在面向過程的語言中稱作函數。在彙編語言中稱作子程序,是一個代碼功能塊,實現某些特定功能

方法聲明的語法格式:

訪問控制符 [修飾符] 返回值類型方法名稱(參數列表){

          方法體

}

1.      訪問控制符

範圍從大到小:public ,protected,無訪問控制符,private

 

2.      修飾符可選。是爲方法增加特定的語法功能

1)  Static  靜態的

2)   Final 最終的

3)  Abstract 抽象的

4)  Synchronized  同步的

5)  Native 本地的

 

方法相同指方法名稱和參數列表都相同

參數傳遞:

在參數傳遞時分爲按值傳遞,按址傳遞

1.      按值傳遞(by value)

按值傳遞指每次傳遞參數時,把參數的原始數據拷貝一份新的,把新拷貝的數值傳遞到方法內部,在方法內部修改時,則修改拷貝出來的值而原始的值不發生改變

         說明:使用該方式傳遞的參數,參數原始的值不發生改變

八種基本數據類型和String

2.      按址傳遞(by address)

每次傳遞參數時,把參數在內存中的存儲地址傳遞到方法內部,在方法內部通過存儲地址對應存儲區域的內容。當方法內部改變了參數值後,參數原始的值發生改變

除String之外的所有複合數據類型,包括數組、類和接口

java 只有值傳遞

可變長參數:

1.      定義:例如

Print(String… args){

}

2 調用

調用時可以給任意多個參數也可不給參數

3.      使用規則

(1)      調用方法時,如果能夠和固定參數的方法匹配,也能與可變長參數的方法匹配,則選擇固定參數的方法

(2)      如果要調用的方法可以和兩個可變參數匹配,則出現錯誤

(3)      一個方法只能有一個可變參數,並且這個可變參數必須是該方法的最後一個參數

4,使用規範:

1)  避免帶有變長參數的方法的重載

2)  避免使用null值和空值


覆寫必須滿足的條件:

1)      重寫方法不能縮小訪問權限

2)      參數列表必須與被重寫方法相同(包括顯示形式)

3)      返回類型必須與被重寫方法相同或是其子類

4)      重寫方法不能拋出新的異常或者超過了父類範圍的異常,但可以拋出更少更有限的異常


迭代和遞歸區別:

遞歸是重複調用函數自身實現循環,迭代是函數內某段代碼實現循環,而迭代與普通循環區別是:其循環代碼中參與運算的變量同時是保存結果的變量,當前保存的結果作爲下一次循環計算的初始值

public 
               //public static void main(String...a){  正確
		//public static void main(String.* a){  錯誤
		//public static void main(String... a){ 正確
		//public static void main(String[]... a){  編譯通過
	 	//public static void main(String... a[]){  錯誤
		public static void main(){
	 		System.out.println("cc");
	 	}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章