函式、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,方法的作用是獲取找出兩個整數中較大的值。該方法有兩個
public static 是方法的修飾符
int 是方法的返回值型別
getMax 是方法的方法名
(int x,int y)是引數列表,x和y是形式引數。
{} 花括號內的程式碼是方法體
return result; result 是返回值。
方法定義完成之後,如何呼叫一個方法?
函式呼叫:
想要使用方法,必須呼叫它。
publicstaticvoidmain(String[] args) {
intmax =getMax(5, 7);
System.out.println(max);
}
完整程式一:在main方法中呼叫getMax()方法,5和7就是給該方法傳遞的實際引數。如果方法有返回值,可以定義一個變數接收返回值,變數型別和方法返回值型別一致。本例中通過int型別變數max接收了getMax方法的返回值。
這裡的getMax(i, j);i和j就是實際引數。
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的值傳遞給方法中的x,j的值傳遞給方法中的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]);
結果: