Java解析方法的調(diào)用關(guān)系示例詳解
一、方法的定義
方法就是 將功能重復(fù)的代碼封裝成一段獨(dú)立的代碼,通過(guò)調(diào)用方法的方式 (作用)提高代碼的復(fù)用性(減少代碼重復(fù))。
每一個(gè)方法只能完成一個(gè)功能。
二、方法的聲明格式
[修飾符1,修飾符2] 返回值類型 方法名 (參數(shù)類型 形式參數(shù)1,參數(shù)類型 形式參數(shù)2,…){
執(zhí)行語(yǔ)句塊;
return 返回值;}
例:
boolean isLeapYear (int year){ //定義方法 boolean isLeap = false; if(year%4==0 && year%100 != 0 || year%400 != 0){ isLeap = true; } return isLeap; } public class MethodDemo01 { //提取一個(gè)方法,計(jì)算兩個(gè)數(shù)的和并返回 public static int addNum(int a,int b){ int sum = a +b; return sum; } //提取一個(gè)方法,計(jì)算三個(gè)數(shù)的和并打印 public static void addNum2(int a,int b,int c){ int sum = a +b +c; System.out.println(sum); } public static void main(String[] args) { //調(diào)用方法1,計(jì)算1+2的和 int sum1 = addNum(1,2); System.out.println(sum1); //調(diào)用方法1,計(jì)算3+4的和 System.out.println(addNum(3,4)); //調(diào)用方法,計(jì)算5+6+7的和并打印 addNum2(5,6,7); } }
- 返回值類型:方法輸出數(shù)據(jù)的類型(如果方法沒(méi)有返回值,則用關(guān)鍵字void來(lái)表示)
- 方法名:類似變量名,可以自定義方法名(需符合Java標(biāo)識(shí)符規(guī)則)
- 形式參數(shù):變量(用于存儲(chǔ)調(diào)用方法輸入的數(shù)據(jù))
- 實(shí)際參數(shù):調(diào)用方法輸入的數(shù)據(jù)。
- 返回值:調(diào)用方法返回的數(shù)據(jù)。
三、方法的調(diào)用
int year= 2020; boolean leapYear =isLeapYear(year); //調(diào)用方法 if(leapYear){ System.out.println(year +"是閏年!") } year = 2052; leapYear =isLeapYear(year);//調(diào)用方法 if(leapYear){ System.out.println(year +"是閏年!") }
四、特殊方法:程序入口main方法
main方法是一個(gè)特殊方法,它是Java程序的入口方法,執(zhí)行Java程序時(shí),JVM會(huì)調(diào)用main方法。
public static void main (String[]args){}
五、方法的局部變量
局部變量是指在方法中聲明的變量,其作用范圍僅限于方法中
局部變量使用前必須進(jìn)行初始化。(定義在main方法中的變量也是局部變量)
boolean isLeapYear (int year){ boolean isLeap = false;//聲明了一個(gè)局部變量并進(jìn)行初始化 if(year%4==0 && year%100 != 0 || year%400 != 0){ isLeap = true; } return isLeap; } public classA{ public static void main (String[]args){ int i =6; //整數(shù)(實(shí)參,局部變量) int [] array = {1,2,3}; //數(shù)組(實(shí)參,局部變量,傳數(shù)組的地址) test(i,array); System.out.println(i+""+array[0]); } public static void test(int i,int []array){ //形參 i += 3; array[0] += 3; } } //輸出結(jié)果:6 4
六、類的靜態(tài)變量
靜態(tài)變量(也稱為類變量)是使用static關(guān)鍵字聲明的變量,這些變量屬于類本身,而不是類的任何特定實(shí)例(靜態(tài)變量在使用前無(wú)需初始化。)
public class HellWorld{ public static boolean isLeap;//全局變量(默認(rèn)自動(dòng)化) public static void method01(){ // isLeap = true;//共享全局變量 } public static void method02(){ isLeap = true;//共享全局變量 } }
七、類的靜態(tài)方法
靜態(tài)方法是使用static關(guān)鍵字定義的方法,靜態(tài)方法可以訪問(wèn)類的靜態(tài)變量和靜態(tài)方法,但不能訪問(wèn)類的實(shí)例方法和實(shí)例變量。
八、方法的傳參
- 實(shí)參和形參
實(shí)參:調(diào)用方法輸入的變量或常量值
形參:方法中定義的數(shù)據(jù)類型變量。
值傳遞
實(shí)參將數(shù)據(jù)傳遞給形參時(shí),形參的改變改變不影響原實(shí)參的值,即值傳遞只會(huì)改變形參,不會(huì)改變實(shí)參。(基本數(shù)據(jù)類型)引用傳遞
引用傳遞:是指在調(diào)用函數(shù)時(shí),將實(shí)際參數(shù)的地址傳遞給函數(shù),這樣在函數(shù)中對(duì)參數(shù)的修改,將影響到實(shí)際參數(shù)。(引用數(shù)據(jù)類型)
引用數(shù)據(jù)傳遞的不是真正的數(shù)據(jù)地址,是引用的堆內(nèi)存中的地址,無(wú)論引用傳遞的數(shù)據(jù)怎么改變,它也只是引用的堆內(nèi)存中的地址,原數(shù)據(jù)組的數(shù)據(jù)地址并沒(méi)有被改變,改變那部分的值只是形參復(fù)制給實(shí)參使用的的地址,并不是把原地址改變。
- 總結(jié)
在Java中,參數(shù)傳參本質(zhì)上只存在值傳遞。
值傳遞時(shí),形參改變并不會(huì)影響到實(shí)參。
在函數(shù)中,只有修改了實(shí)參所指向的對(duì)象內(nèi)容,也就是引用堆內(nèi)存中的地址,才會(huì)影響到實(shí)參
public classA{ public static void main (String[]args){ int i =6; //整數(shù)(實(shí)參,局部變量) int [] array = {1,2,3}; //數(shù)組(實(shí)參,局部變量,傳數(shù)組的地址) test(i,array); System.out.println(i+""+array[0]); } public static void test(int i,int []array){//形參 i += 3; array[0] += 3; } } //輸出結(jié)果:6 4
九、方法的重載
方法的重載指的是在同一個(gè)類中,有一個(gè)以上的同名方法,但方法的參數(shù)個(gè)數(shù)或參數(shù)類型有所不同(與方法的返回值無(wú)關(guān))
方法重載是對(duì)于 一個(gè)類。
public static int addNum(int a,int b){ int sum = a +b; return sum; } //提取一個(gè)方法,計(jì)算三個(gè)數(shù)的和并打印 public static int addNum2(int a,int b,int c){ int sum = a +b +c; return sum; }
例如,以下都屬于方法的重載
void show (int a,char b,double c);
void show (int a,double b,char c);
void show (int a,int b);
void show (int a);
double show(int a,char b,double c);
總結(jié)
到此這篇關(guān)于Java解析方法的調(diào)用關(guān)系的文章就介紹到這了,更多相關(guān)Java方法的調(diào)用關(guān)系內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解spring boot jpa整合QueryDSL來(lái)簡(jiǎn)化復(fù)雜操作
這篇文章主要介紹了詳解spring boot jpa整合QueryDSL來(lái)簡(jiǎn)化復(fù)雜操作,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Java 實(shí)戰(zhàn)練習(xí)之網(wǎng)上電商項(xiàng)目的實(shí)現(xiàn)
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+vue+Springboot+ssm+mysql+maven+redis實(shí)現(xiàn)一個(gè)網(wǎng)上電商項(xiàng)目,大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11Java Maven settings.xml中私有倉(cāng)庫(kù)配置詳解
這篇文章主要介紹了詳解Maven settings.xml配置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2021-10-10java計(jì)算代碼段執(zhí)行時(shí)間的詳細(xì)代碼
java里計(jì)算代碼段執(zhí)行時(shí)間可以有兩種方法,一種是毫秒級(jí)別的計(jì)算,另一種是更精確的納秒級(jí)別的計(jì)算,這篇文章主要介紹了java計(jì)算代碼段執(zhí)行時(shí)間,需要的朋友可以參考下2022-08-08避免sql注入_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了避免sql注入,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08Java ScheduledExecutorService的具體使用
ScheduledExecutorService有線程池的特性,也可以實(shí)現(xiàn)任務(wù)循環(huán)執(zhí)行,本文主要介紹了Java ScheduledExecutorService的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-05-05