1.什么是方法
方法 是类或对象的行为特征的抽象,方法 是类或对象最重要的组成部分。** 方法** 就是一个代码片段,类似于C语言中的“函数”。
方法 存在的意义:
1.当代码的规模比较复杂的时候能够模块化的组织代码;
2.方法能够在多个位置当中使用;
3.能够让代码更好理解;
4.直接调用写好的实现方法,快捷实现想要达成的目的。
方法不能够独立存在,方法必须属于类或对象。从逻辑意义上来看,方法要么属于该类本身,要么属于该类的一个对象。永远不能独立执行方法,执行方法必须使用类或对象作为调用者。
2.方法定义语法
基本语法:
//方法定义
public static 方法的返回值 方法名称([参数类型 形参...]){
方法体代码;
[return 返回值];
}
注意:1.方法在定义时,参数可以没有,若有参数每个参数需要指定其的类型;2.方法的返回值也可以没有,若不需要返回值,则返回值类型应当写为void;3.Java当中并没有“函数声明”的概念。
如果声明方法时包含形参声明,则调用方法时必须给这些形参指定参数值,调用方法时实际传给形参的参数值也被称为实参。另外,Java的参数传递机制中方法的参数传递只有一种,就是值传递。 ** 值传递** ,即将实参值的副本传入方法当中,而实参本身并不会受到影响。不管方法对这个实参副本如何操作,都不会对实际参数值产生任何影响。
示例
public class JavaTest01{
public static void swap(int a,int b){
int temp = a;
a = b;
b = temp;
System.out.println("swap方法中 a 的值为:" + a + ",b 的值为:" + b);
}
public static void main(String[] args){
int a = 10;
int b = 20;
swap(a ,b );
System.out.println("main方法中 a 的值为:" + a + ",b 的值为:" + b);
}
---------------------------------------------------------------------------
输出结果:
swap方法中 a 的值为:20,b 的值为:10
main方法中 a 的值为:10,b 的值为:20
}
方法执行规则:
1.方法只有在被调用的时候在会被执行;
2.参数传递完毕后,就会执行方法体代码;
3.当方法执行完毕(如遇到return 或 exit(0)),就会执行完毕。
4.一个方法能够被多次使用。
3.方法的重载
Java允许同一个类里定义多个同名方法,只要形参列表不同就可以。如果一个类当中包含两个或者两个以上的方法名相同,但是形参列表不同,则被称为 方法重载 。
方法重载的要求:同一类中方法名相同,参数列表不同
示例:
public class JavaTest02{
public static void test(int n){
System.out.println("有参数");
}
public static void test(){
System.out.println("无参数");
}
public static void main(String[] args){
test();
test(5);
}
}
------------------------------------------------
输出结果:
无参数
有参数
在编译、运行程序时,虽然两个test()的方法名相同,但因为它们的形参列表不同,系统也能够正常分别这两个方法。
4.方法递归
一个方法体内部调用自己本身,就被称为 ** 方法递归** 。方法递归当中包含了一个隐式的循环,它会重复执行某段代码,但这种重复执行无需循环控制。
递归要满足两个条件:1.调用自己本身;2.有一个趋近于终止的条件。由于方法调用都是发生在栈(大约1~2M)上的,如果没有终止条件,则会导致栈溢出异常(java.lang.StackOverFlowError)。
示例1:递归求N的阶乘。
public class JavaTest03 {
public static int factorial(int n){
if(1 == n){
return 1;
}
return n * factorial(n - 1);
}
public static int factorialOne(int n){
return (1 == n)? 1:(n * factorialOne(n - 1));
}
public static void main(String[] args) {
System.out.println(factorialOne(5));
}
}
示例2:求斐波那契数列的第N项。
import java.util.Scanner;
public class JavaTest05 {
//非递归
public static int fibOne(int n){
int f1 = 1;
int f2 = 1;
int f3 = 1;
for(int i = 3;i <= n;i++){
f3 = f2 + f1;
f1 = f2;
f2 = f3;
}
return f3;
}
//递归
public static int fibTwo(int n){
if(1 == n || 2 == n){
return 1;
}
return fibTwo(n - 1) +fibTwo(n - 2);
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println(fibOne(scan.nextInt()));
scan.close();
}
}
示例3:青蛙跳台阶,一只青蛙一次可以跳1级台阶,也可以跳2级台阶,求该青蛙跳上一个n级台阶总共有几种跳法。
import java.util.Scanner;
public class JavaTest07 {
public static int frogJumpOne(int n){
int f1 = 1;
int f2 = 2;
int f3 = 1;
if(2 == n){
return 2;
}
for(int i = 3;i <= n;i++){
f3 = f2 + f1;
f1 = f2;
f2 = f3;
}
return f3;
}
public static int frogJumpTwo(int n){
if(1 == n || 2 == n){
return n;
}
return frogJumpTwo(n - 1)+frogJumpTwo(n - 2);
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println(frogJumpOne(scan.nextInt()));
scan.close();
}
}