黑馬程序員_day04_Java基礎之函數、數組

----------- android培訓java培訓、java學習型技術博客、期待與您交流! ------------

Java基礎之函數、數組

一、函數:定義在類中的具有特定功能的一段獨立小程序,也稱方法。函數就是提高代碼的複用性的方式體現之一。功能是由函數來體現。

主函數main保證了類的獨立運行。

函數的格式:

修飾符  返回值類型 函數名(參數類型 形式參數1,參數類型 形式參數2----

{

執行語句;

return 返回值;

}

返回值類型:函數運行後的結果的數據類型。

參數類型:是形式參數的數據類型。

形式參數是一個變量,用於存儲調用函數時傳遞函數的實際參數。

實際參數:傳遞給形式參數的具體數值。

返回值:該函數運算後的結果,該結果會返回給調用者。

Return 的作用:1、將具體的結果返給調用者。2、結束了該功能(函數)

Return可以寫多條,滿足某一種條件後會結束功能。例

public static int show(boolean b) 

{

if (b)

return 100;

else

return 0;

}

Return結束函數功能應用

public static void show(int age) 

{

    if (age <0) 

{

System.out.println("數值非法");

return;

}

System.out.println(age);

return;

}

return在單獨存在時,下面不能有語句,這和breakcontinue是類似的。

功能定義一般都有結果,若功能沒有具體的結果,這是返回值類型在java中就用void關鍵字來表示。

如果函數的返回值類型是void,那麼函數中的return語句是可以省略不寫的。如main函數也是函數,結尾處肯定有return語句,只是其返回值類型是void,省略不寫罷了。

如果函數有具體的返回值類型,那麼必須寫return語句以及具體的返回值。

函數之間是並列關係,但無論函數怎樣排列,都是從主函數開始。主函數是第一個壓棧。

函數內是不可以定義函數的,只可調用函數。

注意:不要把代碼都寫在主函數內,只要是功能,都可用函數來體現,主函數只用來調用已定義的功能,讓該功能運行起來。

函數的返回值類型和參數是沒有關係的。

函數定義時注意的事項:定義功能,功能中需要什麼就定義什麼,但是不需要的就不要定義,以免畫蛇添足。至於功能結果,調用者怎麼操作與我們無關,功能中不要去體現。

輸出語句中,必須是運算完有具體結果數據的函數纔可以被輸出。若printlnA函數)而A函數的返回值類型是void,則會編譯失敗。

爲驗證定義的功能是否可用,可定義一個主函數來運行檢驗。

例如:定義一個功能。來簡化打印字符串的輸出語句。

class  SopDemo

{

public static void main(String[] args) 

{

sop("fuck");

}

public static void sop(String str) 

{

System.out.println(str);

}

}

二、定義功能的技巧:1、明確該功能的結果是什麼,即明確要定義的Java函數的返回值類型。2、明確該功能是否需要未知內容來參與運算,即明確Java函數的參數列表(參數的個數,參數的類型)注意,函數參數列表裏的參數是有順序的。

練習1、定義一個功能,獲取兩個整數之間最大的那個。

思路:1、明確功能結果。是一個整數 int

      2、明確未知內容。是兩個不確定的整數。有兩個整型參數。

   3、獲取最大值就要通過比較來完成,if語句。

4、通過return語句返回最大值。

public static int getmax(int a,int b) 

{

if (a>b)

return a;

return b;

(return a>b?a:b;)代碼的簡單優化

}

練習2、定義一個功能,判斷兩者是否相等

思路:1、結果:用boolean類型表示

2、未知內容:兩個整數

public static boolean isEquals(int a,int b) 

{

return a==b?true:false;(代碼優化return a==b)

}

三、函數的內存運行過程

執行主函數時,主函數就會進棧,會在棧內存中劃分一片空間,名稱叫main,然後逐條執行main的執行語句,執行到調用函數時,被調用的函數就會進棧,在main空間上開闢一片空間。這種進棧的方式叫做壓棧。第一個進棧的直接進入棧底。被調用函數結束後,就會從內存釋放,彈棧。以此類推,直至main函數結束。

四、函數的重載

定義函數爲了增加其閱讀性,函數名稱要求直接反映出該函數功能最好。函數名稱要有意義。

功能相同的函數,名稱最好是一致的。

重載:在同一個類中,允許存在一個以上的同名函數,只要它們的參數個數或者參數類性不同即可。

重載的好處:方便閱讀,方便調用。

特點:與返回值類型無關,只看參數列表

重載練習

public static void show(int x,char y,double z){}

下列哪個答案和給定的函數重載了?

a.public static int show(char y,int x,double z){return 1;}

重載了。參數類型不同。而且和返回值類型無關。

b.public static void show(int a,char b,double c){}

沒有,和給定的函數一模一樣。出現在同一類會編譯失敗,因爲有了調用的不確定性。

c.public static void show(double z,int x,char y){}//重載了。參數類型不同。參數是有順序的

d.public static double show(int a,char y){}//重載了,參數個數不同。

五、數組

數組:同一種類型的數據的集合。可以自動的給數組中的元素從0開始編號。這些編號叫索引,也叫腳標。

編號和數據存在對應關係。

格式:元素類型 [ ] 數組名=new 元素類型[元素個數或者數組長度]

長度爲n的數組,最大索引(腳標)是n-1

特點:1、這些數據必須是同一類型。

2、存儲時必須明確元素的個數。

數組其實就是可以存儲固定個數並是同一類型的元素的容器。

容器:數據多時,就要容器來存儲。數組是容器的一種。

new:要定義一個存儲多個數據的空間,必須要使用一個關鍵字new。而new[ ]:新創建數組。New創建的數組也稱實體。

new int [3]:定義了一個可以存儲int類型元素的數組。

int [ ] arr:定義一個數組,元素類型是int ,名稱是arr

arr[0]=66:名稱是arr的數組,腳標是0的位置被賦值爲66.

數組的定義其實也是定義變量,只不過不再是基本數據類型變量了,而是引用數據類型變量(數組、類、接口)

數組的默認初始化值:boolean類型是falseInt類型是0.

Double類型是0.0 float類型是0.0f  char類型是'\u0000'(空字符)

每個程序運行時,都要在內存中分配專屬空間

Java內存中又劃分爲5個區域:1、寄存器(cpu涉及的區域)2、本地方法區(是和系統相關的代碼存儲區域)3、棧內存4、堆內存5、方法區。

棧內存:存儲的都是局部變量。變量運算區域一結束,就被釋放。

局部變量:在方法上的參數,方法內的參數,語句中的變量。

堆內存:存儲的是數組和對象。堆內存中存儲的都是實體。

堆的特點:1、任何實體都有內存地址值。2、堆內存中的變量都有默認的初始化值。

Int[ ] arr=new int [3];堆內存中這個實體int[3]只是把它在堆內存中的首地址賦給了棧內存中main空間中的arr變量。真正的實體並沒有存儲到arr變量中去。Arr變量只是持有了實體的首地址值,指向或者說引用了該實體。而基本數據類型是直接存儲到變量中。

一個實體可存在多個引用的變量,即可以被多個變量所指向。

int[]arr1=new int[3];

int[]arr2=new int[3];是兩個不同的數組。

int[]arr1=new int[3];

int[]arr2=arr1;arr1所持有的實體首地址賦給arr2.arr2也可引用該實體。

arr1[0]=30;

System.out.println(arr2[0]);結果是30

arr1=null;就是把變量所持有的實體首地址更爲null值,即不再指向實體。

實體只有在不再被引用時,纔會被垃圾回收器回收。


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