JavaSE方法总结
方法是什么?
方法(function,通常又被称为函数)就是具有名称的特定功能代码的集合,解决了重复性代码的问题
方法就是一段可以重复调用的代码。假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹。发射炮弹的动作需要编写100行代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码,这样程序 会变得很臃肿,可读性也非常差。为了解决上述问题,通常会将发射炮弹的代码提取出来,放在一个{ }中并为这段代码起个名字,提取出来的代码可以被看作是程序中定义的一个函数。这样在每次发射炮弹的地方, 只需通过代码的名称调用方法,就能完成发射炮弹的动作。
在Java中,定义一 方法的语法格式如下
修饰符 返回值类型 方法名称(参数类型参数名1,参数类型参数名2)
执行语句
...
return返回值;
对于方法的语法格式,具体说明如下。
- 修饰符:方法的修饰符比较多,例如,对访问权限进行限定的修饰符:public 公共的 、protected 保护的、private 私有的 ,还有static 静态的、static修饰符、final修饰符等。
- 返回值类型:用于限定方法返回值的数据类型。
- 参数类型:用于限定调用方法时传入参数的数据类型。
- 参数名:是一个变量,用于接收调用方法时传入的数据。
- return关键字:用于返回方法指定类型的值并结束方法。
- 返回值:被return语句返回的值,该值会返回给调用者。
方法中的“参数类型参数名1,参数类型参数名2”称为参数列表,参数列表用于描 述方法在被调用时需要接收的参数,如果方法不需要接收任何参数,则参数列表为空,即()内不写任何内容。方法的返回值类型必须是方法声明的返回值类型,如果方法没有返回值,返回值类型要声明为void,此时,方法中return语句可以省略。
函数的参数传递
- 形式参数:函数定义时的参数为形式参数==>简称 形参
- 实际参数:函数调用时的参数为实际参数==>简称 实参
参数传递:只能由实参传给形参
注意:实参和形参在个数、顺序、类型上都要保持一致。
函数调用:
注意:实参和形参要一一对应,可能存在类型自动转换
1.方法为静态方法时:
- a.静态方法在同一类下时: 静态方法名(实参);
- b.静态方法不在同一类下时:类名.静态方法名(实参);
2.方法为实例方法时:
- 要先实例化一个对象,然后:对象.实例方法(实参);
例子如下:
public class methodTest01 {
public static void main(String[] args) {
//调用同一类下静态方法类名可省略
doSome();
//调用不同类下的静态方法类名要写
myMethod.doSome();
//调用同一类下实例方法要先实例化
methodTest01 mT01 = new methodTest01();
mT01.doOther();
//调用不同类下实例方法也要实例化
myMethod mM = new myMethod();
mM.doOther();
}
//同一类下静态方法
public static void doSome(){
System.out.println("执行同一类下的静态方法");
}
//同一类下实例方法
public void doOther(){
System.out.println("执行同一类下实例方法");
}
}
class myMethod{
//不同类下静态方法
public static void doSome(){
System.out.println("执行不同类下的静态方法");
}
//不同类下实例方法
public void doOther(){
System.out.println("执行不同类下实例方法");
}
}
执行结果:
1.无返回值
当函数定义完成后,不会自己执行,需要在主方法(main方法)中通过调用来执行
格式:函数名称([实际参数列表])
例:定义一个方法,使用“*”符号打印矩形
public static void main(String[] args) {
method(3,5);
}
public static void method(int h,int w) {
for(int i=0;i<h;i++) {
for(int j=0;j<w;j++) {
System.out.print("*");
}
System.out.println();
}
System.out.println();
}
结果:
2.有返回值
例:定义一个方法,求出面积
public static void main(String[] args) {
int area=method(3,5);
System.out.println("面积是:"+area);
}
public static int method(int x,int y) {
int temp=x*y;
return temp;
}
结果:面积是:15
方法重载
方法重载(overload)是指在同一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或个数或顺序。(满足三个下划线条件才构成重载)三个条件总结如下:
- 同一类中
- 方法名相同
- 不同参数列表(形参个数或者顺序不同)
注意:方法重载和 [修饰符列表] 无关,和返回值类型无关,这两者不同但方法名和参数列表相同时,构成重复定义方法的错误
例:定义3个add()方法,分别用于2个整数相加,3个整数相加和2个小数相加
public static void main(String[] args) {
int sum1=add(1,2);
int sum2=add(1,2,3);
double sum3=add(1.2,2.3);
System.out.println("sum1="+sum1); //3
System.out.println("sum2="+sum2); //6
System.out.println("sum3="+sum3); //3.5
}
public static int add(int x,int y) {
return x+y;
}
public static int add(int x,int y,int z) {
return x+y+z;
}
public static double add(double x,double y) {
return x+y;
}
递归方法
递归其实就是方法在执行的过程中调用了自己本身。
出现栈内存溢出错误(StackOverflow Error)时:
- 查递归的终止条件是否合法
- 尝试调整堆栈空间的大小
- 还不行就只能继续扩大栈内存空间
原则:能不用递归尽量不用,能用循环代替的尽可能使用循环
例:一个人开始上楼梯,假设这个人每一次只能上一个或者两个台阶当他到达第n个台阶时,问:共有多少种走法?(斐波那契数列) f(n) = f(n-1) + f(n-2)
public static void main(String[] args) {
System.out.println(F(11));
}
public static int F(int num) {
if(num==1) {
return 1;
}else if(num==2) {
return 2;
}else {
return F(num-1)+F(num-2);
}
}
输出:144