何为方法?
- System.out.println() ; 前面一直在用,关于它你知道多少?
除了是输出语句外,我们还应该知道:System是系统的一个类,out是System下的一个输出对象,println()是一个方法。回想前面学的scanner.nextLine()
scanner.nextInt() 都是 对象.方法名()
- 方法是语句的集合,它们在一起执行一个功能,可以被重复使用。
- 方法包含于类或者对象中(不能在方法中再定义方法)
- 设计方法的原则:方法的本意是功能块,就是实现某个功能的语句块的集合。我们设计方法的时候,最好保证方法的原子性,
就是一个方法只完成1个功能,这样有利于我们后期的扩展。
- 回顾方法的命名规则?
简单方法的代码实现
package com.ruomeng.method;
/**
* @author 1301450090@qq.com
* @date 2021/3/22 9:04
*/
public class Demo01 {
/**
* main方法
* */
public static void main(String[] args) {
int sum = add(1,2);
System.out.println(sum);
}
/**
* 加法方法
* */
public static int add(int a,int b){
return a + b;
}
}
方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){
...
方法体
...
return 返回值;
}
-
修饰符:修饰符是可选的(可以是多个),告诉编辑器如何调用该方法。定义了该方法的访问类型。
-
返回值类型:
- 什么是返回值:一个方法可以完成某些特定的功能,这个功能结束之后大多需要返回最终执行结果,执行结果可能是一个具体存在的数据,而这个具体存在的数据就是返回值。
- 不是所有的方法都有返回值:如果一个方法执行结束之后不返回任何数据,返回值类型必须为void关键字;若返回值类型不是void,这个方法执行结束之后必须返回一个具体的数值,否则编译会报错。
- 如何返回值:return 值; 值的数据类型必须和方法的返回值类型一致 返回值类型是void时,方法体中不能编写 return 值; 这样的语句,但是可以写return;这样的语句,它代表终止return所在的方法。
-
方法名:是方法的实际名称。规则:合法、见名知意、尽量使用动词,首字母小写且遵循驼峰命名规则。
-
参数类型:形参是局部变量,在方法被调用时用于接收外界输入的数据。参数是可选的(可以是多个,多个形参之间用英文逗号隔开),可以不包含任何参数。形参中起决定性作用的是形参的数据类型,形参(局部变量)的名字只是一个标识符,方法在调用时,实际给方法传递的真实数据被称为实际参数(实参)。
-
方法体:方法体包含具体的语句,定义该方法的功能。
实参的类型
实参可以是 常量、变量、表达式、方法等,无论实参是何种类型的量,在进行方法调用时,它们都必须具有确定的值, 以便把这些值传送给形参。
因此应预先用赋值,输入等办法使实参获得确定值。
实参和形参的区别:
1.形参是空白或占位符:方法的形参列于方法声明中,在方法定义的方法体内使用。当方法调用时,形参(任何种类的)是一类将被填充的空白或是占位符。
2.实参是用来填充形参的:当方法被调用时,实参列在方法名后面的括号里。执行方法调用时,实参被传递给形参。
3.传值调用和引用调用:指的是用于参数传递过程中的一种机制。传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。
代码实现
- 形参、实参的简单举例说明
package com.ruomeng.method;
/**
* @author 1301450090@qq.com
* @date 2021/3/22 10:14
*/
public class Demo02 {
public static void main(String[] args) {
//实参:实际调用传递给形参的参数 下面为int型的数 1 2
int sum = add(1,2);
System.out.println(sum);
}
/**
*形式参数:用来定义作用的 下面的 a b 形参名可以自己任意命名,它只是一个形式
*/
public static int add(int a,int b){
return a + b;
}
}
- 自定义一个比较两个整数大小的方法
package com.ruomeng.method;
/**
* @author 1301450090@qq.com
* @date 2021/3/22 10:35
*/
public class Demo03 {
public static void main(String[] args) {
int max = max(10,10);
System.out.println(max);
}
/**
* 自定义一个比较两个整数大小的方法
* public(权限修饰符:公共的,就是所有人都可以使用 知道即可,面向对象的时候再细讲)
* static (这个修饰符就相当于告诉你,我要直接调用类变量)
* int(方法返回值类型为int)
* 参数值类型int,形式参数名自定义,这里定义为num1 num2
*/
public static int max(int num1,int num2){
int result ;
if (num1==num2){
System.out.println("num1=num2");
return 0;
}
//通过分析,这里需要if双选择语句
if (num1>num2){
result = num1;
}else{
result = num2;
}
//定义的方法有具体的返回值类型时,我们需要return一个结果,return要放在我们定义的方法最下面
//注意:return除了返回结果的作用,还有终止方法的作用,上面的return 0就是 当num1==num2时终止max方法,将0的值赋给方法调用中的max,由输出语句输出max结果为0
return result;
}
}
方法的调用
- 方法只定义不调用是不会执行的,只有调用的时候才会执行。
- 完整调用方法:类名.对象名.方法名(实参列表)
- 在同一类中调用方法,如果方法的修饰符中有static关键字,类名可以省略;当调用其它类中的方法时,尽管有static关键字也不能省略类名,否则会默认从当前类中寻找方法调用。
- 静态方法可以直接调用(可以省略对象名),而非静态方法需要定义这个类的对象,通过对象名调用
- Java支持
两种调用
方法的方式,根据方法是否返回值来选择 - 当方法
返回一个值
的时候,方法调用通常被当作一个值。格式:数据类型 变量名 = 方法名(实参列表);
//赋值调用 格式:数据类型 变量名 = 类名.对象名.方法名(实参列表); 调用方法,并且将返回值赋值给一个变量。变量数据类型必须和方法的返回值类型对应一致。
int larger = max(10,20);
//打印调用 格式:System.out.println(类名.对象名.方法名(实参列表)); 调用方法,并且将返回值打印显示出来
System.out.println(sum(4,30))
- 如果方法
返回值类型是void
,方法调用一定是一条语句。例如:
//单独调用 格式:类名.对象.方法名(实参列表); 静态方法可以直接调用省略对象名,类名通常也可以省略,即方法修饰符列表含static时格式:方法名(实参列表)
System.out.println("Hello,ruomeng!");
方法调用过程图解(以典型的赋值调用为例)
拓展:值传递
和引用传递
的区别,Java中使用的是什么?(笔试题)
值传递和引用传递传的到底是啥?什么是堆、栈、函数调用栈?(详解)
方法重载
-
重载就是在一个类中,有相同的方法名,但形参不同的方法。
-
如果只需要执行一个操作,具有相同的方法名将会增加程序的可读性。
-
方法重载的规则:
方法名称必须相同。
参数列表必须不同(参数个数不同、类型不同、顺序不同)。
- 方法的返回类型可以相同可以不同。
(但建议使用统一的返回值类型)
方法的重载与方法的返回值类型无关
-
实现理论:
- 方法名称相同时,编译器会根据调用方法的参数个数、参数类型去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
注意:
1.在方法重载规则的参数列表必须不同中 “顺序不同”
指的是 方法中所含的多种参数类型的顺序
的不同。
第1个和第2个方法的参数个数不同,参数类型相同
第2个和第3个方法的参数类型不同,参数个数相同
第4个和第5个方法的参数个数相同,所包含的参数类型相同,参数类型的顺序不同
代码实现:
public static int add (int a,int b){
return a + b;
}
public static int add(int a,int b,int c){
return a + b + c;
}
public static float add(float a,float b,float c){
return a + b + c;
}
public static float add (float a,int b){
return a + b;
}
public static float add (int a,float b){
return a + b;
}
}
如果我的博客对你有一点点帮助,望请大侠可以给文章点个赞再走,你们的鼓励将是我创作优质内容的动力!