概念
函数就是定义在类中的具有特定功能的一段独立小程序,并能被多次使用.
提示
由名称、参数、返回值以及函数体组成。
修饰符 返回值类型 函数名(参数列表){
//函数体;
}

方法可以返回一个值。
rerurnValueType是方法返回值的数据类型。
有些方法只是完成某些要求的操作,而不是返回值,在这种情况下,returnValueType为关键字void.
例如在main方法中returnValueType就是void,在System.exit、System.out.print中返回值类型也是如此。
如果没有返回值,也称为带返回值的方法或者就是void方法
静态修饰符(static)
方法头:方法的修饰符、返回值类型、函数名、方法的参数。定义方法头中的变量称为形式参数(formal parameter)或者简称为形象(parameter).参数就像占位符。
当调用方法时,就给参数传递一个值,这个值称为实际参数或者实参。参数列表指明方法中参数的类型、顺序和个数。
方法名和参数列表一起构成方法签名。
参数是可选的,也就是说方法可以不包含参数。
注意
- 在一些语言中,方法称为过程或者函数,带返回值的方法称为函数。返回值类型为Void的方法称为过程。
- 我们经常会说"定义方法” 和“声明变量”,这里我们谈谈来着的细微差别。
-定义是指被定义的条目是什么,而声明通常是指为被声明的条目分配内存来储存数据。
警告
在方法头中,需要对每一个参数进行独立的数据类型声明。
重载
表面上来看:一个类中有若干个重名函数
重载和函数的权限修饰符有关系没?没关系
重载和函数的类型修饰符有关系没?有 为啥
重载和函数的返回值类型有关系没?没
和函数名有关系吗?有 前提重名
和函数的参数列表有关系没?和参数名没关系 和类型有关系
目前而言 重载的前提是函数重名
具体到底是不是重载关系 看参数类型的排列组合(个数,顺序)
add(double,double)
add(int,int)
add(int,double,int)
add(double,int,int)
add(int,int,double)
重载的好处?对函数的参数进行拓展
编写程序判读一个数是回文的情况下还是素数
import java.util.Scanner
class Demo03{
public static void main (String[] args){
int number=initDate();
//判断是否是回文素数
if(isHuiWenSuShu(number)){
System.out.println("是");
}else{
System.out.println("不是");
}
}
public static int initData(){ //调用initDate
Scanner scanner=new Scanner(System.in); //创建一个输入
System.out.print("请输入一个数字:"); //提醒用户输入一个数字
return scanner.nextInt(); //返回一个int类型的值给number
}
public static boolean isHuiWenSuShu(int num){
//判断是否是素数且回文
return isHuiWen(num)&&isSuShu(num); //返回一个值给if判断
}
public static boolean isHuiWen(int num){ // 计算翻转数字
int revNum=reverse(num);
return revNum==num;
}
public static int reverse(int num){ //调用reverse来计算反转数字
int sum=0;
while(true){
sum=sum*10+num%10;
num/=10;
if(num==0){
break;
}
}
return sum; //将sum返回给revNum
}
public static boolean isSuShu(int num){
//5.计算素数
boolean flag=true; //是素数(用哨兵)
for(int i=2;i<=num/2;i++){
if(num%i==0){
flag=false;
break;
}
}
return flag; //将这个值返回给isSuShu
}
}
汉诺塔(递归方法)
前6个 x->z
前5个 x->y
前4个 x->z
前3个 x->y
前2个 x->z
前1个 x->y
第2个 x->z
前1个 y->z
第3个 x->y
前2个 z->y
前1个 z->x
第2分 z->y
前1个 x->y
第4个 x->z
前3个 y->z
第5个 x->y
前4个 z->y
第6个 x->z
前5个 y->z
A B C
前n个 A->C
前n-1个 A-B? 借助C
第n个 A-C?
前n-1个 B-C? 借助A
import java.util.Scanner;
class Demo01{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入盘子的个数:");
int level=scanner.nextInt();
move("x","y","z",level);
}
public static void move(String from,String mid,String to,int level){
if(level==1){
System.out.println(from+"->"+to);
}else{
move(from,to,mid,level-1);
System.out.println(from+"->"+to);
move(mid,from,to,level-1);
}
}
}