为了提高代码的复用性,对代码进行抽取
将这个部分定义成一个独立的功能,方便日后使用
java中对功能的定义是通过函数的形式来体现的。
1、先明确函数定义的格式
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2)
{
执行语句;
return 返回值;
}
当函数运算后,没有具体的返回值时,这是返回值类型用一个特殊的关键字来标识。
class FunctionDemo
{
public static void main(String[] args)
{
System.out.println(getResult(5));
getResult1(5);
}
static int getResult(int x)
{
return x*5+3;
}
static void getResult1(int x)
{
System.out.println("x*5+3="+(x*5+3));
return;//可以省略
}
}
class FunctionDemo2
{
public static void main(String[] args)
{
int sum=getSum(12,23);
System.out.println("sum="+sum);
}
如何定义一个函数呢?
1、既然函数是一个独立的功能,那么该功能的运算结果是什么先明确
因为这是在明确函数的返回值类型。
2、再明确在定义该功能的过程中是否需要未知的内容参与运算。
因为是在明确函数的参数列表(参数的类型和个数)。
需求:定义一个功能,完成3+2的运算,并将结果返回给调用者。
1、明确功能的结果:是一个整数的和。
2、在实现该功能的过程中是否有未知内容参与运算,没有。
其实这两个功能就是在明确函数的定义。
1、是在明确函数的返回值类型
2、明确函数的参数列表(参数的类型和参数的个数)
public static int getSum()
{
return 3+2;
}
以上这个函数的功能,结果是固定的,毫无扩展性而言。
为了方便用户需求,由用户来制定加数和被加数,这样,功能才有意义。
思路:
1、功能结果是一个和,返回值类型是int
2、有未知内容参与运算,有两个
这两个未知内容的类型都是int
public static int getSum(int x,int y)
{
return x+y;
}
需求:判断两个数是否相同
思路:
1、明确功能的结果:结果是:boolean
2、功能是否有未知内容参与运算
有,两个整数
public static boolean compare(int a,int b)
{
/*if (a==b)
{
return true;
}
else
return false;
*/
// return (a==b)?true:false;
return a==b;
}
}
class FunctionTest
{
public static void main(String[] args)
{
draw(5,9);
print99(9);
}
需求:定义一个功能,用于打印矩形
public static void draw(int row,int col)
{
for (int x=0;x<row;x++ )
{
for (int y=0;y<col ;y++ )
{
System.out.print("*");
}
System.out.println();
}
}
public static void print99(int x)
{
for (int a=1;a<=x ;a++ )
{
for (int b=1;b<=a ;b++ )
{
System.out.print(b+"*"+a+"="+(b*a)+"\t");
}
System.out.println();
}
}
}
什么时候用重载?
当定义的功能相同,但参与运算的未知内容不同,
那么,这时就定义一个函数名称以表示其功能,方便阅读,而通过参数列表的不同来区分多个同名函数。
class FunctionOverload
{
public static void main(String[] args)
{
add(1,5);
add(32,23,5);
}
public static void add(int x,int y)
{
System.out.println(x+"+"+y+"="+(x+y));
}
public static void add(int x,int y ,int z)
{
System.out.println(x+"+"+y+"+"+z+"="+(x+y+z));
}
}
void show(int a,char b,double c){}//看下面函数是否与该函数重载
a、void show(int x,char y,double z){}//没有,因为和原函数一样
b、int show(int a,double c,char b){}//重载,因为参数类型不同。注意:参数类型的顺序不一样,重载和返回值类型没关系
c、boolean show (int c,char b){}//重载,因为参数个数不同
e、double show(int x,char y,double z)//没有重载,这个函数不可以和给定函数同时存在同一个类中。
需求:已知学生成绩以100分为满分,共分5个等级:A,B,C,D,E.
90~100为等级A,80~89为等级B,70~79为等级C,
60~69为等级D,0~59为等级E。
要求定义一个成绩变量,当成绩变化时,可直接知道该成绩对应的等级。
例如:当成绩为100时,该学生的等级时A。
class Demo1
{
public static void main(String[] args)
{
char ch=getLevel(99);
System.out.println("level="+ch);
}
public static char getLevel(int num)
{
char level;
if(num>=90 && num<=100)
level = 'A';
else if(num>=80 && num<=89)
level = 'B';
else if(num>=70 && num<=79)
level = 'C';
else if(num>=60 && num<=69)
level = 'D';
else
level = 'E';
return level;
}
}
class Demo2
{
public static void main(String[] args)
{
show(0);//15
show(1);//14
}
public static void show(int i)
{
switch(i)
{
default:
i+=2;
case 1:
i+=1;
case 4:
i+=8;
case 2:
i+=4;
}
System.out.println("i="+i);
}
}