方法:一段用于完成特定功能的代码片段,类似于其他语言的函数。
方法用于定义该类或该类的失礼行为特征和功能实现。方法是类和对象行为特征的抽象。方法类似于面向过程中的函数。在面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。方法包括方法名与参数。
方法的调用方式:
1.形式参数:在方法声明时用于接收外界传入的数据
2.实参:调用方法时实际传给方法的数据
3.返回值:方法在执行完毕后返回给调用它的环境的数据
4.返回值类型:事先约定的返回值的数据类型,如无返回值类型,必须显示指定为void
关系如下:
方法的运行实例:
注意事项:1.实参的数目、数据类型和次序必须和调用方法声明的形参列表匹配
2.return语句终止方法的运行并指定要返回的数据。
3.java中进行方法传递参数时,遵循值传递的原则
4.基本类型传递的是该数据值的copy值。(4,5在讲面向对象的额时候深入研究)
5.引用类型传递的是该对象引用的copy值,但指向的是同一个对象。
参数传递机制:
引用类型参数的传递:传递的是值的副本,但引用类型指的是“对象的地址”,因此,副本和原参数的都指向了同一个地址,改变副本指向地址对象的值,也意味着指向对象的值发生了改变。
内存分析:
构造方法:构造器也叫构造方法(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!(递归与迭代)
具体递归执行步骤如下:
递归的缺陷:会占用大量的系统堆栈,内存耗用多。
注意:任何能用递归解决的问题也能用迭代解决。当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率时,可以采用递归。
在要求高性能的情况下尽量避免使用递归,既花费时间又消耗内存。