第五天 java
java方法是語句的集合,他們在一起執行了一個功能.,比如司機開車,老師教書等
方法是解決一類問題的步驟的有序組合
方法在類和對象中
方法在程序中被創建,在其他地方被引用
方法的優點
使程序變的更加簡短清晰;
有利於維護
提高程序開發效率
提高代碼的重(cong)用性,一次編寫多吃使用
方法的定義
一般情況下定義一個方法如下
修飾符 返回類型 方法名(參數類型 參數名,參數類型 參數名2){ ... 方法體 ... return 返回值; }
修飾符 | 可選的,告訴編譯器如何編譯方法,定義了方法的訪問類型. 方法的修飾符分為訪問控制修飾符和非訪問控制修飾符.修飾符在之後具體學習. |
返回類型 | 方法的返回值類型,如果方法不返回任何值,為void. |
參數類型 | 用於限定調用方法時傳入數據類型, |
參數名 | 一個變量用於接收調用方法接收的參數. |
return | 用於結束方法並且返回方法指定類型的值 .方法返回值必須為方法聲明的反復類型, 如果沒有返回值也就是說 返回類型為void,此時return可省略. |
返回值 | 被renturn語句返回的值,返回給調用者. |
方法體: | 方法體包含具體的語句,定義該方法的功能。 |
參數列表 (參數類型 參數名1,參數類型 參數名2) | 用於描述方法被調用時需要接受的參數類型. 參數是可選的,可以不包含任何參數只寫(); |
方法名 | 自定義的名字,但要符合命名規範,最好使用 lowerCamelCase 風格,必須遵駝峰形式 |
例子:
public static int age(int age){...}
多個參數
static float getnumber(float a,float b){...}
方法的調用
java支持兩種方法調用方法:
當程序調用方法的時候,就把控制權交給了被調用的方法,當被調用的方法的返回語句執行或者到達方法體閉括號時候交還給程序.
當方法返回一個一個值的時候,方法調用通常被當作一個值;例如
調用方式:對象名.方法名
int larger = max(30, 40);
當方法的返回值是void,方法調用一定是一條語句例如:
System.out.println("hello world!");
實例:定義了一個getArea()方法用於求矩形的面積,參數x和y分別用於接收調用方法時傳入的高和寬,return語句用於返回計算所得的面積。在main()方法中通過調用getArea()方法,獲得矩形的面積,並將結果打印。 方法println返回void。下面的調用是個語句:
public class MethodDemo01 { public static void main(String[] args) { int area = getArea(3, 5); // 調用 getArea方法 System.out.println(" The area is " + area); } // 下面定義了一個求矩形面積的方法,接收兩個參數,其中x為高,y為寬 public static int getArea(int x, int y) { int temp = x * y; // 使用變量temp記住運算結果 return temp; // 將變量temp的值返回 } }
main 方法的頭部是不變的,如例子所示,帶修飾符 public 和 static,返回 void 類型值,方法名字是 main,此外帶個一個 String[] 類型參數。String[] 表明參數是字符串數組。
方法的調用過程
從mian方法入口,開始執行程序
從mian方法的代碼開中開始執行程序
調用方法getArea,傳遞參數3和5進去.(參數傳遞時有順序的)
getArea方法開始執行
計算temp=w*h=30
return temp;將return後面的數據返回給方法的調用者.
在方法定義後,參數變量w,h沒有具體的數值,在調用的時候,數值由傳遞著傳遞過來.
方法的參數變量稱為形式參數,形參 intgetArea(int w,int h) wh為形參
而調用方法的時候,傳遞的數據為實際參數,就是實參int a= getArea(a,b) ab就是實參
JVM將內存進行了劃分,分為了5個區域
寄存器:內存和CPU之間
本地方法棧:JVM調用了系統的功能,
方法和數據共享區:運行時期claa文件進去的地方
方法棧:所有的方法運行的時候進入的時候內存
堆:存儲容器和對象.比如數組
方法調用內存圖
程序運行時期,必須要進入內存
運行文件後,編譯的class文件進去內方法和數據共享區
JVM虛擬機調用mian方法,
main方法進發方法棧開始運行
mian方法中調用方法getArea並傳遞參數
getArea方法進棧運行
計算結果返回調用者.
方法getArea結束出棧,釋放內存資源
方法定義的註意事項:
方法不能定義在另一個方法裏面
寫錯方法名
寫錯了參數列表
方法重復定義問題
調用方法的時候,返回值是void,不能卸載輸出語句中
方法參數
按值傳遞:方法接受的是調用者提供給的值
按引用傳遞:方法接受的是調用者提供的變量對應的變量值.
一個方法可以修改傳遞引用所對應的變量值,而不能更改傳遞值所對應的變量值
java程序設計語言總是采用按值調用
方法參數共有兩種:
基本數據類型:
對象引用:
基本數據類型例子:
publci static void value(int x){
x = 3 * x;
}
調用這個方法
int a = 10;
value(a)
//結果a為10
無論這樣,調用這個方法之後,a的值還是10,具體過程
形參x被初始化a值的拷貝(也就是10)
x乘3後等於30 但是a任然是10;
方法結束後 x不在使用
一個方法不能修改一個基本數據類型的參數,
對象引用例子
public class MethodDemo_3{
public static void main(String[] args){
int[] arr = {1,2,3,4};
System.out.println(arr[2]); // 3
change(arr);
System.out.println(arr[2]); // 100
}
public static void change(int[] arr){
arr[2] = 100;
}
}
總結:一個方法不能修改一個基本數據類型的參數(數值型和布爾型)
一個方法可以改變一個對象參數的狀態
一個方法不能讓對象引用一個新的對象
方法重載
如果多個方法有相同的名字,不同的參數,便產生了重載.編譯器必須挑選具體執行那個方法,他通過各種方法給出的參數類型與特定方法調用所
使用的類型進行匹配,來挑選出相應的方法.如果編譯器找不到匹配的參數,或者找出多個可能的匹配,就會產生編譯時錯誤.這個過程稱為重載解析,
java運行重載任何的方法.
因此要完整的描述一個方法需要指出方法名和參數類型,這個叫做方法的簽名.
返回類型不是方法簽名的一部分也就是說,不能有兩個名字相同,參數類型也相同卻返回不同類型的方法
public class MethodOverLoadDemo{
public static void main(String[] args){
//對於重載的調用,根據參數傳遞進行區分
//System.out.println();
double sum = getSum(2.3,3.5);
System.out.println(sum);
}
/*
對參數求和,利用方法的重載特性
*/
public static int getSum(int a,int b){
System.out.println("兩個int參數");
return a+b;
}
public static int getSum(int a,int b,int c){
System.out.println("三個int參數");
return a+b+c;
}
public static double getSum(double a,double b){
System.out.println("兩個double參數");
return a+b;
}
/*
定義方法,對參數求和
參數,沒規定幾個,數據類型
public static int getSum(int a ,int b){
return a+b;
}
public static double getSumDouble(double a,double b){
return a+b;
}
public static int getSum3(int a,int b, int c){
return a+b+c;
}*/
}
第五天 java