簡單了解Java方法的定義和使用實現(xiàn)
什么是方法?
- System.out.println(),那么它是什么呢?系統(tǒng)類里的,對象out,輸出方法println
- Java方法是語句的集合,它們在一起執(zhí)行一個功能。
- 方法是解決一類問題的步驟的有序組合
- 方法包含于類或?qū)ο笾?/li>
- 方法在程序中被創(chuàng)建,在其他地方被引用
- 設(shè)計方法的原則:方法的本意是功能塊,就是實現(xiàn)某個功能的語句塊集合。我們設(shè)計方法的時候,最好保持方法的原子性,就是只完成一個功能,這樣利于我們后期的擴展。
- 回顧:方法的命名規(guī)則?
- 練習(xí):
package com.lxw.method; public class Demo01 { public static void main(String[] args) { // int add = add(1, 5); // System.out.println(add); box(); } public static int add(int a, int b) { //static讓這個方法成為類方法,不然無法直接在主方法調(diào)用, // 定義一個方法名字加類型如果是void就沒有返回值,如果有就有返回值 return a + b; } public static void box() { for (int i = 1; i <= 5; i++) { //外層循環(huán)5次,代表五行 for (int j = 5; j >= i; j--) { System.out.print(" "); } for (int j = 1; j <= i; j++) { System.out.print("*"); } for (int j = 1; j < i; j++) { System.out.print("*"); } System.out.println(); } } }
方法的定義
- Java的方法類似于其他語言的函數(shù),是一段用來完成特定功能的代碼片段,一般情況下,定義一個方法包含以下語法:
- 方法包含一個方法頭和一個方法體。下面是一個方法的所有部分:
- 修飾符:修飾符,這是可選的,告訴編譯器如何調(diào)用該方法。定義了該方法的訪問類型。
- public是公共的,所有人都可以使用
- 它返回值類型:方法可能會返回值。returnValueType是方法返回值的數(shù)據(jù)類型。有些方法執(zhí)行所需的操作,但沒有返回值。在這種情況下,returnValueType是關(guān)鍵字void。
- 方法名:是方法的實際名稱。方法名和參數(shù)表共同構(gòu)成方法簽名。
- 參數(shù)類型:參數(shù)像是一個占位符。當(dāng)方法被調(diào)用時,傳遞值給參數(shù)。這個值被稱為實參或變量。參數(shù)列表是可選的,方法可以不包含任何參數(shù)。
- 形式參數(shù):在方法被調(diào)用時用于接收外界輸入的數(shù)據(jù)
- 實參:調(diào)用方法時實際傳給方法的數(shù)據(jù)。
- 方法體:方法體包含具體的語句,定義該方法的功能。
- 修飾符:修飾符,這是可選的,告訴編譯器如何調(diào)用該方法。定義了該方法的訪問類型。
- 方法調(diào)用
- 調(diào)用方法:對象名.方法名(實參列表)
- Java支持兩種調(diào)用方法的方式,根據(jù)方法是否返回值來選擇。
- 當(dāng)返回一個值的時候,方法調(diào)用通常被當(dāng)作一個值。例如:
int larger=max(30,40);
- 如果方法返回值是void,方法調(diào)用一定是一條語句。
System.out.println("Hell0,kuangshen!");
課后拓展了解:值傳遞(Java)和引用傳遞
練習(xí):
package com.lxw.method; public class Demo01 { //main方法 public static void main(String[] args) { //實際參數(shù):實際調(diào)用傳遞給他的參數(shù) int add = add(1, 5); System.out.println(add); } //加法 //形式參數(shù),用來定義作用的 //public是公共的,所有人都可以使用它 public static int add(int a, int b) { //如果要直接使用這個方法,static讓這個方法成為類方法,不然無法直接在主方法調(diào)用, // 定義一個方法名字加類型如果是void就沒有返回值,如果有就有返回值 return a + b; //如果方法存在返回值的話,一定要用return返回如果是void就不用返回了 } }
2021.6.2 方法的重載(重要筆試可能遇到)
- 重載就是在一個類中,有相同的函數(shù)名稱,但形參不同的函數(shù)。
- 方法的重載的規(guī)則:
- 方法名稱必須相同。
- 參數(shù)列表必須不同(個數(shù)不同,或類型不同、參數(shù)排列順序不同等)。
- 方法的返回類型可以相同也可以不相同。
- 僅僅返回類型不同不足以成為方法的重載。
- 實現(xiàn)理論:
- 方法名稱相同時,編譯器會根據(jù)調(diào)用方法的參數(shù)個數(shù)、參數(shù)類型等去逐個匹配,以選擇對應(yīng)的方法如果匹配失敗,則編譯器報錯。
練習(xí):
package com.lxw.method; public class Demo02 { public static void main(String[] args) { int max = max(50, 20); System.out.println(max); } //方法可以無限制重名,但是確保數(shù)據(jù)類型不同 public static int max(int num1,int num2){ int result=0; if (num1>num2){ result=num1; System.out.println("num1>num2"); }else if (num1==num2){ System.out.println("num1==num2"); return 0; //也可以用來終止方法 }else { result=num2; System.out.println("num1<num2"); } return result; } // public static double max(double num1,double num2){ //// int result=0; //// //// //// if (num1>num2){ //// result=num1; //// System.out.println("num1>num2"); //// }else if (num1==num2){ //// System.out.println("num1==num2"); //// return 0; //也可以用來終止方法 //// }else { //// result=num2; //// System.out.println("num1<num2"); //// } //// return result; // } public static int max(int num1,int num2,int num3){ int result=0; if (num1>num2){ result=num1; System.out.println("num1>num2"); }else if (num1==num2){ System.out.println("num1==num2"); return 0; //也可以用來終止方法 }else { result=num2; System.out.println("num1<num2"); } return result; } }
package com.lxw.method; public class Demo01 { //main方法 public static void main(String[] args) { //實際參數(shù):實際調(diào)用傳遞給他的參數(shù) int add = add(1, 5,6); System.out.println(add); } //加法 //形式參數(shù),用來定義作用的 //public是公共的,所有人都可以用它 public static int add(int a, int b) { //如果要直接使用這個方法,static讓這個方法成為類方法,不然無法直接在主方法調(diào)用, // 定義一個方法名字加類型如果是void就沒有返回值,如果有就有返回值 return a + b; //如果方法存在返回值的話,一定要用return返回如果是void就不用返回了 } //方法的重載 public static int add(int a,int b,int c){ return a+b+c; } }
命令行傳參
有時候你希望運行一個程序時候再傳遞給它消息。這要靠傳遞命令行參數(shù)給main()函數(shù)實現(xiàn)。
package com.lxw.method; public class Demo03 { public static void main(String[] args) { for(int i=0;i<args.length;i++){ System.out.println("args["+i+"]:"+args[i]); } } }
2021.6.3可變參數(shù)(也叫不定項參數(shù))
- jdk1.5開始,java支持傳遞同類型的可變參數(shù)給一個方法。
- 在方法聲明中,在指定參數(shù)類型后加一個省略號(……)。
- 一個方法中只能指定一個可變參數(shù),它必須時方法的最后一個參數(shù),任何普通的參數(shù)必須在它之間聲明。
- 練習(xí):
package com.lxw.method; public class Demo04 { public static void main(String[] args) { //調(diào)用可變參數(shù) printMax(1,2,23,2,5,4); printMax(new double[]{1,2,3,4,5,6,}); Demo04 demo04 = new Demo04(); demo04.test(1,2,3,4,5,6); demo04.test(2,11,22,33,44,55); } public static void printMax(double... numbers){ if (numbers.length==0){ System.out.println("你沒有輸出任何數(shù)"); return; } double result=numbers[0]; //排序 for (int i = 1; i < numbers.length; i++) { if (numbers[i]>result){ result=numbers[i]; } } System.out.println("最大的值是:"+result); } public void test(double a,int ... i){//可變參數(shù),只能放在最后面 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]); } }
遞歸(重要,不推薦使用)
- A方法調(diào)用B方法,我們很容易理解!
- 遞歸就是:A方法調(diào)用A方法!就是自己調(diào)用自己
- 利用遞歸可以用很簡單的程序來解決一些復(fù)雜的問題。
- 它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似的規(guī)模較小的問題來求解,遞歸策略只需少量的程序就可描述出解題過程所需要的多次重復(fù)計算,大大減少了程序的代碼量。遞歸的能力在于用有限的語句來定義對象的無限集合。
- 遞歸結(jié)構(gòu)包括兩個部分:
- 遞歸頭:什么時候不調(diào)用自身方法。如果沒有頭,將陷入死循環(huán)。
- 遞歸體:什么時候需要調(diào)用自身方法。
- 程序從前往后運行,值從后往前傳遞。
- 想要使用遞歸,前提是基數(shù)較小(像,100,1000,1000...這些就比較大了),基數(shù)較大會導(dǎo)致棧溢出!
練習(xí):
作業(yè):
package com.lxw.method; import java.util.Scanner; public class DiGuiZuoYe01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNextDouble()) { double a = scanner.nextDouble(); String c = scanner.next(); double b = scanner.nextDouble(); switch(c){ case "+": add(a,b); break; case "-": minus(a,b); break; case "*": multiply(a,b); break; case "/": except(a,b); break; } System.out.println("輸入任意字母退出"); } scanner.close(); } public static void add(double num1, double num2) { System.out.println( num1 + num2); } public static void minus(double num1, double num2) { System.out.println( num1 - num2); } public static void multiply(double num1, double num2) { System.out.println( num1 * num2); } public static void except(double num1, double num2) { if(num2==0){ System.out.println("分母不能為0"); }else{ System.out.println( num1 / num2); } } } //———————————————— // 版權(quán)聲明:本文為CSDN博主「ppp_melody」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。 // 原文鏈接:https://blog.csdn.net/ppp_melody/article/details/116515970 // public static void main(String[] args) { // // Scanner a1 = new Scanner(System.in); // Scanner b1 = new Scanner(System.in); // int a=a1.nextInt(); // int b=b1.nextInt(); // int add = add(a, b); // int jian = jian(a, b); // int chen = chen(a, b); // int chu= chu(a, b); // System.out.println("a+b="+add); // System.out.println("a-b="+jian); // System.out.println("a*b="+chen); // System.out.println("a/b="+chu); // // } // public static int add(int a,int b){ // return a+b; // } // public static int jian(int a,int b){ // return a-b; // } // public static int chen(int a,int b){ // return a*b; // } // public static int chu(int a,int b){ // return a/b; // }
2021.6.5什么是數(shù)組
數(shù)組的定義:
- 數(shù)組是相同類型的數(shù)據(jù)的有序集合
- 數(shù)組描述的是相同類型的諾干個數(shù)據(jù),按照一定的先后次序排列組合而成。
- 其中,每一個數(shù)據(jù)稱作一個數(shù)組元素,每個數(shù)組元素可以通過一個下標來訪問它們。
數(shù)組聲明創(chuàng)建
首先必須聲明數(shù)組變量,才能在程序中使用數(shù)組。下面是聲明數(shù)組變量的語法:
dataType[] arrayRefVar; //首選的方法 或 dataType arrayRefVar[]; //效果相同,但不是首選方法
Java語言使用new操作符來創(chuàng)建數(shù)組,語法如下:
dataType[] arrayRefVar=new dataType[arraySize];
數(shù)組的元素是通過索引訪問的,數(shù)組索引從0開始。
獲取數(shù)組長度:
arrays.lenth
練習(xí):
package com.lxw.array; public class ArrayDemo01 { //變量的類型 變量的名字 = 變量的值; //數(shù)組類型 public static void main(String[] args) { int[] nums;//1.數(shù)組的定義,聲明一個數(shù)組 // int nums1[];//C++與C#里的定義 nums = new int[10];//創(chuàng)建一個數(shù)組 //給數(shù)組元素中賦值 nums[0]=1; nums[1]=2; nums[2]=3; nums[3]=4; nums[4]=5; nums[5]=6; nums[6]=7; nums[7]=8; nums[8]=9; nums[9]=10; int sums=0; for (int i = 0; i < nums.length; i++) { sums=sums+nums[i]; } System.out.println("數(shù)組的和為:"+sums); } }
2021.6.6 內(nèi)存分析(重要)
Java內(nèi)存分析
寫代碼畫圖分析內(nèi)存
三種初始化
- 靜態(tài)初始化
- 動態(tài)初始化
int[] a={1,2,3}; Man[] mans={new Man(1,1),new Man(2,2)};
- 數(shù)組的默認初始化
- 數(shù)組引用類型,它的元素相當(dāng)于類的實例變量,因此數(shù)組一經(jīng)分配空間,其中的每個元素被按照實例變量同樣的方式被隱式初始化。
int[] a=new int[2]; a[0]=1; a[1]=2;
練習(xí):
package com.lxw.array; public class ArrayDemo02 { public static void main(String[] args) { //靜態(tài)初始化:創(chuàng)建+賦值 int[] a={1,2,3,4,5,6,7,8}; System.out.println(a[0]); //引用類型 Man[] mans={new Man(),new Man()}; //動態(tài)初始化:包括默認初始化 int[] b=new int[10]; b[0]=10; b[1]=10; System.out.println(b[0]); System.out.println(b[1]); System.out.println(b[2]); System.out.println(b[3]); } }
下標及越界小結(jié)
數(shù)組的四個基本特點:
- 其長度是確定的。數(shù)組一旦被創(chuàng)建,它的大小就是不可改變的。
- 其元素必須是相同類型,不允許出現(xiàn)混合類型。
- 數(shù)組中的元素可以是任何數(shù)據(jù)類型,包括基本類型和引用類型。
- 數(shù)組變量引用類型,數(shù)組也可以看成是對象,數(shù)組中的每個元素相當(dāng)于該對象的成員變量。數(shù)組本身就是對象,Java中對象是在堆中的,因此數(shù)組無論保存原始類型還是其他對象類型,數(shù)組對象本身實在堆中的。
- 數(shù)組的邊界:
- 下標的合法區(qū)間:[0,lenth-1],如果越界就會報錯:
public static void main(String[] args){ int[] a=new int[2]; System.out.println(a[2]); }
ArrayIndexOutOfBoundsException:數(shù)組下標越界異常!
小結(jié):
- 數(shù)組是相同數(shù)據(jù)類型(數(shù)據(jù)類型可以為任意類型)的有序集合
- 數(shù)組也是對象。數(shù)組元素相當(dāng)于對象的成員變量
- 數(shù)組長度的確定的,不可改變的。如果越界,則報:ArrayIndexOutOfBounds
練習(xí):
public static void main(String[] args) { //靜態(tài)初始化:創(chuàng)建+賦值 int[] a={1,2,3,4,5,6,7,8}; System.out.println(a[0]); for (int i = 0; i < a.length; i++) { System.out.println(a[i]); }
2021.6.7數(shù)組的使用
- 普通的for循環(huán)
- For-Each循環(huán)
- 數(shù)組作方法入?yún)?/li>
- 數(shù)組作返回值-
練習(xí):
package com.lxw.array; public class ArrayDemo03 { public static void main(String[] args) { int[] a1={1,2,3,4,5,6}; //數(shù)組遍歷一遍 for (int i = 0; i < a1.length; i++) { System.out.println(a1[i]); } System.out.println("========================="); //求累加和 int sum=0; for (int i = 0; i < a1.length; i++) { sum=sum+a1[i]; } System.out.println(sum); System.out.println("========================"); //查找最大元素 int max=a1[0]; for (int i = 0; i < a1.length; i++) { if (a1[i]>max){ max=a1[i]; } } System.out.println("max為:"+max); } }
package com.lxw.array; public class ArrayDemo04 { public static void main(String[] args) { int[] a={1,2,3,4,5,6}; // //jdk1.5,沒有下標,適合打印 // for (int i : a) { // System.out.println(i); // // } printArray(a); int[] reverse=reverse(a); printArray(reverse); } //打印按鈕元素 public static void printArray(int[] a){ for (int i = 0; i < a.length; i++) { System.out.print(a[i]+" "); } } //反轉(zhuǎn)按鈕 public static int[] reverse(int[] a){ int[] result=new int[a.length]; for (int i=0,j=result.length-1;i< a.length;i++,j--){ result[j]=a[i]; } return result; } }
二維數(shù)組
- 多維數(shù)組可以看成是數(shù)組的數(shù)組,比如二維數(shù)組就是一個特殊的一維數(shù)組,其每一個元素都是一個一維數(shù)組。
- 二維數(shù)組
int a[][]=new int[2][5];
- 解析:以上二維數(shù)組a可以看成一個兩行五列的數(shù)組。
- 思考:多維數(shù)組的使用?
num[1][0];
練習(xí):
package com.lxw.array; import static com.lxw.array.ArrayDemo04.printArray; public class ArrayDemo05 { public static void main(String[] args) { int[][] array={{1,2},{2,3},{3,4},{4,5}}; // printArray(array[0]); // System.out.println(array[2][0]); // System.out.println(array[2][1]); for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length ; j++) { System.out.println(array[i][j]); } } } }
2021.6.8 Arrays類
- Arrays類
- 數(shù)組工具類java.util.Arrays
- 由于數(shù)組對象本身并沒有什么方法可以供我們調(diào)用,但API中提供了一個工具類Arrays供我們使用,從而可以對數(shù)據(jù)對象進行一些基本的操作。
- 查看JDK幫助文檔
- Arrays類中的方法都是static修飾的靜態(tài)方法,在使用的時候可以直接使用類名進行調(diào)用,而“不用”使用對象來調(diào)用(注意:“是不用”而不是“不能”)
- 具有以下常用功能:
- 給數(shù)組賦值:通過fill方法。
- 對數(shù)組排序:通過sort方法按升序。
- 比較數(shù)組:通過equals方法比較數(shù)組中元素值是否相等。
- 查找數(shù)組元素:通過binarySearch方法能對排序好的數(shù)組進行二分查找法操作。
練習(xí):
package com.lxw.array; import java.util.Arrays; public class ArrayDemo06 { public static void main(String[] args) { int[] a={1,2,3,567,548,788,842,666,777,235}; System.out.println(a);//[I@4554617c哈希值,地址值 //toString打印數(shù)組元素 System.out.println(Arrays.toString(a)); printArray(a); Arrays.sort(a);//對數(shù)組進行排序 System.out.println(Arrays.toString(a)); //Arrays.fill(a,0);//對數(shù)組進行賦值 Arrays.fill(a,2,4,0);//對數(shù)組進行賦值 System.out.println(Arrays.toString(a)); } public static void printArray(int[] a){ for (int i = 0; i < a.length; i++) { if (i==0){ System.out.print("["); } if (i==a.length-1){ System.out.print(a[i]+"]"); }else{ System.out.print(a[i]+", "); } } } }
冒泡排序
- 冒泡排序無疑是最為出名的排序算法之一,還有其他八大排序!
- 冒泡的代碼還是相當(dāng)簡單的,兩層循環(huán),外層冒泡輪數(shù),里層次比較,江湖中人盡皆知。
- 我們看到嵌套循環(huán),應(yīng)該立馬就可以得出這個算法的時間復(fù)雜度為O(n2)。
- 思考:如何優(yōu)化?
練習(xí):
package com.lxw.array; import java.util.Arrays; public class ArrayDemo07 { //冒泡排序 //1.比較數(shù)組中,兩個相鄰的元素,如果第一個數(shù)比第二個數(shù)大,我們就交換它們的位置 //2.每一次比較,都會產(chǎn)生一個最大,或者最小的數(shù)字 //3.下一輪則可以少一次排序! //4.依次循環(huán),直到結(jié)束! public static void main(String[] args) { int[] a={1,4,5,2,7,9,78,44}; int[] sort = sort(a);//調(diào)用完我們自己寫的排序方法后,返回一個排序后的數(shù)組 System.out.println(Arrays.toString(a)); } public static int[] sort(int[] a){ //臨時變量 int temp=0; //外層循環(huán),判斷我們這個要走多久走多少次 for (int i = 0; i < a.length-1; i++) { boolean flag=false;//通過flag標識位減少沒有意義的比較 //內(nèi)層循環(huán),比較判斷兩個數(shù)。如果第一個數(shù),比第二個數(shù)大,則交換位置 //i就是走過的次數(shù)啊 所以j就不用再去比較i之前已經(jīng)比較過的了 for (int j = 0; j <a.length-1-i ; j++) { if (a[j+1]<a[j]){ //a[j+1]后一個數(shù),a[j]前一個數(shù) temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; flag=true; } } if (flag==false){ break; } } return a; } }
2021.6.9稀疏數(shù)組(復(fù)習(xí))
- 需求:編寫五子棋游戲中,有存盤退出和續(xù)上盤的功能
- 分析問題:因為該二維數(shù)組的很多值是默認值0,因此記錄了很多沒有意義的數(shù)據(jù)。
- 解決:稀疏數(shù)組
- 稀疏數(shù)組介紹:
- 當(dāng)一個數(shù)組中大部分元素為0,或者為同一值的數(shù)組時,可以使用稀疏數(shù)組來保存該數(shù)組。
- 稀疏數(shù)組的處理方式是:
- 記錄數(shù)組一共有幾列幾行,有多少個不同值
- 把具有不同值的元素和行列及值記錄在一個小規(guī)模的數(shù)組中,從而縮小程序的規(guī)模
如下圖:左邊是原始數(shù)據(jù),右邊是稀疏數(shù)組
總結(jié)
本篇文章就到這里了,希望能給各位帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
MyBatis 執(zhí)行動態(tài) SQL語句詳解
大家對mybatis執(zhí)行任意sql語句都了解,那么MyBatis執(zhí)行動態(tài)SQL語句呢?下面腳本之家小編給大家解答下mybatis執(zhí)行動態(tài)sql語句的方法,非常不錯,感興趣的朋友參考下吧2016-08-08java組件commons-fileupload實現(xiàn)文件上傳
這篇文章主要介紹了java借助commons-fileupload組件實現(xiàn)文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10SpringBoot全局異常處理之多個處理器匹配順序(最新推薦)
這篇文章主要介紹了SpringBoot全局異常處理之多個處理器匹配順序(最新推薦),調(diào)試源碼可見匹配順序為:異常層級高者優(yōu)先,再清楚點,子類異常處理器優(yōu)先,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧2024-03-03Java中使用DOM4J生成xml文件并解析xml文件的操作
這篇文章主要介紹了Java中使用DOM4J來生成xml文件和解析xml文件的操作,今天通過代碼給大家展示了解析xml文件和生成xml文件的方法,需要的朋友可以參考下2021-09-09java9的JShell小工具和編譯器兩種自動優(yōu)化方法
這篇文章主要介紹了java9的JShell小工具和編譯器兩種自動優(yōu)化方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07