初识方法、重载格式

方法

静态方法和非静态方法

在不同类之间调用时:

  • 静态方法(static):和类一起加载的
  • 可以直接通过类名调用
public class student {
    public void static talk(){
        System.out.println("话话话");
    }
}
public class Demo02 {
    public static void main(String[] args) {
        Student.talk();
    }
}

 

  • 非静态方法:类实例化之后才存在,所以静态方法不能调用非静态
  • 需要实例化类 (new)再调用
public class student {
    public void  talk(){
        System.out.println("话话话");
    }
}
public class Demo02 {
    public static void main(String[] args) {
        Student student=new Student();//实例化类
        student.talk();
    }
}

 

 

命名规则:首字母小写,后面驼峰。

格式:

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

...

方法体

...

return 返回值;

}

  • void不需要返回值

  • 形参:方法里用来定义的参数

  • 实参:调用时传递给形参的参数

  • return除了返回值还有终止方法的作用

 

方法的重载

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

规则:

  • 方法名必须相同

  • 参数列表必须不同(个数、类型等)

  • 返回值类型可以相同也可以不同

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

     

命令行传参

 

不定向参数(可变参数)

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

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

例子

//可变参数
public class Demo03 {
    public static void main(String[] args) {
        printMax(1.2,56.9,88.56,85);
        printMax(new double[]{123,569,999.56,456});
    }
    public  static void printMax(double... numbers){
        if (numbers.length ==0){
            System.out.println("啥也没");
            return;
        }
        double result =numbers[0];
        for (int i=1;i<numbers.length;i++){
            if (numbers[i]>result){
                result=numbers[i];
​
            }
        }
        System.out.println("最大的是:"+result);
​
    }
​
}
//最大的是:88.56
//最大的是:999.56

 

 

 

递归

递归结构包括两个部分:

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

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

例子


//递归
public class Demo04 {
    public static void main(String[] args) {
        System.out.println(f(5));
    }
​
    //阶乘
    public static int f(int n) {
        if (n == 1) {
            return 1;
        } else {
            return n * f(n - 1);
        }
    }
​
}

 

这个例子里f(1)就是边界条件

  • JAVA使用栈机制,如果调用深度过大会导致程序崩溃(如1000!),理解递归思想

 

值传递(Java)和引用传递

  • 在Java中所有的参数传递,不管基本类型还是引用类型,都是值传递,或者说是副本传递。
    只是在传递过程中:

    如果是对基本数据类型的数据进行操作,由于原始内容和副本都是存储实际值,并且是在不同的栈区,因此形参的操作,不影响原始内容。

    如果是对引用类型的数据进行操作,分两种情况,一种是形参和实参保持指向同一个对象地址,则形参的操作,会影响实参指向的对象的内容。一种是形参被改动指向新的对象地址(如重新赋值引用),则形参的操作,不会影响实参指向的对象的内容。

      

posted @ 2021-03-07 02:34  紫英626  阅读(71)  评论(0编辑  收藏  举报

紫英