程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 100天JAVA學習計劃03-淺談方法

100天JAVA學習計劃03-淺談方法

編輯:JAVA綜合教程

100天JAVA學習計劃03-淺談方法


今天是第三天啦,哦,今天是3月30號,一個偉大的日子,本博主的生日!
今天主要簡單的了解一下Java中的方法!
在上一篇文章中已經提到了方法長啥樣,可能有些小伙伴會說,好像跟C語言裡的函數差不多嘛(PS:原諒我會不止一次的提到C語言,畢竟這是博主寫代碼的啟蒙語言!)。從長相上來看,確實差不多,但是地位上可差遠了,Java可不是顏控喲!Java之所以稱之為面向對象的語言,自然地位最高的就是類和對象,而C語言是結構化的語言,所以在C中函數才如此的重要!在Java中,方法的地位是永遠趕不上類和對象的,所以,方法是不能獨立存在,也不能獨立執行,必須屬於類或者對象如果這個方法用了static修飾,那麼這個方法屬於類,也叫作靜態方法,通常使用類.方法名進行調用;如果沒有用static修飾,那麼使用對象.方法名進行調用,再說一遍,方法只能被類或者對象調用,永遠不能獨立執行!!!那有的小伙伴就要反駁我了,我試過,在同一個類中,可以在一個方法中直接調用另一個方法!這其實是這麼回事,在同一個類中一個方法調用另一個方法,java會自己給它加上調用者的,普通方法就用this關鍵字,靜態方法就用類名啦
下面我們來了解一下java方法的參數傳遞!在Java中,方法參數的傳遞方法只有一種,是值傳遞!值傳遞的意思就是說,我有一個參數,如果你方法想要我的參數,那我是不會給你參數的,我把參數的值copy一份給你用,但是參數還在我手裡!官方一點的說法是,將實際參數值的副本傳入方法而方法本身不受影響!下面這段代碼就解釋了值傳遞!

import java.util.*;
//值傳遞演示代碼1
public class Main{

    public static void changenum(int num1,int num2){
        int temp = num1;
        num1 = num2;
        num2 = temp;
        System.out.println("在方法中:");
        System.out.println("num1 = "+num1+";num2 = "+num2);
    } 

    public static void main(String[] args){

        int num1 = 1;
        int num2 = 2;
        changenum(num1,num2);
        System.out.println("在main中:");
        System.out.println("num1 = "+num1+";num2 = "+num2);
    }
}

運行結果如圖:
這裡寫圖片描述
這裡可以清晰的看到在方法中,傳入的副本被交換了,而在main中,原來的參數不受任何影響!
小伙伴們再來仔細的看這段代碼,changenum(int num1,int num2)方法用了static修飾,也就是說,把他設定為靜態方法,那麼如果我把這個static去掉會怎麼樣呢?<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;"> import java.util.*; //值傳遞演示代碼2 //這段代碼中和代碼1的唯一區別是把 changenum(int num1,int num2)前的static去掉了 public class Main{ public void changenum(int num1,int num2){//前面沒有static了喲! int temp = num1; num1 = num2; num2 = temp; System.out.println("在方法中:"); System.out.println("num1 = "+num1+";num2 = "+num2); } public static void main(String[] args){ int num1 = 1; int num2 = 2; changenum(num1,num2); System.out.println("在main中:"); System.out.println("num1 = "+num1+";num2 = "+num2); } }

那麼如果我們在命令行編譯一下會發生什麼呢?如下圖:
這裡寫圖片描述
哦哦,出錯了,這個錯誤很好地驗證了靜態成員(用static修飾)不能直接訪問非靜態成員(不用stati╧y"http://www.Bkjia.com/kf/yidong/wp/" target="_blank" class="keylink">WPQ3srOo6k8L3N0cm9uZz6ho9LyzqptYWlut723qNaux7C808HLc3RhdGljo6zL+dLUy/y+zbK7xNzWsb3Tt8POyrfHvrLMrLXEY2hhbmdlbnVtt723qKOh16LS4sCyo6zKx7K7xNzWsb3Tt8POyqOsz+vSqrfDzsqjrLu5yse/ydLU1/a1vbXEo6HU2m1haW63vbeo1tDV4tH50LS+zb/J0tTAsqOhPC9wPg0KPHByZSBjbGFzcz0="brush:java;"> Main test = new Main(); test.changenum(num1,num2);

創建個對象就搞定啦!
你以為這就是值傳遞?太天真了,關於值傳遞,還有如下這樣的代碼:

import java.util.*;
//值傳遞演示代碼3
public class Main{

    int num1;
    int num2;

    public static void changenum(Main test){
        int temp = test.num1;
        test.num1 = test.num2;
        test.num2 = temp;
        System.out.println("在方法中:");
        System.out.println("num1 = "+test.num1+";num2 = "+test.num2);
    } 

    public static void main(String[] args){
        Main test = new Main();
        test.num1 = 1;
        test.num2 = 2;
        changenum(test);
        System.out.println("在main中:");
        System.out.println("num1 = "+test.num1+";num2 = "+test.num2);
    }
}

先來看運行結果吧:
這裡寫圖片描述
這下方法裡的main中的結果一樣了,是不是就不是值傳遞了呢?
當然還是值傳遞,這次我們傳的是個對象,是個引用變量,上一篇我們講過,引用變量裡面存的是個地址,那我現在把這個地址復制給另一個引用(方法中的),那麼兩個引用指向了同一個對象,都對同一個對象進行操作,所以無論是在方法中進行操作還是在main函數中進行操作都是一樣,因為他們都指向了同一個對象呀!
關於方法,還有幾個小玩意需要了解一下:
第一,方法的形參可以是不固定的!如果你不知道一個方法到底有幾個形參,那麼可以在最後一個形參類型後面加三個點(…)表示程序員已經瘋掉了無語了妥協了因為他不知道到底有幾個參數!就像這樣

import java.util.*;
//形參可變演示代碼
public class Main{
    public static void meetingpeople(int num,String... name){
        System.out.print(num);
        for(String temp:name){
            System.out.print(temp);
        }
    }
    public static void main(String[] args){
        meetingpeople(3,"小張","小李","小王");
    }
}

運行結果:
這裡寫圖片描述
第二,方法重載。方法重載就是說一個類中可以包含2個或者以上的同名方法,只要形參列表不一樣就可以了。那麼在實際調用的時候,根據方法名和形參表就可以判斷出來到底調用的是哪個方法。比如下面這個例子:
import java.util.*;
//方法重載演示代碼
public class Main{

public static void fangfa(){
    System.out.println("我是方法1");
}

public static void fangfa(String say){
    System.out.println(say);
}

public static void fangfa(int num){
    System.out.println("我是方法"+num);
}

public static void main(String[] args){
    Main test = new Main();
    test.fangfa();
    test.fangfa("我是方法2");
    test.fangfa(3);
}

}
運行結果:
這裡寫圖片描述

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved