方法的声明与调用

一:方法(函数)

Java的方法类似于其它语言的函数,是一段用来完成特定功能的代码片段,声明格式:

[修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表){
  程序代码;
  [return 返回值]; 
}

方法的参数列表既可以是有参数的,也可以是没有参数的

方法的好处:提高代码的重用性

说明:本文涉及到的方法是由static修饰的静态方法。

二:带参方法

带参方法的定义和无参方法一致,只是()中包含有一个或多个变量的定义,称为参数列表

1、参数有两种:

形式参数(形参):在方法定义时用于接收外界输入的数据。

实际参数(实参):调用方法时实际传给方法的数据。

2、方法参数的传递

(1) 如果传递的参数是基本数据类型,那么方法接收到的实际上是这个数据的值拷贝(值副本)。

(2) 如果传递的参数是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。

3、方法返回值

(1)如果方法没有返回值,返回值类型为void

(2)如果方法有返回值, 方法中必须使用关键字return返回该值,返回值类型为该返回值的类型

return表达式;          作用: 跳出方法、返回结果

如果在方法中直接写return,而没有返回值,则方法结束。

三:方法的调用

Java语言中使用下述形式调用方法:

直接调用:方法名(实参列表);

类名调用:类名.方法名(实参列表);

对象调用:对象.方法名(实参列表);(面向对象会使用)

实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配。

例:

package method;

public class ChangeNumber {

	public static void main(String[] args) {
        int a=1;
        System.out.println("调用changeNumber(int a)方法之前,a="+a);
        changeNumber(a);
        System.out.println("调用changeNumber(int a)方法之后,a="+a);
	}
	public static void changeNumber(int a){
		if(a==3){
			System.out.println("直接结束该方法");
			return;   // 直接结束方法
		}
		System.out.println("进入changeNumber(int a)方法了...a="+a);
		a+=5;
		System.out.println("在changeNumber(int a)方法改变值后,a="+a);
	}
}

运行结果:


例:求如果指定基数为2,次数为5, 则求2+22+222+2222+22222的值;

第1项:2*0+2
第2项:2*10+2

第3项: 前一项*10+2;

package method;
/*
 * 求如果指定基数为2,次数为5, 则求2+22+222+2222+22222的值;

第1项:2*0+2
第2项:2*10+2
第3项: 前一项*10+2;
 */

import java.util.Scanner;

public class BaseMethod {

	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("请输入基数:");
		int base=scan.nextInt();    // 等待键盘输入
		System.out.print("请输入次数:");
		int count=scan.nextInt();
		int sum=baseSum(base,count);
		System.out.println("计算结果:"+sum);
		scan.close();
	}	
	/** 这个方法用来根据基数和次数计算和
	 * @param base 接收传递来的基数
	 * @param count  接收传递来的次数
	 * @return 返回计算结果
	 */
	public static int baseSum(int base,int count){
		int number=0;
		int sum=0;
		for (int i = 0; i <count; i++) {
			number=number*10+base;   // 计算当前项的数据
			sum+=number;
		}
		return sum;
	}
}

运行结果:


四:递归算法(递推与回归)

递归调用指的是方法执行过程中出现该方法本身的调用。

自己调用自己

递归算法的两个条件:

递归出口(结束条件)

逐层递推向出口逼近

例:汉诺塔

package recursive;

import java.util.Scanner;

public class Hanoi {

	public static int count=0;  // 记录移动次数
	
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		System.out.print("请输入圆盘个数:");
		int num=scan.nextInt();
		hanoi(num,'A','B','C');
		scan.close();
	}
	
	/**
	 * 
	 * @param num :圆盘个数
	 * @param start  : 起始棒
	 * @param help : 辅助棒
	 * @param dest : 目标棒
	 */
	public static void hanoi(int num,char start,char help,char dest){
		if(num==1){
			count++;
			System.out.println("第"+count+"次移动,从"+start+"棒移动到"+dest+"棒");
		}else{
			hanoi(num-1,start,dest,help);
			count++;
			System.out.println("第"+count+"次移动,从"+start+"棒移动到"+dest+"棒");
			hanoi(num-1,help,start,dest);
		}
	}
}

运行结果:

package recursive;

public class SumRecursive {

	public static void main(String[] args) {
        int result=getSum(100);
        System.out.println(result);
	}
	
	/**
	 * 此方法的作用是获取从1到number的和
	 * @param number 
	 * @return
	 */
		
	/*
	 * eg:number=10
	 * getSum(9);
	 * getSum(8);
	 * ....
	 * getSum(2);
	 * getSum(1)结果是1;
	 * */
	public static int getSum(int number){
		if(number==1){
			return 1;
		}else{
			int temp=getSum(number-1);   // 从1开始到number-1的和
			return temp+number;
		}
	}
}
packagerecursive;

publicclass Test {

       public static void main(String[] args) {
              test1();
              System.out.println("结束主方法...");
       }
 
       public static void test1(){
              System.out.println("进入test1...");
              test2();
              System.out.println("结束test1...");
       }
       public static void test2(){
              System.out.println("hahahahahhhahahah");
       }
}

五:方法的可变参数

  在JDK1.5(JavaSE 5.0)之后,引入了一个新概念:

  可变参数,即:方法中可接收的参数不再是固定的,而是可以根据需要传递数量不等的参数个数。

可变参数的定义格式:

返回值类型  方法名称(类型…  参数名称){

 }

注意:向方法传递可变参数后,参数在方法内部是以数组的形式保存下来的。

package recursive;

public class Test {

	public static void main(String[] args) {
		test1();
		System.out.println("结束主方法...");

	}
	
	
	public static void test1(){
		System.out.println("进入test1...");
		test2();
		System.out.println("结束test1...");
	}
	
	public static void test2(){
		System.out.println("hahahahahhhahahah");
	}

}

package recursive;

public class SumRecursive {

	public static void main(String[] args) {
        int result=getSum(100);
        System.out.println(result);
	}
	
	/**
	 * 此方法的作用是获取从1到number的和
	 * @param number 
	 * @return
	 */
	
	
	/*
	 * eg:number=10
	 * getSum(9);
	 * getSum(8);
	 * ....
	 * getSum(2);
	 * getSum(1)结果是1;
	 * */
	public static int getSum(int number){
		if(number==1){
			return 1;
		}else{
			int temp=getSum(number-1);   // 从1开始到number-1的和
			return temp+number;
		}
	}

}

package recursive;

public class SumRecursive {

	public static void main(String[] args) {
        int result=getSum(100);
        System.out.println(result);
	}
	
	/**
	 * 此方法的作用是获取从1到number的和
	 * @param number 
	 * @return
	 */
	
	
	/*
	 * eg:number=10
	 * getSum(9);
	 * getSum(8);
	 * ....
	 * getSum(2);
	 * getSum(1)结果是1;
	 * */
	public static int getSum(int number){
		if(number==1){
			return 1;
		}else{
			int temp=getSum(number-1);   // 从1开始到number-1的和
			return temp+number;
		}
	}

}




  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值