JAVA方法
- 2020 年 11 月 18 日
- 筆記
Java方法
什麼是方法
System.out.println();
類 對象 方法
-
java方法是語句的集合,他們在一起執行一個功能
-
方法是解決一類問題的步驟的有序組合
-
方法包含於類或對象中
-
方法在程序中被創建,在其他地方被引用
設計方法的原則:方法的本意是功能塊,就是實現某個功能的語句塊的集合。我們設計方法的時候,最好保持方法的原子性(一個方法只完成1個功能,這樣有利於我們後期的擴展)
方法實例:
package com.kikikikikiku.method;
public class Demo01 {
public static void main(String[] args) {
// 實際參數
int sum = add(2,3);
System.out.println(sum);
test();
}
// 形式參數
public static int add(int a,int b){
return a+b;
}
public static void test(){
for (int i = 1;i <=1000; i++) {
if(i%5==0){
System.out.print(i+"\t");
}
if(i%(5*3)==0){//每行
System.out.println();
}
}
}
}
方法的定義和調用
方法定義
Java的方法類似於其他語言的函數,是一段用來完成特定功能的代碼片段
方法包含一個方法頭和一個方法體。
方法:
- 修飾符:可選。告訴編譯器如何調用方法。定義了該方法的訪問類型。
- 返回值類型:方法可能會返回值。returnValueType是方法返回值的數據類型。有些方法執行所需的操作,但沒有返回值。這種情況下,returnValueType是關鍵字void。
- 方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。
- 參數類型:參數像是一個佔位符,當方法被調用時,傳遞值給參數。這個值被稱為實參或變量。參數列表是指方法的參數類型、順序和參數的個數。參數是可選的,方法可以不包含任何參數。
- 形式參數:在方法被調用是用於接受外界輸入的數據。
- 實參:調用方法時實際傳給方法的數據。
- 方法體:方法體包含具體的語句,定義該方法的功能。
語法:
修飾符 返回值類型 方法名(參數類型 參數名){
...
方法體
...
return 返回值;
}
比大小
package com.kikikikikiku.method;
public class Demo02 {
public static void main(String[] args) {
int m = max(2,2);
System.out.println(m);
}
public static int max(int num1,int num2){
int result=-1;
if(num1==num2){
System.out.println("相等");
return 0;
}
else if(num1>num2){
result = num1;
}else{
result = num2;
}
return result;
}
}
方法調用
-
調用方法:對象名.方法名(實參列表)
-
Java支持兩種調用方法的方式,根據方法是否返回值來選擇。
-
返回一個值時,方法調用通常被當做一個值:
int larger = max(30,40);
-
返回值是void,方法調用一定是一條語句。
System.out.println("hello,world!");
-
java都是值傳遞
方法的重載
重載就是在一個類中,有相同的函數名稱,但形參不同的函數。
方法重載的規則
- 方法名稱必須相同。
- 參數列表必須不同(個數不同、類型不同、參數排列順序不同等)
- 方法的返回類型可以相同也可以不相同。
- 返回類型不同不足以成為方法的重載。
實現理論:方法名稱相同時,編譯器會根據調用方法的參數個數、參數類型等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯。
比大小
package com.kikikikikiku.method;
public class Demo02 {
public static void main(String[] args) {
double m = max(3.0,2);
System.out.println(m);
}
public static double max(double num1,int num2){
double result=-1.0;
if(num1==num2){
System.out.println("相等");
return 0;
}
else if(num1>num2){
result = num1;
}else{
result = num2;
}
return result;
}
public static int max(int num1,int num2){
int result=-1;
if(num1==num2){
System.out.println("相等");
return 0;
}
else if(num1>num2){
result = num1;
}else{
result = num2;
}
return result;
}
}
命令行傳參
代碼:
package com.kikikikikiku.method;
public class Demo03 {
public static void main(String[] args) {
//args.length 數組長度
for (int i = 0; i < args.length; i++) {
System.out.println("args["+i+"]:"+args[i]);
}
}
}
可變參數
- JDK1.5開始,Java支持傳遞同類型的可變參數給一個方法。
- 在方法聲明中,在指定參數類型後加一個省略號(…)。
- 一個方法中只能指定一個可變參數,它必須是方法的最後一個參數。任何普通參數必須在它之前聲明。
排序
package com.kikikikikiku.method;
public class Demo04 {
public static void main(String[] args) {
//調用可變參數的方法
printMax(34,4,4,2,45.3);
printMax(new double[]{1,2,3});
}
public static void printMax(double...numbers){
if (numbers.length==0){
System.out.println("No argument passed");
return;
}
double result = numbers[0];
//排序!
for (int i = 1; i < numbers.length ; i++) {
if (numbers[i] > result){
result = numbers[i];
}
}
System.out.println("The max value is "+result);
}
}
遞歸
自己調用自己
遞歸例子
package com.kikikikikiku.method;
public class Demo05 {
public static void main(String[] args) {
Demo05 demo05 = new Demo05();
demo05.test();
}
public void test(){
test();
}
}
遞歸結構包括兩個部分
- 遞歸頭:什麼時候不調用自身方法。如果沒有頭,將陷入死循環。
- 遞歸體:什麼時候需要調用自身方法。
5的階乘
package com.kikikikikiku.method;
public class Demo06 {
public static void main(String[] args) {
Demo06 demo06 = new Demo06();
int x = demo06.f(5);
System.out.println(x);
}
public static int f(int n){
if (n==1){
return 1;
}else{
return n*f(n-1);
}
}
}
方法練習
寫一個計算器,其能進行簡單的四則運算
代碼
package com.kikikikikiku.method;
import java.util.Scanner;
public class Demo07 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入運算符");
String ari =scanner.nextLine();//四則運算
switch (ari){
case "+":
System.out.println("請輸入兩個加數");
double y = scanner.nextDouble();
double x = scanner.nextDouble();
double add = add(x,y);
System.out.println(add);
break;
case "-":
System.out.println("請輸入兩個減數");
double n = scanner.nextDouble();
double m = scanner.nextDouble();
double sub = sub(n,m);
System.out.println(sub);
break;
case "/":
System.out.println("請輸入兩個除數");
double j = scanner.nextDouble();
double k = scanner.nextDouble();
double div = div(j,k);
System.out.println(div);
break;
case "*":
System.out.println("請輸入兩個乘數");
double a = scanner.nextDouble();
double b = scanner.nextDouble();
double mul = mul(a,b);
System.out.println(mul);
break;
}
scanner.close();
}
public static double add(double num1,double num2){
return (num1+num2);
}
public static double mul(double num1,double num2){
return (num1*num2);
}
public static double sub(double num1,double num2){
return (num1-num2);
}
public static double div(double num1,double num2){
return (num1/num2);
}
}