在前面咱們常用到System.out.println(),那麼它是什麼呢?java
這句話的用法是調用系統類System中的標準輸出對象out中的方法println()。數組
java方法是語句的集合,他們在一塊兒執行一個功能。函數
修飾符 返回值類型 方法名(參數類型 參數名){ 。。。 方法體 。。。 return 返回值; }
Java支持兩種調用方法的方式,根據方法是否返回值來選擇。測試
當程序調用一個方法時,程序的控制權交給了被調用的方法。當被調用方法的返回語句執行或者到達方法體閉括號時候交換控制權給程序。spa
當方法返回一個值的時候,方法調用一般被看成一個值。例如:命令行
int larger=max(30,40);
若是方法返回值是void(能夠有參數),方法調用必定是一條語句。例如,方法println()返回void。下面的調用是個語句:對象
public void ending(){ System.out.println("Thanking for view!") }
沒法從靜態上下文中引用非靜態方法。 blog
package pkg2020華南虎; /** * * @author yl */ public class TestMax { public static void main(String[] args) { int i = 20; int j = 23; int k = max(i, j); System.out.println("Max number is "+k+"."); } public static int max(int a, int b) { int result; if (a > b) { result = a; } else { result = b; } return result; } }
main方法是被JVM調用 的,除此以外,main方法和其餘方法沒什麼區別。String【】代表參數是字符串數組。繼承
package pkg2020華南虎; /** * * @author yl */ public class TestVoidMethod { public static void main(String[] args) { printGrade(78.5); } static void printGrade(double score) { if (score > 90) { System.out.println(score + " is perfect."); } else if (score > 60) { System.out.println(score + " is OK."); } else { System.out.println(score + " is Flunk."); } } }
這裏printGrade方法是一個void類型方法,它不返回值。內存
一個void方法的調用必定是一個語句。
調用一個方法的時候須要提供參數,你必須按照參數列表指定的順序提供。
例如,下面的方法n次打印一個消息。
public static void nPrintln(String message,int n){ for(int i<0;i<n;i++){ System.out.println(message); } }
下面的例子演示按值傳遞的效果。
該程序建立一個方法,該方法用於交換兩個變量。
package pkg2020華南虎; /** * * @author yl */ public class SwapValue { public static void main(String[] args) { int num1 = 1; int num2 = 5; swap(num1, num2); System.out.println("num1,num2:" + num1 + "," + num2); } static void swap(int a, int b) { int temp; temp = a; a = b; b = temp; } }
傳遞兩個參數調用swap方法。可是,方法被調用後,實參的值並無改變。
上面使用的max方法僅僅適用於int類型的數據,可是若是你想要的到兩個浮點型數據的最大值呢?
解決方法是建立另外一個有相同名字可是參數不一樣的方法,以下代碼所示:
public static double max(double num1,double num2){ int result; if(num1>num2) result=num1; else result=num2; return result; }
若是你調用max方法時傳遞的是int型參數,則int型參數的max方法會被調用。
若是傳遞的是double型參數,則double類型的max方法體會被調用,這稱爲方法重載。
即一個類的兩個方法擁有相同的名字,可是有不一樣的參數列表。Java編譯器根據方法簽名判斷哪一個方法應該被調用。方法重載可讓程序更清晰易讀。執行密切相關任務的方法應該使用相同的名字。
package pkg2020華南虎; /** * * @author yl */ public class CommandLine { public static void main(String[] args) { for(int i=0;i<args.length;i++){ System.out.println("args["+i+"]"+args[i]); } } }
當一個對象被建立的時候,構造方法用來初始化該對象。構造方法和它所在類的名字相同,但構造方法沒有返回值。
一般會使用構造方法給一個類的實例變量賦初值,或者執行其餘必要的步驟來建立一個完整的對象。
無論你是否自定義構造方法,全部的類都有構造方法,由於Java自動提供了一個默認構造方法,默認構造方法的訪問修改符和類的訪問修改符相同(類爲public,構造函數也爲public;類改成protected,構造函數也改成protected)。一旦你定義了本身的構造方法,默認構造方法就會失效。
實例
class MyClass{ int x; MyClass(){//構造函數 x=10; } }
也能夠像下面這樣調用構造方法來初始化一個對象:
public class ConsDemo{ public static void main(String[]args){ MyClass t1=new MyClass(); MyClass t2=new MyClass(); System.out.println(t1.x+" "+t2.x); } }
大多時候須要一個有參數的構造方法。
實例
class MyClass{ int x; MyClass(int i){//構造函數 x=i; } }
public class ConsDemo{ public static void main(String args[]){ MyClass t1=new MyClass(10); MyClass t2=new MyClass(20); System.out.println(t1.x+" "+t2.x); } }
JDK1.5開始,Java支持傳遞同類型的可變參數給一個方法。
實例
Java容許定義這樣的方法,它在對象被垃圾收集器(回收)以前調用,這個方法叫作finalize(),它用來清除回收對象。例如,你可使用finalize()來確保一個對象打開的文件被關閉了。
在finalize()方法裏,你必須指定在對象銷燬時候要執行的操做。
finalize()通常格式是:
protected void finalize(){ //終結代碼 }
protected限定符不可被繼承,確保finalize()方法不會被該類之外的代碼調用;void返回語句。
固然,Java的內存回收能夠由JVM來自動完成。若是你手動使用,則可使用上面的方法。