1. 程式人生 > 其它 >函式、return函式,函式過載,陣列

函式、return函式,函式過載,陣列

函式(方法)

函式的作用:提高功能程式碼的複用性。

需求:做兩個數的加法功能。

目前存在的問題:以下的程式碼都是在做一個加法功能,而且這裡的加法功能的程式碼目前沒有任何的複用性。

解決方案:如果一個功能程式碼要被複用起來,那麼這時候可以 吧這裡的功能程式碼封裝起來,在java中程式碼被封裝起來是以函式形式體現的。

函式的定義格式:

  修飾符  返回值型別  函式名(形參列表){

    需要封裝的功能程式碼;

}

例子:

程式碼:

public class Demo12 {
public static void main(String[] args) {
int num = add();
System.out.println("總合:"+num);
}
public static int add(){
int a = 3;
int b = 2;
System.out.println("函式執行了");
return a+b;
}
}
結果:

分析函式:

public static int add(){
int a = 3;
int b = 2;
System.out.println("函式執行了");
return a+b;、

修飾符:public static

返回值型別:  int 。返回值型別就是指 函式執行完畢後,返回的結果的資料型別。
注意:某些函式是沒有結果返回給呼叫 者的,那麼這時候的返回值型別為void

函式名:  add  函式名的作用:如果需要呼叫該函式就需要使用函式名。函式名只要符合識別符號的命名規範即可。

函式名的命名規範:單詞的首字母小寫,其他單詞的首字母大寫其他的小寫。

形式引數:  如果一個函式在執行的時候,存在著資料需要呼叫者確定,那麼這時候就應該定義形式引數。


return:  把一個結果返回給呼叫者。

函式的特點:

  1,函式定義好後,是需要呼叫才能 執行的。main函式是有jvm呼叫的,不需要手動呼叫

  

定義函式:

1:是否有未知內容參與運算

2:是否有運算結果(返回值)

案例:獲取2個整數中的較大的數。

publicstaticintgetMax(intx, inty) {

int result;

if(x > y) {

result=x;

} else{

result=y;

}

return result;

}

解析:getMax方法

該方法方法名為:getMax,方法的作用是獲取找出兩個整數中較大的值。該方法有兩個

int型引數,:xy,方法返回兩個數中較大的一個。

public static 是方法的修飾符

int 是方法的返回值型別

getMax 是方法的方法名

int x,int y)是引數列表,xy是形式引數。

{} 花括號內的程式碼是方法體

return result; result 是返回值。

方法定義完成之後,如何呼叫一個方法?

函式呼叫:

想要使用方法,必須呼叫它。

publicstaticvoidmain(String[] args) {

intmax =getMax(5, 7);

System.out.println(max);

}


完整程式
一:在
main方法中呼叫getMax()方法,57就是給該方法傳遞的實際引數。如果方法有返回值,可以定義一個變數接收返回值,變數型別和方法返回值型別一致。本例中通過int型別變數max接收了getMax方法的返回值。

這裡的getMax(i, j);ij就是實際引數。

publicclassDemo6 {

publicstaticvoidmain(String[] args) {

inti=5;

intj=7;

intmax = getMax(i, j);

System.out.println(i+""+j+"的最大值是:"+max);

}

publicstaticintgetMax(intx, inty) {

int result;

if(x > y) {

result=x;

} else{

result=y;

}

return result;

}

}

二:上述案例中呼叫getMax方法,並將結果賦值給了max變數。也可以直接列印getMax()方法的結果。

publicclassDemo6 {

publicstaticvoidmain(String[] args) {

inti=5;

intj=7;

//列印方法的結果

System.out.println(getMax(i, j));

}

publicstaticintgetMax(intx, inty) {

int result;

if(x > y) {

result=x;

} else{

result=y;

}

return result;

}

}

注意:main方法是程式的入口由虛擬機器呼叫,方法和方法之間不能巢狀,方法之間通過呼叫來使用。

方法什麼時候執行完畢:

當執行完return語句,或者執行到方法末尾的花括號時方法結束。

該類中包含了兩個方法,main方法和getMax方法。main方法由java虛擬機器呼叫,並且main方法的寫法是固定的。Main方法可以呼叫其他方法。

當呼叫getMax方法時,變數i的值傳遞給方法中的xj的值傳遞給方法中的y,並開始執行getMax方法中的語句,執行return,並返回運算結果。getMax方法執行完畢。

需求1: 定義一個函式判斷一個分數的等級,把分數的等級返回給呼叫者。
"A等級" ”B等級“

如何 定義函式:
1. 返回值型別。 String
2. 未知的引數--->形式引數。 分數


需求2: 定義一個函式列印一個乘法表,不需要返回任何資料。
1. 返回值型別。 void
2. 未知的引數--->形式引數。 到底是什麼乘法表


函式的特點:
1. 函式的作用就是把一個功能程式碼給封裝起來,已達到提高功能程式碼的複用性。
2. 函式定義好之後是需要被呼叫才會執行的。
3. 如果一個函式沒有返回值返回給呼叫者,那麼返回值型別必須是使用void表示。

需求:定義一個函式列印一個乘法表

程式碼:

public static void main(String[] args) {

print(7);
}


//需求2: 定義一個函式列印一個乘法表,不需要返回任何資料。
public static void print(int row){
for(int i = 1 ; i<= row ; i++){
for (int j = 1 ;j<=i ;j++ ){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
//換行
System.out.println();
}
}
結果:

需求:定義一個函式判斷一個分數的等級

程式碼:

public static void main(String[] args) {
String result = getGrade(89);
System.out.println(result);

}
  public static String getGrade(int score){
String grade = ""; //定義一個變數儲存等級
if(score>=90&&score<=100){
grade = "A等級";
}else if(score>=80&&score<=89){
grade = "B等級";
}else if(score>=70&&score<=79){
grade = "C等級";
}else if(score>=60&&score<=69){
grade = "D等級";
}else if(score>=0&&score<=59){
grade = "E等級";
}else{
grade = "補考等級";
}
return grade; //把等級返回給呼叫者
}

}
結果:

注意: 如果一個函式的返回值型別是具體的資料型別,那麼該函式就必須要保證在任意情況下都保證有返回值。(除了返回值型別是void以外)

return 關鍵字的作用:
1. 返回資料給函式的呼叫者。
2. 函式一旦執行到了return關鍵字,那麼該函式馬上結束。 (能結束一個函式)

注意:一個函式的返回值型別 是void,那麼也可以出現return關鍵字,但是return關鍵字的後面不能有資料。

break關鍵字與return關鍵字的區別:
1.break關鍵字是結束一個迴圈。
2. return關鍵字是結束一個函式。

   public static void main(String[] args) {
print();
}


public static void print(){
for(int i = 0 ; i < 5; i++){
System.out.println("hello world");
///break; //結束了當前的迴圈
return ; //結束當前的函式
}

System.out.println("哈哈我能執行嗎??");
}
}
結果:

需求: 定義一個函式做加法功能。

函式的過載:在一個類中出現兩個或者兩個以上的同名函式,這個稱作為函式的過載。

函式過載的作用: 同一個函式名可以出現了不同的函式,以應對不同個數或者不同資料型別的引數。

函式過載的要求:
1. 函式名一致。
2. 形參列表不一致。(形式引數的個數或者是對應的資料型別不一致)
3. 與函式的返回值型別是無關的。

例子:

程式碼:

public class Demo14 {
public static void main(String[] args) {
add(1,20);
}
public static double add(int a, int b){
System.out.println("兩個引數的總和: "+ (a+b));
return 3.14;
}

//重複定義
public static int add(int a, double b){
System.out.println("double引數的總和: "+ (a+b));
return 12;
}

}
結果:

陣列:陣列是儲存同一種資料型別資料的集合容器。

陣列的定義格式:
資料型別[] 變數名 = new 資料型別[長度];

分析陣列:
左邊: int[] arr 聲明瞭一個int型別的的陣列變數,變數名為arr。
int : 表示該陣列容器只能儲存int型別的資料。
[] : 這是一個數組型別。
arr : 變數名.

右邊:new int[50]; 建立了一個長度為50的int型別陣列物件。
new : 建立陣列物件的關鍵字。
int: 表示該陣列物件只能儲存int型別資料。
[]: 表示是陣列型別。
50 : 該陣列最多能儲存50個數據。陣列的容量。


陣列的好處: 對分配到陣列物件中每一個數據都分配一個編號(索引值、角標、下標),索引值的範圍是從0開始,最大是: 長度-1.

陣列記憶體分析:

區域性變數: 如果一個變數是在一個方法(函式)的內部宣告的,那麼該變數就是一個區域性變數。

成員變數: 成員變數就是定義在方法之外,類之內的.

程式碼:

public class Demo15 {
public static void main(String[] args) {
int[] arr = new int[4];
arr[0] = 10;
arr[1] = 30;
arr[2] = 50;
arr[3] = 90;
//檢視陣列中的所有資料。
for (int index = 0; index < arr.length; index++) {
System.out.println(arr[index]);
}
}
}
結果:
System.out.println("陣列的容量:"+ arr.length);   //陣列的有一個length 的屬性,可以檢視陣列 的容量。
System.out.println("arr[2] = "+ arr[2]);  //差點單個容器的裡面的資料
示例:
程式碼:
int[] arr1 = new int[2];
int[] arr2 = arr1;
arr1[1] = 10;
arr2[1] = 20;
System.out.println(arr1[1]);
結果:

示例:

程式碼:

int[] arr1 = new int[2];
int[] arr2 = new int[2];
arr1[1] = 10;
arr2[1] = 20;
System.out.println(arr1[1]);

結果: