1. 程式人生 > 實用技巧 >java函式/方法

java函式/方法

目錄

前言

在前面幾個章節中我們經常使用到 System.out.println(),那麼它是什麼呢?

  • println() 是一個方法。
  • System 是系統類。
  • out 是標準輸出物件。

這句話的用法是呼叫系統類 System 中的標準輸出物件 out 中的方法 println()。

那麼什麼是方法呢?

Java方法是語句的集合,它們在一起執行一個功能。

  • 方法是解決一類問題的步驟的有序組合
  • 方法包含於類或物件中
  • 方法在程式中被建立,在其他地方被引用

方法的優點

  • \1. 使程式變得更簡短而清晰。
  • \2. 有利於程式維護。
  • \3. 可以提高程式開發的效率。
  • \4. 提高了程式碼的重用性。

方法的命名規則

  • 1.方法的名字的第一個單詞應以小寫字母作為開頭,後面的單詞則用大寫字母開頭寫,不使用連線符。例如:addPerson
  • 2.下劃線可能出現在 JUnit 測試方法名稱中用以分隔名稱的邏輯元件。一個典型的模式是:test_,例如 testPop_emptyStack

方法的定義

一般情況下,定義一個方法包含以下語法:

修飾符 返回值型別 方法名(引數型別 引數名){
    ...
    方法體
    ...
    return 返回值;
}

方法包含一個方法頭和一個方法體。下面是一個方法的所有部分:

  • 修飾符:修飾符,這是可選的,告訴編譯器如何呼叫該方法。定義了該方法的訪問型別。
  • 返回值型別 :方法可能會返回值。returnValueType 是方法返回值的資料型別。有些方法執行所需的操作,但沒有返回值。在這種情況下,returnValueType 是關鍵字void
  • 方法名:是方法的實際名稱。方法名和引數表共同構成方法簽名。
  • 引數型別:引數像是一個佔位符。當方法被呼叫時,傳遞值給引數。這個值被稱為實參或變數。引數列表是指方法的引數型別、順序和引數的個數。引數是可選的,方法可以不包含任何引數。
  • 方法體:方法體包含具體的語句,定義該方法的功能。

如:

public static int age(int birthday){...}

引數可以有多個:

static float interest(float principal, int year){...}


//列子
public class Test {
	//main方法\函式  java程式入口
	public static void main(String[] args) {
		int a = 1;
		int b = 2;
		System.out.println(max(a,b));
	}
	public static int max(int num1, int num2) {
		  return num1 > num2 ? num1 : num2;
		}

}

注意: 在一些其它語言中方法指過程和函式。一個返回非void型別返回值的方法稱為函式;一個返回void型別返回值的方法叫做過程。

方法呼叫

Java 支援兩種呼叫方法的方式,根據方法是否返回值來選擇。

當程式呼叫一個方法時,程式的控制權交給了被呼叫的方法。當被呼叫方法的返回語句執行或者到達方法體閉括號時候交還控制權給程式。

當方法返回一個值的時候,方法呼叫通常被當做一個值。例如:

int larger = max(30, 40);

如果方法返回值是void,方法呼叫一定是一條語句。例如,方法println返回void。下面的呼叫是個語句:

System.out.println("歡迎訪問jj教程!");

void 關鍵字

問題1:java 方法一定要有返回值嗎

土話:有了void關鍵字就不需要進行return 如果定義了返回值型別必須要有return

問題2java中的方法可以不寫返回值型別嗎?

不可以,方法返回值型別是方法宣告語法中必須的,如果方法不返回內容,也必須在方法宣告的時候指名返回型別void
這個是語法要求的,不可省略
java中方法的三要素就是返回值型別,方法名,引數列表,三者缺一不可.
構造方法是特殊的方法,語法要求它是沒有返回值型別的,這個除外

本節說明如何宣告和呼叫一個 void 方法。

下面的例子聲明瞭一個名為 printGrade 的方法,並且呼叫它來列印給定的分數。

public class TestVoidMethod {
  public static void main(String[] args) {
    printGrade(78.5);
  }
 
  public static void printGrade(double score) {
    if (score >= 90.0) {
       System.out.println('A');
    }
    else if (score >= 80.0) {
       System.out.println('B');
    }
    else if (score >= 70.0) {
       System.out.println('C');
    }
    else if (score >= 60.0) {
       System.out.println('D');
    }
    else {
       System.out.println('F');
    }
  }
}

通過值傳遞引數

思考1:java傳參有沒有python中的關鍵字傳參?

沒有 只有位置傳參

思考2:java方法引數傳遞方式是傳遞值還是就是傳遞地址?

總結:java引數傳遞方式只有值傳遞一種方式而已,傳遞的引數一直都是原始引數的副本。
參考https://www.cnblogs.com/lin0/p/12356607.html

思考3:java方法引數可以傳遞陣列嗎?

在java中,所有物件都是通過引用進行操作的。而陣列也是一種物件,當把陣列作為引數傳遞給方法時,傳遞的實際上就是陣列物件的引用。在方法中對陣列的所有操作,都會對映到原陣列中。而所謂的"引用",就是java物件在堆記憶體的地址賦給了多個"棧記憶體"的變數。

public class Test {
    public static void main(String[] args) {
        int[] array = { 1, 3, 5 }; // 使用靜態初始化定義陣列
        method(array); // 傳遞陣列引用
        for (int i = 0; i < array.length; i++) { // 迴圈輸出
            System.out.print(array[i] + "\t");
        }
    }
    public static void method(int[] x) { // 接收整型陣列引用
        x[0] = 6; // 修改第一個元素的內容
    }
}

方法的過載

方法過載:指在同一個類中,允許存在一個以上的同名方法,只要它們的引數列表不同即可,與修飾符和返回值型別無關。

引數列表:個數不同,資料型別不同,順序不同。

1 可以有不同的返回型別,只要引數列表不同就可以;

2 可以有不同的訪問修飾符;

過載方法呼叫:JVM通過方法的引數列表,呼叫不同的方法。

方法過載判斷

編寫步驟:
定義類 Test1,類中定義 main方法
定義doubling方法,引數為(int r, int p),返回值無,方法內r翻倍,p翻倍,並呼叫printNum方法,輸出r和p的值
定義doubling方法,引數為(int r),返回值int, 方法內r翻倍,返回r.




    public class Test1 {
        public static void main(String[] args) {
            // pass
        }
        // 定義doubling方法,引數為(int r, int p),返回值無,方法內r翻倍,p翻倍,並呼叫printNum方法,輸出r和p的值
        public static void doubling(int r, int p) {
            r *= 2;
            p *= 2;
            System.out.println("翻倍:r=" + r + ",p=" + p);
        }
        // 定義doubling方法,引數為(int r),返回值int, 方法內r翻倍,返回r.
        public static int doubling(int r) {
            r *= 2;
            return r;
        }
    }

變數作用域

變數的範圍是程式中該變數可以被引用的部分。

方法內定義的變數被稱為區域性變數。

區域性變數的作用範圍從宣告開始,直到包含它的塊結束。

區域性變數必須宣告才可以使用。

方法的引數範圍涵蓋整個方法。引數實際上是一個區域性變數。

for迴圈的初始化部分宣告的變數,其作用範圍在整個迴圈。

但迴圈體內宣告的變數其適用範圍是從它宣告到迴圈體結束。它包含如下所示的變數宣告:

你可以在一個方法裡,不同的非巢狀塊中多次宣告一個具有相同的名稱區域性變數,但你不能在巢狀塊內兩次宣告區域性變數。

命令列引數的使用

pass 太高深

https://www.cnblogs.com/jtlgb/p/8466138.html

構造方法

pass 到物件在詳細聊

修飾符

思考1 java 方法中的修飾符有那幾種?

最常見如下 訪問修飾符

修飾符 當前類 同一包內 子孫類(同一包) 子孫類(不同包) 其他包
public Y Y Y Y Y
protected Y Y Y Y/N(說明 N
default Y Y Y N N
private Y N N N N

Java語言提供了很多修飾符,主要分為以下兩類:

  • 訪問修飾符
  • 非訪問修飾符

修飾符用來定義類、方法或者變數,通常放在語句的最前端。我們通過下面的例子來說明:

java中的修飾符分為類修飾符,欄位修飾符,方法修bai飾符。根據功能的不同,主要分為以下幾種

pass 修飾符 專門文章講