1.函数的定义:函数就是定义在类中的具有特定功能的一段独立的小程序;函数也称为方法;
2.函数的格式实例和讲解:
class FunctionDemo
{
public static void main(String[] args)
{
int c = add(3,4);
System.out.println("c="+c);
}
/*函数的格式(返回值类型和参数类型没有直接关系):
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,……)
{
执行语句;
return返回值;
}
返回值类型:函数运行后的结果的数据类型;
参数类型:是形式参数的数据类型;
形式参数:是一个量变,用于存储调用函数时传递给函数的实际参数;
实际参数:传递给参数的具体数值;
return:用于结束函数;
返回值:该函数运算后的结果,该结果会返回给调用者;
*/
public static int add(int a,int b)
{
return a+b;
/*
int sum = a+b;
return sum;
*/
}
/*
特殊情况:
功能没有具体的返回值;
这时return的后面直接用分号结束;
返回值类型怎么体现呢?因为没有具体值,所以不可以写具体的数据类型;
在java中只能用一个关键字来表示这种情况,关键字是:void;
总结:没有具体返回值时,返回值类型用void来表示;
注意:如果返回值类型是void,那么函数中的return语句可以省略不写;
public static void add(int a,int b)
{
System.out.println(a+b);
}
*/
}
3.函数的特点:
定义函数可以将功能代码进行封装;
便于对该功能进行复用;
函数只有被调用才会被执行;
函数的出现提高了代码的复用性;
对于函数没有返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写;
注意:函数中只能调用函数,不可以在函数内部定义函数;
定义函数时,函数的结果应该返回给调用者,交由调用者处理;
class functionDemo1()
{
public static void main(String[] args)
{
/*myPrint函数是在main函数内部定义函数,编译将不通过;
public static void myPrint()
{
System.out.println("Hello World);
}
myPrint();
*/
}
}
class FunctionDemo2
{
public static void main(String[] args)
{
System.out.println(add(3,4));
//add(3,4);
//int c = add(3,4);
//System.out.println("c="+c);
}
public static int add(int a,int b)
{
return a+b;
}
/*函数的结果应该返回给调用者,交由调用者处理,所以定义加法功能以下定义虽然可以但并不合理,这是初学者定义函数的误区;
public static void add(int a,int b)
{
System.out.println(a+b);
}
*/
}
4.函数练习1:
class FunctionDemo
{
public static void main(String[] args)
{
draw(8,4);
boolean result = equals(1,2);
System.out.println(result);
int max = getMax(8,5);
System.out.println(max);
}
/*
需求1:定义一个功能,画出一个矩形在控制台;
明确一:这个功能的结果是什么?
没有结果,因为直接打印到了控制台,并未返回给调用者,用void;
明确二:这个功能实现过程中是否需要未知内容参与运算?
有,行和列不确定,两个,整数int;
*/
public static void draw(int row,int col)
{
for(int x=1; x<=row; x++)
{
for(int y=1; y<=col; y++)
{
System.out.print("*");
}
System.out.println();
}
}
/*
需求2:定义一个功能,比较两个数是否相等;
明确一;这个功能的结果是什么?
有,boolean;
明确二:这个功能实现过程中是否需要为之内容参与运算?
有,两个整数;
*/
public static boolean equals(int a,int b)
{
/*方法一;
if(a==b)
return true;
else//else可以省略;
return false;
*/
/* 方法二:
return (a==b)?true:false;
*/
/*方法三;
boolean x;
if(a==b)
x = true;
else
x = false;
*/
//方法四:
return a==b;
}
/*
需求3:定义一个功能,获取两个整数中较大的那个数;
明确一;这个功能的结果是什么?
有,其中一个数,int;
明确二:这个功能实现过程中是否需要为之内容参与运算?
有,两个整数;
*/
public static int getMax(int a,int b)
{
/*
if(a>b)
return a;
else
return b;
*/
return a>b?a:b;
}
}
5.函数练习2:
public class FunctionDemo
{
public static void main(String[] args)
{
print99();
char c = getLevel(87);
System.out.println(c);
}
/*
定义一个功能,打印99乘法表;
*/
public static void print99()
{
for(int x=1; x<=9; x++)
{
for(int y=1; y<=x; y++)
{
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
/*
根据考试成绩获取学生分数对应的等级;
90~100 A
80~89 B
70~79 C
60~69 D
60以下 E
*/
public static char getLevel(int num)
{
/*
if(num>=90 && num<=100)
return 'A';
if(num>=80 && num<=89)//这里else可以不用,因为匹配上一条后有return结束函数就不会往下执行了;
return 'B';
*/
char level;
if(num>=90 && num<=100)
level = 'A';
else if(num>=80 && num<=89)//此处要用if的第三种格式,即要用else,因为不用else的话匹配上条后还会继续往下判断影响性能;
level = 'B';
else if(num>=70 && num<=79)
level = 'C';
else if(num>=60 && num<=69)
level = 'D';
else
level = 'E';
return level;
}
}
6.函数的重载(overload)与重载练习:
重载的概念:在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可;
重载的特点:与返回值类型无关,只看参数列表;
重载的好处:方便于阅读,优化了程序设计;
重载示例:
class FunctionDemo
{
public static void main(String[] args)
{
int x = add(3,4,8);
System.out.println(x);
printCFB(6);
printCFB();
}
/*
函数的重载:
1.同一个类;
2.同名;
3.参数个数不同,or 参数类型不同;
4.函数的重载和返回值类型无关;
5.java是严谨性语言,如果函数出现的调用的不确定性,会编译失败;
*/
//加法运算,两个整数的和
public static int add(int a,int b)
{
return a+b;
}
//加法运算,两个小数的和
public static double add(double a,double b)
{
return a+b;
}
//加法运算,三个整数的和
public static int add(int a,int b,int c)
{
/*方法一
return a+b+c;
*/
//方法二
return add(a,b)+c;
}
/*
打印乘法表
*/
public static void printCFB(int num)
{
for(int x=1;x<=num;x++)
{
for(int y=1;y<=x;y++)
{
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
/*打印标准乘法表*/
public static void printCFB()
{
printCFB(9);
}
/*
public static void printCFB()
{
for(int x=1;x<=9;x++)
{
for(int y=1;y<=x;y++)
{
System.out.print(y+"*"+x+"="+y*x+"\t");
}
System.out.println();
}
}
*/
}