一:方法(函数)
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;
}
}
}