Day07Java方法

Java方法

 

什么是方法

Java方法是语句的集合,它们在一起执行一个功能

方法的命名规则:首字母小写,驼峰规则

方法是解决一类问题的步骤的有序组合

方法包含于类或对象中

方法在程序中被创建,在其他地方被引用

设计方法的原则:一个方法只完成1个功能

方法类似与其他语言的函数

方法包含一个方法头和一个方法体

 修饰符 返回值类型 方法名(参数类型 参数名){
  ...
  方法体
  ...
  return 返回值;
 }
 package com.sqdht.method;
 
 public class Demo01 {
     //main 方法
     public static void main(String[] args) {
 
         //实际参数:实际调用传递给它的参数
         int sum = add(1,2);
 
         System.out.println(sum);
 
         test();
    }
 
     //加法
     //形式参数,用来定义作用的
     public static int add(int a,int b){
         return a+b;
    }
 
     public static void test(){
         for (int i = 0; i < 1000; i++) {
             if(i%5==0){
                 System.out.print(i+"\t");
            }
             if(i%(5*3)==0){
                 System.out.print("\n");
                 //System.out.println();
            }
        }
    }
 }
 

 

方法的定义和调用

调用方法:对象名.方法名(实参列表)。

当方法返回一个值时,方法调用通常被当作一个值。

如果方法返回值是void,方法调用一定是一条语句。

拓展:值传递(Java)和引用传递。

 package com.sqdht.method;
 
 public class Demo02 {
     public static void main(String[] args) {
 
         int max = max(10,10);
         System.out.println(max);
    }
 
     //比大小
     public static int max(int a,int b){
 
         int result = -1;
         if (a == b) {
             System.out.println("num1==num2");
             return 0;   //终止方法
        }
 
         if (a > b) {
             result = a;
        }else {
             result = b;
        }
 
         return result;
    }
 }
 

 

方法的重载

重载就是在一个类中,有相同的函数名称,但是形参不同的函数

重载的规则:

  • 方法名称必须相同

  • 参数列表必须不同(个数,类型,排列顺序)

  • 返回值类型无所谓

  • 仅仅返回类型不同不足以成为方法的重载

实现理论:

方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。

 package com.sqdht.method;
 
 public class Demo02 {
     public static void main(String[] args) {
 
         double max = max(10.0,20.0);
         System.out.println(max);
    }
 
     //比大小
     public static int max(int a,int b){
 
         int result = -1;
         if (a == b) {
             System.out.println("num1==num2");
             return 0;   //终止方法
        }
 
         if (a > b) {
             result = a;
        }else {
             result = b;
        }
 
         return result;
    }
     //比大小
     public static double max(double a,double b){
 
         double result = -1;
         if (a == b) {
             System.out.println("num1==num2");
             return 0;   //终止方法
        }
 
         if (a > b) {
             result = a;
        }else {
             result = b;
        }
 
         return result;
    }
 
 }
 

 

命令行传递参数

有时候你希望运行一个程序时再传递给它消息。这要靠传递命令行参数给main()函数实现。

 package com.sqdht.method;
 
 public class Demo03 {
     public static void main(String[] args) {
         //arg.length 数组长度
         for (int i = 0; i < args.length; i++) {
             System.out.println(" args[" + i + "]: " + args[i]);
        }
    }
 }
 

 

可变参数

JDK1.5开始,Java支持传递同类型的可变参数给一个方法。

在方法声明中,在指定参数类型后加一个省略号(...)。

一个方法中只能指定一个可变参数,它必须时方法的最后一个参数。任何普通的参数必须在它之前声明。

 package com.sqdht.method;
 
 public class Demo04 {
     public static void main(String[] args) {
         Demo04 demo04 = new Demo04();
         demo04.test(1,2,3,4,5,6);
         printMax(23,2,43,56);
         printMax(new double[]{1,2,3});
    }
 
     public void method(){}
     public void method(int i){}
     public void method(int i,int i2){}
     public void method(int i,double i2){}
 
     public void test(int x,int... i){
         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]);
    }
 
     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);
    }
 }
 

 

递归(重点)

递归就是:A方法自己调用自己

递归结构包含两个部分:

  • 递归头(尽头):什么时候不调用自身方法。如果没有头,将陷入死循环

  • 递归体:什么时候需要调用自身方法

边界条件:边界

前阶段:

返回阶段:n*(n-1)

Java都是栈机制

大计算能不用递归就不用递归

 

作业

写一个计算器。

 package com.sqdht.method;
 
 import java.util.Scanner;
 
 public class Caculator {
     public static void main(String[] args) {
         while(true){
         System.out.println("请输入执行哪种计算,若要退出请按#");
         Scanner scanner= new Scanner(System.in);
         char i = scanner.next().charAt(0);
         if(i == '#'){
             System.out.println("工作结束");
             return;
        }
         double num1 = 0;
         double num2 = 0;
 
         System.out.println("请输入操作数1:");
         num1 = scanner.nextDouble();
         System.out.println("请输入操作数2:");
         num2 = scanner.nextDouble();
         switch (i){
             case '+':
                 System.out.println(num1 + "+" + num2 + "=" + add(num1,num2));
                 break;
             case '-':
                 System.out.println(num1 + "-" + num2 + "=" + sub(num1,num2));
                 break;
             case '*':
                 System.out.println(num1 + "*" + num2 + "=" + mul(num1,num2));
                 break;
             case '/':
                 System.out.println(num1 + "/" + num2 + "=" + div(num1,num2));
                 break;
             default:
                 System.out.println("输入不合法!");
 
        }
        }
    }
     public static double add(double num1,double num2){
         return num1+num2;
    }
     public static double sub(double num1,double num2){
         return num1-num2;
    }
     public static double mul(double num1,double num2){
         return num1*num2;
    }
     public static double div(double num1,double num2){
         return num1/num2;
    }
 }
 

 

 

posted @ 2021-11-02 15:52  sqdht  阅读(98)  评论(0)    收藏  举报