java中的方法

Shy寶不哭發表於2020-11-26

java中的方法


1、方法

  • 1.1 什麼是方法?
    (method 在c語言中又被稱為函式)就是可以重複利用完成某個特定功能的程式碼片段。

  • 1.2 定義

    • [] 中括號,裡面的內容不是必須的,是可選的。
    • 語法機制:[修飾符列表] 返回值型別 方法名(形參列表){
      方法體;
      }
    • 修飾符列表先統一寫成:public static
    • 返回值型別 :
      • 1.基本資料型別
      • 2.引用資料型別
    • 什麼叫返回值:
      • 方法結束後的結果,一般會是一個資料。
        方法就是為了完成某個特定的結果。
  • 1.3 當一個方法結束 不返回任何型別時,也不能為空,用void。

  • 1.4 方法必須呼叫才能執行。

    • 類名.方法名(實參列表);

    • //計算兩個int型別的 商。
      
      public static int Shang(int a,int b){
      	int jieguo = a/b;
      	return jieguo;//或者直接 return a/b;
      }
      public static void divided(int x,int y){
      	System.out.println(x/y);
      }
      
      
      
      //當一個方法有返回值時,也可以不接收,但是沒有意義。返回後記憶體馬上釋放,        因為沒有接收。
      
       public class PrintTest{
      	public static void main(String[] args){
      		print();
      	}
      	 public static void print(){
      		System.out.println("輸出一個語句");
       	}
      }
      
    • //注意:呼叫程式 不一定得在main 方法中,其他方法也可以呼叫。
      public class Test{
      public static void main(String[] args){
      	m();
      }
      public static void m(){
      	n();
      }
      
      public static void n(){
      	m();
      }
      
      public static void l(){
      	m();
      	n();
      	l();
      	return;
      }
      
      }
      
      方法體中 程式碼執行順序 依次執行,自上而下。main方法其實也只是一種普通的方法。
      只不過main 方法是jvm中的,作為程式的入口。
      
  • 2、break 和 return 的區別。

    • public class ForTest{
      	public static void main(String[] args){
      		for(int i = 1;i <= 10;i++){
      			if(i == 3){
      			break;//終止for迴圈
      			return ;// 終止的是方法,執行了的話程式結束,不會輸出“cao”。
      			}
      		System.out.println(i);
      		}
      	System.out.println("cao");
      	}
      }
         
      break 語句 只能使用在 switch 分支 還有迴圈中。
      
  • 3、編譯與執行

    • 編譯器只負責編譯,編譯器只知道 flag 是boolean 型別,不能確定flag是真是假,故而認為缺少返回語句。編譯器不負責執行。

    • public static int m(){
      	boolean flag = true;
      	if(flag){
      	return 1;
      	}
      }
      
    • return 語句一旦執行 方法結束。所以在同一個作用域下 return 語句下方 不可以寫程式碼。

  • **4、jvm 三塊主要記憶體區:堆 棧 方法區 **

    • 1.方法區:類載入器(classloader)將硬碟中的xxx.class位元組碼檔案裝載到jvm當中的時候,會將位元組碼檔案存放到方法區中。也就是方法區存放的是 程式碼片段。因為類需要載入,所以方法區最先有資料。

    • 2.方法:在呼叫時會在 棧(stack)記憶體中分配空間。

    • 資料結構 通常 是指儲存資料的容器。一種非常經典的資料結構(stack)。

      • 壓棧(push)

      • 出棧(pop)

        棧頂元素(棧幀 永遠指向棧頂元素):處於棧頂部元素 具有活躍權。
        先進後出

    • 區域性變數只在方法體中 有效。方法結束後 區域性變數的記憶體就釋放了。也就是彈棧。

    • 注意:方法不呼叫是不會在棧記憶體中開闢空間的,呼叫就是壓棧。

    • 棧儲存了方法執行所需要的空間,還會儲存方法的區域性變數。


  • 5、方法過載

      • 1.整齊 美觀

      • 2.功能相似,可以讓方法名字相同

    • java 語言怎麼進行方法區分?

      • 答:先從方法名區分,再從引數型別進行區分。
    • 3、什麼時候使用過載?也就是功能相似,方法名相同,引數型別不同(注意要在同一個類中)

      • 答:同一個類中,如果功能1和功能2 相似,可以考慮 方法名一致。
      • 三個條件:1.同一個類
        2.功能相似
        3.引數列表不同
      • 注意:方法的返回值型別和過載無關。與修飾符列表也沒有關係,只與引數列表相關。
      • 而且println 肯定過載了,引數型別隨便傳。
  • 6、方法遞迴

    • 遞迴沒有結束條件的時候,會發生棧記憶體溢位。(stackoverflowerror)

    • 假設結束條件是對的,因為可能遞迴太深了,依然會炸棧。
      能用迴圈 儘量用迴圈,因為迴圈效率高,耗費記憶體小。可能會導致jvm退出。但極少情況下,有些程式不用遞迴無法實現。

    • //使用遞迴 方法 編寫 1-n 的和。
      public static int sum(int n){
      	if(n == 1){
      	return 1;
      	}
      	return n + sum(n-1);
      }
      //使用遞迴的方法計算n 的階乘。
      public static int result(int n){
      	if(n==1){
      	return 1;
      	}
      	return n * result(n-1);
      }
      

7、物件導向和麵向過程的區別。

  • c 語言:完全程式導向(因果關係)。沒有物件的概念,只有步驟。耦合度 :太高,
    擴充套件性 :太低。(關注的是步驟)

    • java: 完全物件導向。
    • 物件導向 就是將世界分成不同的單元,然後每一個單元都實現成物件,然後給個環境
      驅動一下,讓物件之間協作起來形成一個系統。

    • OOA:分析
      OOD:設計
      OOP:程式設計 OO:物件導向

擴充套件性 :太低。(關注的是步驟)

    • java: 完全物件導向。
    • 物件導向 就是將世界分成不同的單元,然後每一個單元都實現成物件,然後給個環境
      驅動一下,讓物件之間協作起來形成一個系統。

    • OOA:分析
      OOD:設計
      OOP:程式設計 OO:物件導向

相關文章