關于方法的一些筆記
Java方法詳解
何謂方法(了解)
System.out.println()
// 類 對象 方法
- 方法是語句的集合,它們在一起執行一個功能。
- 方法是解決一類問題的步驟的有序集合
- 方法包含于類或對象中
- 方法在程式中被建立,在其他地方被引用
- 設計方法的原則:方法的本意是功能塊,就是實作某個功能的語句塊的集合。我們設計方法的時候,最好保持方法的原子性,就是一個方法隻完成1個功能,這樣利于我們後期的擴充。
//main方法
public static void main(String[] args) {
// int add = add(1,2);
// System.out.println(add);
test();
}
//加法
public static int add(int a,int b){
return a+b;
}
public static void test(){
for (int i=0;i<=1000;i++){
if(i%5==0){
System.out.print(i + "\t");
}
if(i%(5*3)==0){
System.out.print("\n");
}
}
}
方法的定義及調用
方法的定義
- Java的方法類似于C中的函數,是一段用來完成特定功能的代碼片段,一般情況下,定義一個方法包含以下文法:
- 方法包含一個方法頭和一個方法體。下面是一個方法的所有部分:
修飾符 傳回值類型 方法名(參數類型 參數名){
...
方法體
...
return 傳回值;
}
-
- 修飾符:修飾符,這是可選的,告訴編譯器如何調用該方法。定義了該方法的通路類型。
- 傳回值類型:方法可能會傳回值。returnValueType是方法傳回值的資料類型。有些方法執行所需的操作,但沒有傳回值。在這種情況下,returnValueType是關鍵字void。
- 方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。
- 參數類型:參數像是以一個占位符。當方法被調用時,傳遞值給參數。這個值被稱為實參或變量。參數清單是指方法的參數類型、順序和參數的個數。參數是可選的,方法可以不包含任何參數。
- 形式參數:在方法被調用時用于接收外界輸入的資料。
- 實參:調用方法時實際傳給方法的資料。
- 方法體:方法體包含具體的語句,定義該方法的功能。
方法的調用
- 調用方法:對象名.方法名(實參清單)
- Java支援兩種調用方法的方式,根據方法是否傳回值來選擇。
- 當方法傳回一個值的時候,方法調用通常被當作一個值。例如:
int larger = max(30,40);
- 如果方法傳回值是void,方法調用一定是一條語句。
System.out.println("Hello,world!");
- 值傳遞(Java)和引用傳遞
方法重載
- 重載就是在一個類中,有相同的函數名稱,但形參不同的函數。
- 方法的重載的規則:
- 方法名稱必須相同。
- 參數清單必須不同(個數不同、或類型不同、參數排列順序不同等)。
- 方法的傳回類型可以相同也可以不相同。
- 僅僅傳回類型不同不足以成為方法的重載。
- 實作理論:
- 方法名稱相同時,編譯器會根據調用方法的而參數個數、參數類型等去逐個比對,以選擇對應的方法,如果比對失敗,則編譯器報錯。
public static void main(String[] args) {
//int max = max(10,20);
double max = max(10.0,20.0);
System.out.println(max);
}
//比大小
public static double max(double num1,double num2){
double result = -1;
if (num1 == num2) {
System.out.println("num1==num2");
return 0;//終止方法
}
if(num1>num2){
result = num1;
}else{
result = num2;
}
return result;
}
//比大小
public static int max(int num1,int num2){
int result = -1;
if (num1 == num2) {
System.out.println("num1==num2");
return 0;//終止方法
}
if(num1>num2){
result = num1;
}else{
result = num2;
}
return result;
}
指令行傳參(拓展)
- 有時候你希望運作一個程式的時候再傳遞給它消息。這要靠傳遞指令行參數給main()函數實作。
public class CommandLineDemo {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]: " + args[i]);
}
}
}

可變參數
不定項參數,即不一定傳遞幾個參數
- JDK1.5開始,Java支援傳遞同類型的可變參數給一個方法。
- 在方法聲明中,在指定參數類型後加一個省略号(...)。
- 一個方法隻能指定一個可變參數,它必須是方法的最後一個參數。任何普通的參數必須在它之前聲明。
public class Demo03 {
public static void main(String[] args) {
Demo03 demo03 = new Demo03();
demo03.test();
}
public void test(int... i){
System.out.println(i);
}
public class Demo03 {
public static void main(String[] args) {
Demo03 demo03 = new Demo03();
demo03.test(1);
}
public void test(int... i){
System.out.println(i[0]);
}
public class Demo03 {
public static void main(String[] args) {
Demo03 demo03 = new Demo03();
demo03.test(1,2,2,3,4,5);
}
public void test(int... i){
System.out.println(i[3]);
}
public class Demo03 {
public static void main(String[] args) {
Demo03 demo03 = new Demo03();
demo03.test(1,2,2,3,4,5);
}
public void test(int... i){
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(i[4]);
System.out.println(i[5]);
}
源碼
public class Demo04 {
//排序算法,判斷誰是最大的
public static void main(String[] args) {
//調用可變參數的方法
printMax(34, 3, 3, 2, 56.5);
printMax(new double[]{1,2,3});
}
public static void printMax(double... numbers){
if (numbers.length == 0){
System.out.println("No argument passed");
}
double result = numbers[0];
//排序!
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > result){
result = numbers[i];
}
}
System.out.println("The max value is "+ result);
}
遞歸
- 遞歸就是:A方法調用A方法!就是自己調用自己
- 遞歸的能力在于用有限的語句來定義對象的無限集合
- 遞歸結構包括兩個部分:
- 遞歸頭:什麼時候不調用自身方法。如果沒有頭,将陷入死循環。
- 遞歸體:什麼時候需要調用自身方法。
//2! 2*1
//3! 3*2*1
//5! 5*4*3*2*1
public static void main(String[] args) {
System.out.println(f(5));
}
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n-1);
}
}