Java方法

何谓方法

方法就是语句的集合,在一起剋以在执行一个功能。

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

方法包含于类或对象中。

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

设计方法原则:一个方法只完成一个功能,保持方法的原子性,有利于后期的扩展。

方法的定义与调用

修饰符 返回值类型 方法名(参数类型 参数名字){

...

方法体

...

return 返回值

}

修饰符:public 、static、final、private...可选

返回值类型:没有返回值用void。如果有返回值,用return。

参数类型:参数可选。实参:调用该方法时,实际传递的参数。形参:定义方法时随便编的参数。

 public static void main(String[] args) {
        int sum=add(1,2);
        System.out.println(sum);
    }
    public static int add(int a,int b){
        return a+b;
    }
}

a,b是形参,1,2是实参。

方法体:方法中包含的具体语句,定义该方法的功能。

关于return

我写的代码,输出结果为空的,啥也没有。

public static void main(String[] args) {
    max(1,2);

}
public static int max(int a ,int b){
    if(a>b){
       return a;
    }else if(a<b){
        return b;
    }else {
        System.out.println("a和b一样大");
        return 0;
    }

正确的代码:

public static void main(String[] args) {
    int m=max(1,2);
    System.out.println(m);

}
public static int max(int a ,int b){
    int result=-1;
    if(a>b){
      result= a;
    }else if(a<b){
        result= b;
    }else {
        System.out.println("a和b一样大");
        return 0;
    }
    return result;
}

return除了有返回返回值之外,还有终止程序的意思;

方法支持两种调用方式:根据方法是否有返回值来选择:

当方法返回一个值的时候,方法调用通常被当作一个值,如:

int m=max(10,20);

system.out.println(m);

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

system.out.println("hello,IGOT7");

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

值传递:Java是值传递。【拷贝】值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。

引用传递: 引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身。

方法重载

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

重载规则:

方法名称必须相同;参数列表必须不同(个数不同、或类型不同、参数排列顺序不同);方法的返回值类型可以相同也可以不相同;仅仅是返回类型不同不足以成为方法的重载。

命令行传参

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

在命令行传递参数。

可变参数

Java支持传递同类型的可变参数给一个方法。

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

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

public static void main(String[] args) {
    Demo04 d=new Demo04();
    d.test(1);

}
public void test(int ...i){
    System.out.println(i[0]);
}

递归

A方法调用A方法,就是递归。就是用有限的语句来定义对象的无限集合。

递归包括:

递归头:定义了什么时候有不调用自身的方法,没有头会进入死循环。

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

public static void main(String[] args) {
    System.out.println(f(3));
}
public static  int f(int n){
    if(n==1){
        return 1;
    }else {
        return n*f(n-1);
    }
}

实现简易计算器:

要求练习到循环、switch、方法调用。

public static void main(String[] args) {
    Scanner scanner=new Scanner(System.in);
    double a=scanner.nextDouble();
    String op=scanner.next();
    double b=scanner.nextDouble();
    double r=0;
   while(scanner.hasNext()){
        switch (op){
            case "+":
                r=add(a,b);

                break;
            case "-":
                r=subtract(a,b);

                break;
            case "*":
                r=multiply(a,b);

                break;
            case "/":
                r=divide(a,b);

                break;
        }
       System.out.println(r);
    }
}

public static double add(double a,double b){
    return a+b;
}
public static double divide(double a,double b){
    return a/b;
}
public static double subtract(double a,double b){
    return a-b;
}
public static double multiply(double a,double b){
    return a*b;
}

错误:没有实现持续输入处理。
修改后:

package javademo;


import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);

       while(scanner.hasNext()){
           double a=scanner.nextDouble();
           String op=scanner.next();
           double b=scanner.nextDouble();
           double r=0;
            switch (op){
                case "+":
                    r=add(a,b);

                    break;
                case "-":
                    r=subtract(a,b);

                    break;
                case "*":
                    r=multiply(a,b);

                    break;
                case "/":
                    r=divide(a,b);

                    break;
            }
           System.out.println(r);
        }
    }

    public static double add(double a,double b){
        return a+b;
    }
    public static double divide(double a,double b){
        return a/b;
    }
    public static double subtract(double a,double b){
        return a-b;
    }
    public static double multiply(double a,double b){
        return a*b;
    }
}