方法与递归算法

方法:一段用于完成特定功能的代码片段,类似于其他语言的函数。

方法用于定义该类或该类的失礼行为特征和功能实现。方法是类和对象行为特征的抽象。方法类似于面向过程中的函数。在面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。方法包括方法名与参数。

方法的调用方式:

1.形式参数:在方法声明时用于接收外界传入的数据

2.实参:调用方法时实际传给方法的数据

3.返回值:方法在执行完毕后返回给调用它的环境的数据

4.返回值类型:事先约定的返回值的数据类型,如无返回值类型,必须显示指定为void

关系如下:

方法的运行实例:

注意事项:1.实参的数目、数据类型和次序必须和调用方法声明的形参列表匹配

2.return语句终止方法的运行并指定要返回的数据。

3.java中进行方法传递参数时,遵循值传递的原则

4.基本类型传递的是该数据值的copy值。(4,5在讲面向对象的额时候深入研究)

5.引用类型传递的是该对象引用的copy值,但指向的是同一个对象。

参数传递机制:

基本数据类型参数的传递:java中,方法中的所有参数都是“值传递”,也就是“传递的是值的副本”,我们得到的是“原参数的复印件,而不是原件”。因此,值传递不会影响原件。
引用类型参数的传递:传递的是值的副本,但引用类型指的是“对象的地址”,因此,副本和原参数的都指向了同一个地址,改变副本指向地址对象的值,也意味着指向对象的值发生了改变。

 

内存分析:

 

 

 

 

构造方法:构造器也叫构造方法(constructor),用于对象的初始化。

要点:

1.通过new 关键字调用。

2.构造器虽然有返回值,但是不能定义返回值类型,不能在构造器中使用return返回某个值。

3.如果没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加。

4.构造器的方法名必须与类名一致。

 

 

 方法的重载(overload):  重载的方法,实际是完全不同的方法,只是名称相同而已

构成重载的条件:1.形参类型、形参个数、形参顺序不同   2.只有返回值不同不构成方法的重载

 

public class TestOverload {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(add(4,6));  //10
        System.out.println(add(4,6,2));  //12
        System.out.println(add(2.0,6));  //8.0
        System.out.println(add(4,6.0));  //10.0
        //我们已经见过的方法的重载
        System.out.println();//0个参数
        System.out.println(1);//参数是一个int
        System.out.println(2.0);//参数是一个double
    }
    //名字相同的四个独立的求和方法
    static int add(int a,int b){  //static类型的方法可以不用创建对象,直接在主函数里面调用
        int sum=a+b;
        return sum;
    }
    //方法名相同,参数个数不同,构成重载
    static int add(int a,int b,int c){
        int sum=a+b+c;
        return sum;
    }
    //编译错误:只有返回值不同,不构成方法重载
    /*static double add(int a,int b){
        double sum=a+b;
        return sum;
    }
    */
    //编译错误,只有参数名称不同,不构成重载
    /*static int add(int b,int a)
    {
        int sum=a+b;
        return sum;
    }
    */
    //方法名相同,参数类型不同,构成重载
    static double add(double a,int b){
        double sum=a+b;
        return sum;
    }
    //方法名相同,参数顺序不同,构成重载
    static double add(int a,double b){
        double sum=a+b;
        return sum;
    }

}

 

递归   基本思想:自己调用自己

递归结构包括两个部分:1.定义递归头 即什么时候不调用自身方法    如果没有头,将进入死循环,也就是递归的结束条件

2.递归体  即什么时候需要调用自身方法

定义了递归体和递归头之后,程序运行如图:

•小练习:n!(递归与迭代)

具体递归执行步骤如下:

 

 

递归的缺陷:会占用大量的系统堆栈,内存耗用多。

注意:任何能用递归解决的问题也能用迭代解决。当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率时,可以采用递归。

在要求高性能的情况下尽量避免使用递归,既花费时间又消耗内存。

posted @ 2019-08-03 12:38  acehm  阅读(449)  评论(0编辑  收藏  举报