JAVA基础5——方法
方法
方法是完成特定功能的代码块。
定义方法可以将功能代码进行封装,
便于对该功能进行复用,提高代码的复用性
方法的格式
方法的格式
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
方法体语句;
return 返回值;
}
方法的格式说明
- 修饰符:目前就用 public static。后面我们再详细的讲解其他的修饰符。
- 返回值类型:就是功能结果的数据类型。
- 方法名:符合命名规则即可。方便我们的调用。
- 参数:
- 实际参数:就是实际参与运算的。
- 形式参数;就是方法定义上的,用于接收实际参数的。
- 参数类型:就是参数的数据类型
- 参数名:就是变量名
- 方法体语句:就是完成功能的代码。
- return:结束方法的。
- 返回值:就是功能的结果,由return带给调用者。
要想写好一个方法,就必须明确两个东西
- 返回值类型(结果的数据类型)
- 参数列表 (形参的类型及个数)——你要传递几个参数,以及每个参数的数据类型
方法的调用(有具体返回值)
案例-两数求和
需求:求两个数据之和的案例
public class Demo_method {
public static int add(int a,int b){ //定义求和方法
int sum=x+y;
return sum;
}
}
调用方法
- 单独调用,但是没有意义,所以不推荐。
int x=10;
int y=20;
add(x,y); //单独调用
- 输出调用,但是不够好,因为我们可能需要针对结果进行进一步的操作。
int x=10;
int y=20;
System.out.println(add(x,y)); //输出调用
- 赋值调用可以赋值给一个和返回类型对应的变量,然后输出变量(推荐方案)
int x=10;
int y=20;
int sum=add(x,y);
//sum可以进一步操作
System.out.println(sum); //赋值调用
void返回类型的方法:只能单独调用!不能用于打印!
注意:返回值类型和参数列表中参数类型没有关系!
定义功能,方法中需要定义什么就定义什么,不需要的就不要定义。
方法调用详细步骤
public class Demo_method {
public static void main(String[] args){ //1.从main方法开始执行
int x=10;
int y=20; //2.定义两个int类型变量
int sum=add(x,y); //3.调用add方法,
//7.将方法add的结果30返回给sum
System.out.println(sum);
}
public static int add(int a,int b){ //4.将x和y分别传递给a和b;赋值a=10,b=20
int sum=a+b; //5.执行语句把a和b相加赋值给sum
return sum; //6.把sum结果30返回来
}
}
方法的练习–比较两数是否相等
需求:键盘录入两个数据,比较两个数是否相等
//比较两个数是否相等
/*分析
返回值类型boolean
参数列表 int a,int b
*/
import java.util.Scanner;
public class Dome_function {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数据");
int x=sc.nextInt();
System.out.println("请输入第二个数据");
int y=sc.nextInt();
boolean result=compare(x,y);
System.out.println(result);
}
public static boolean compare(int a,int b){
//if语句实现
/*if(a==b){
return true;
}else {
return false;
}
*/
//三元改进
//boolean x=(a==b)?true:false;
//return x;
//继续改进
//return (a==b)?true:false;
//最终改进
return a==b;
}
}
注意事项
- 自定义方法只有被调用才会被执行。
- 方法中只能调用方法,不可以在方法内部定义方法。因为方法是平级的。
- 方法定义的时候参数之间用逗号隔开
- 方法调用的时候不用在传递数据类型
- 如果方法有明确的返回值,一定要有return带回一个值
方法的调用(无具体返回值)
案例-输出星形
需求:根据键盘录入的行数和列数,在控制台输出星形
public static void printStar(int a,int b){
for (int x=1;x<=a;x++){ //外循环决定行数
for (int y=1;y<=b;y++){ //内循环决定列数
System.out.print("*");
}
System.out.println();
}
}
调用方法(无返回值,void)
- 单独调用
printStar(6,7)
- 输出调用(错误)
System.out.println(printStar(6,7));
报错如下
错误:(13, 37) java: 此处不允许使用 '空' 类型
3. 赋值调用(错误)
void v=printStar(6,7)
报错如下
错误:(13, 9) java: 非法的表达式开始
正确完整代码如下
// 需求:根据键盘录入的行数和列数,在控制台输出星形
import java.util.Scanner;
public class Dome_function2 {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入行数");
int x=sc.nextInt();
System.out.println("请输入列数");
int y=sc.nextInt();
printStar(x,y);
//void v=printStar(6,7);
//System.out.println(printStar(6,7));
}
public static void printStar(int a,int b){
for (int x=1;x<=a;x++){ //外循环决定行数
for (int y=1;y<=b;y++){ //内循环决定列数
System.out.print("*");
}
System.out.println();
}
}
}
方法重载
方法重载概述:
- 在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可
- 函数的功能一样,仅仅是参与运算的未知内容不同时,可以定义多个函数,却使用统一函数名称,这样方便阅读。
- 在调用时,虚拟机通过参数列表的不同来区分同名函数。
- 好处:方便阅读,优化了程序设计。
- 特点:与返回值类型无关
参数列表不同:
- 参数个数不同
- 参数类型不同
- 参数的顺序不同(算重载,但是在开发中不用)
求和案例
public class FunctionOverload {
public static void main(String[] args){
System.out.println(sum(10,30));
System.out.println(sum(10,30,88));
System.out.println(sum(10.59f,30.55f));
System.out.println(sum(10.89f,30,83));
}
public static int sum(int a,int b){
System.out.println("int");
return a+b;
}
public static int sum(int a,int b,int c){
System.out.println("int");
return a+b+c;
}
public static float sum(float a,float b){
System.out.println("float");
return a+b;
}
public static float sum(float a,int b,int c){
System.out.println("float");
return a+b+c;
}
}
运行结果:
int
40
int
128
float
41.14
float
123.89
如何判断几个函数是否是重载的呢?
- 函数名相同
- 参数列表不同(个数和类型)