1 语句块
语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单java语句。块确定了局部变量的作用域。块中的程序代码,作为一个整体,是要被一起执行的。块可以嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块内的变量作用域仅限于语句块。
2 方法
方法就是一段用来完成特定功能的代码片段(相当于特殊的语句块),类似于其他语言的函数。我们可以反复的调用。
方法用来定义该类或该类的实例的行为特征和功能实现。方法是类和对象行为特征的抽象。方法很类似于面向过程中的函数。面向过程中,函数是最基本单位,整个程序由一个个函数调用组成。面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。
方法声明格式:
[修饰符1 修饰符2 ...] 返回值类型 方法名(形式参数列表){
java语句:...
}
方法的调用方式:
对象名.方法名(实参列表)
方法的详细说明:
1. 形式参数:在方法声明时用于接收外界传入的数据。
2.实参:调用方法时实际传给方法的数据。
3.返回值:方法在执行完毕后返还给调用它的环境的数据
4.返回值类型:事先约定的返回值的数据类型,如无返回值,必须指定为void。
1.目前阶段所有方法的修饰符列表统一写成:public static
2.返回值类型可以是java中任何一种数据类型
3.如果该方法执行结束之后没有任何返回值,那么返回值数据类型必须写成void
4.如果方法的返回值类型不是void,而是其他的数据类型,那么在方法体中必须保证有rerurn值
5.注意:如果return语句一旦执行,则标识该方法结束,所以return语句下面不能再编写其他的java语句
6.方法名只要是合法的标识符即可
7.方法的形式参数列表参数的个数可以是0个,也可以是1个,还可以是多个,如果是多个的话必须使用逗号隔开
8.方法的形式参数列表中起决定性作用的是参数的类型,而不是变量名
9.所有带有static关键字的方法被调用时,都采用类名称.方法名(实际参数列标配)
3 方法的重载
重载的方法,实际是完全不同的方法,只是名称相同而已。
(1)重载方法的参数必须不同。
参数个数不同,如method(int a)与method(int a,int b)
参数类型不同,如method(int a)与method(double a)
参数顺序不同,如method(int a,double b)与method(double a,int b)
(2)重载只与方法名和参数类型相关与返回值无关
如:void method(int x)与int method(int y)不是重载。
(3)重载与具体的变量标识符无关
如method(int x)与method(int y)不是重载。
(4)重载与修饰符无关。
如public static method()与public method()不是重载。
4 递归思想
4.1 递归的定义
递归(Recursion)是指在函数的定义中使用函数自身的方法。
4.2 递归的内涵
递归就是有去有回。递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。这些问题的演化过程是一个从大到小,由近及远的过程,并且会有一个明确的终点(临界点),一旦到达了这个临界点,就不用再往更小、更远的地方走下去。最后,从这个临界点开始,原路返回到原点,原问题解决。
4.3 递归的三要素
1、明确递归终止条件;
2、给出递归终止时的处理办法;
3、提取重复的逻辑,缩小问题规模。
4.4 递归解法
(1)在递去的过程中解决
function recursion(大规模){
if (end_condition){ // 明确的递归终止条件
end; // 简单情景
}else{ // 在将问题转换为子问题的每一步,解决该步中剩余部分的问题
solve; // 递去
recursion(小规模); // 递到最深处后,不断地归来
}
}
(2)在归来的过程中解决
function recursion(大规模){
if (end_condition){ // 明确的递归终止条件
end; // 简单情景
}else{ // 先将问题全部描述展开,再由尽头“返回”依次解决每步中剩余部分的问题
recursion(小规模); // 递去
solve; // 归来
}
}
4.5 实例
(1)求阶乘
public classMethod {static int add(intn) {if(n==1) { //递归终止条件
return 1; //简单场景
}return n*add(n-1); //缩小问题规模
}public static voidmain(String[] args) {
System.out.println(add(5));
}
}
(2)斐波纳契数列
public classMethodTest {static int add(intn) {if(n==1||n==2) { //简单场景
return 1;
}return add(n-1)+add(n-2); //缩小规模
}public static voidmain (String[]arg ) {
System.out.println(add(6));
}
}