一、方法的定義
方法就是 將功能重複的程式碼封裝成一段獨立的程式碼,透過呼叫方法的方式 (作用)提高程式碼的複用性(減少程式碼重複)。
每一個方法只能完成一個功能。
二、方法的宣告格式
[修飾符1,修飾符2] 返回值型別 方法名 (引數型別 形式引數1,引數型別 形式引數2,...){
執行語句塊;
return 返回值;
}
例:
boolean isLeapYear (int year){ //定義方法
boolean isLeap = false;
if(year%4==0 && year%100 != 0 || year%400 != 0){
isLeap = true;
}
return isLeap;
}
public class MethodDemo01 {
//提取一個方法,計算兩個數的和並返回
public static int addNum(int a,int b){
int sum = a +b;
return sum;
}
//提取一個方法,計算三個數的和並列印
public static void addNum2(int a,int b,int c){
int sum = a +b +c;
System.out.println(sum);
}
public static void main(String[] args) {
//呼叫方法1,計算1+2的和
int sum1 = addNum(1,2);
System.out.println(sum1);
//呼叫方法1,計算3+4的和
System.out.println(addNum(3,4));
//呼叫方法,計算5+6+7的和並列印
addNum2(5,6,7);
}
}
- 返回值型別:方法輸出資料的型別(如果方法沒有返回值,則用關鍵字void來表示)
- 方法名:類似變數名,可以自定義方法名(需符合Java識別符號規則)
- 形式引數:變數(用於儲存呼叫方法輸入的資料)
- 實際引數:呼叫方法輸入的資料。
- 返回值:呼叫方法返回的資料。
三、方法的呼叫
int year= 2020;
boolean leapYear =isLeapYear(year); //呼叫方法
if(leapYear){
System.out.println(year +"是閏年!")
}
year = 2052;
leapYear =isLeapYear(year);//呼叫方法
if(leapYear){
System.out.println(year +"是閏年!")
}
四、特殊方法:程式入口main方法
main方法是一個特殊方法,它是Java程式的入口方法,執行Java程式時,JVM會呼叫main方法。
public static void main (String[]args){}
五、方法的區域性變數
區域性變數是指在方法中宣告的變數,其作用範圍僅限於方法中
區域性變數使用前必須進行初始化。(定義在main方法中的變數也是區域性變數)
boolean isLeapYear (int year){
boolean isLeap = false;//宣告瞭一個區域性變數並進行初始化
if(year%4==0 && year%100 != 0 || year%400 != 0){
isLeap = true;
}
return isLeap;
}
public classA{
public static void main (String[]args){
int i =6; //整數(實參,區域性變數)
int [] array = {1,2,3}; //陣列(實參,區域性變數,傳陣列的地址)
test(i,array);
System.out.println(i+""+array[0]);
}
public static void test(int i,int []array){ //形參
i += 3;
array[0] += 3;
}
}
//輸出結果:6 4
六、類的靜態變數
靜態變數(也稱為類變數)是使用static關鍵字宣告的變數,這些變數屬於類本身,而不是類的任何特定例項(靜態變數在使用前無需初始化。)
public class HellWorld{
public static boolean isLeap;//全域性變數(預設自動化)
public static void method01(){ //
isLeap = true;//共享全域性變數
}
public static void method02(){
isLeap = true;//共享全域性變數
}
}
七、類的靜態方法
靜態方法是使用static關鍵字定義的方法,靜態方法可以訪問類的靜態變數和靜態方法,但不能訪問類的例項方法和例項變數。
八、方法的傳參
1.實參和形參
實參:呼叫方法輸入的變數或常量值
形參:方法中定義的資料型別變數。
2.值傳遞
實參將資料傳遞給形參時,形參的改變改變不影響原實參的值,即值傳遞只會改變形參,不會改變實參。(基本資料型別)
3.引用傳遞
引用傳遞:是指在呼叫函式時,將實際引數的地址傳遞給函式,這樣在函式中對引數的修改,將影響到實際引數。(引用資料型別)
引用資料傳遞的不是真正的資料地址,是引用的堆記憶體中的地址,無論引用傳遞的資料怎麼改變,它也只是引用的堆記憶體中的地址,原資料組的資料地址並沒有被改變,改變那部分的值只是形參複製給實參使用的的地址,並不是把原地址改變。
4.總結
-
在Java中,引數傳參本質上只存在值傳遞。
-
值傳遞時,形參改變並不會影響到實參。
在函式中,只有修改了實參所指向的物件內容,也就是引用堆記憶體中的地址,才會影響到實參
public classA{
public static void main (String[]args){
int i =6; //整數(實參,區域性變數)
int [] array = {1,2,3}; //陣列(實參,區域性變數,傳陣列的地址)
test(i,array);
System.out.println(i+""+array[0]);
}
public static void test(int i,int []array){//形參
i += 3;
array[0] += 3;
}
}
//輸出結果:6 4
九、方法的過載
方法的過載指的是在同一個類中,有一個以上的同名方法,但方法的引數個數或引數型別有所不同(與方法的返回值無關)
方法過載是對於 一個類。
public static int addNum(int a,int b){
int sum = a +b;
return sum;
}
//提取一個方法,計算三個數的和並列印
public static int addNum2(int a,int b,int c){
int sum = a +b +c;
return sum;
}
例如,以下都屬於方法的過載
void show (int a,char b,double c);
void show (int a,double b,char c);
void show (int a,int b);
void show (int a);
double show(int a,char b,double c);