方法
1、 含义:
简单的说:方法就是完成特定功能的代码块
在很多语言里面都有函数的定义
函数在Java中被称为方法
2、语句格式:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
函数体;
return 返回值;
}
3、名词解释:
①修饰符:修饰符比较多,但是目前我们只需要记住一个组合public static
后面面向对象的时候,我们详细介绍有哪些修饰符,怎么去写。
②返回值类型:定义return返回值的数据类型。
(返回值要根据题目要求,确定最后输出的结果是什么,然后来确定类型)
③方法名:给这个方法起个名字
(如果名字是由一个单词组成,所有字母均小写)
(如果名字是由多个单词组成,第一个单词全部小写,从第二个单词开始,首字母大写,其余字母小写)
④参数:
(1)形参
定义在方法上面的参数名
(2)实参
将来实际调用方法传入的值,叫实参
⑤参数类型:
限定将来调用方法需要传入参数的数据类型
⑥参数名:(形参)
是一个变量,用于接收将来调用方法传入的参数,名字见名之意
⑦函数体:
完成方法功能的代码,实现主要的方法逻辑
⑧return:
一般情况下,有返回值的方法,才会有return,return的作用是将计算好的
结果返回给调用者,返回的类型是与方法定义的返回值类型一致
返回值:
程序被return带回的结果,返回给调用者
()
4、(1)//需求:计算两个int类型的数之和
(普通方法解决如下)
public class FunctionDemo1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int result = a + b;
System.out.println("两个数的之和位:"+result);
}
}
(2)//需求:计算两个int类型的数之和
(用定义一个新的方法(函数)解决)
public class FunctionDemo1 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int res =sum(a,b); //调用新定义的方法sum(a,b);
//sum后括号里的变量是在main方法中定义的变量
System.out.println(res); //定义一个变量res来接收方法的返回值
//也可以不用定义res,直接用输出语句(不建议):System.out.println(sum(a,b));
}
// 方法与方法之间是平级关系,不能嵌套定义
// (定义一个新的方法,要在main方法的大括号之外,类的大括号之内)
public static int sum(int x1,int x2){ //public static 是修饰符
int result = x1 + x2; //int是返回值类型,sum是方法名,代表示数字之和
return result; //int x1表示: 参数类型 参数1
//int x2表示: 参数类型 参数2
} //int result = x1 + x2; 表示函数体
} //result是定义的一个变量来接收x1,x2之和
//result在return后面又表示返回值
5、*使用方法的步骤:
(1)先在main方法内,定义变量int a = 10;int b = 20;
(2)在main方法的大括号之外,类的大括号之内,定义一个新的方法
①定义新方法的时候,先确定返回值类型
②方法名根据题意自行取,参数名也是随便起,要用英文逗号隔开
③根据题意来确定函数体
④返回值是上一行所定义的东西
(3)在main方法中来调用新定义的sum函数(方法)
①定义一个<变量>来接收调用的函数
②在main方法内,输出接收函数的<变量>
6、*注意:(1)sum(a,b);中的a和b,要和方法中的x1和x2顺序对应的
例:如果需要计算20和12.5之和,那么参数类型要发生改变,如下
public static double sum(int x1,double x2){
double result = x1 + x2;
return result;
}
7、例:// 需求:键盘录入两个数据,返回两个数中的最大值
import java.util.Scanner; //第1步:导包,import java.util.Scanner
public class FunctionDemo2 {
public static void main(String[] args) { //创建main方法
Scanner sc = new Scanner(System.in); //第2步:创建键盘录入对象
System.out.println("请输入第一个数:"); //快捷键:sc.nextInt().var回车,这两行要连在一块
int a = sc.nextInt(); //第3步:调用对象中的方法,接收键盘录入的信息;
//这两行要连在一块,上下顺序不能颠倒;编写代码的时候, 先写下面一行,再写上面一行
System.out.println("请输入第二个数:");
int b = sc.nextInt();
int max = maxNum(a,b); //第5步:调用新定义的方法,紧接着下面输出
System.out.println("两个数的最大值为:"+max);
}
public static int maxNum(int x1,int x2){ //第4步:定义一个方法,获取两个数中的最大值
if(x1>x2){
return x1;
}else{
return x2;
}
}
}
8、例://需求:键盘录入数据,比较两个数是否相等
(比较是否相等,说明输出结果是布尔类型)
import java.util.Scanner; //第1步:导包
public class FunctionTest1_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //第2步:创建键盘录入对象
System.out.println("请输入第一个数:"); //第3步:调用对象中的方法,接收键盘录入的信息
int a = sc.nextInt(); //这两行顺便不可颠倒;编写的时候,先写调用的方法,然后在上面一行写输出语句
System.out.println("请输入第二个数:");
int b = sc.nextInt();
boolean res = equalsNum(a,b); //第5步:调用新定义的方法,然后输出
System.out.println(res);
}
public static boolean equalsNum(int x1,int x2){ //第4步,创建一个新方法,比较两个数是否相等
if(x1==x2){
return true;
}else{
return false;
}
}
}
9、例://需求:键盘录入三个数据,返回其中的最大值
import java.util.Scanner; //第1步:导包
public class FunctionTest1_2 {
public static void main(String[] args) { //创建main方法
Scanner sc = new Scanner(System.in); //第2步:创建键盘录入对象
System.out.println("请输入第一个数:"); //第3步:调用对象中的方法,接收键盘录入的信息
int a = sc.nextInt(); //然后输出
System.out.println("请输入第二个数:");
int b = sc.nextInt();
System.out.println("请输入第三个数:");
int c = sc.nextInt();
int res = maxNumThree(a,b,c); //第5步:调用新定义的方法,然后输出
System.out.println(res);
}
public static int maxNumThree(int x1,int x2,int x3){ //第4步:创建新的方法,获得三个数中的最大值
if(x1>x2){
if(x1>x3){
return x1;
}else{
return x3;
}
}else{
if(x2>x3){
return x2;
}else{
return x3;
}
}
}
}
没有明确的返回值
1、其实就是void类型方法的调用,只能单独使用
2、没有明确返回值的方法
没有返回值的时候,方法上定义的返回值类型为void
void表示该方法,没有任何返回值
注意:
1、即使我们的方法没有写返回值类型,也是需要调用才能执行
2、没有明确返回值类型的方法,是可以单独调用的
*/
public class FunctionDemo2 {
public static void main(String[] args) {
eat(); //单独调用
}
//定义一个方法表示吃饭
public static void eat(){
System.out.println("吃饭");
}
}
3、例://需求:键盘录入行数和列数,输出对应的星形
(没有明确的返回值)
import java.util.Scanner; //第1步:导包
public class FunctionTest2_1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //第2步:创建键盘录入对象
System.out.println("请输入行数:"); //第3步:调用对象中的方法,接收键盘录入的信息
int row = sc.nextInt();
System.out.println("请输入列数:");
int col = sc.nextInt();
printStar(row,col); //第5步:在main方法中调用新定义的方法
//因为没有明确的返回值,所以可以单独调用
//无法定义变量接收,也不用写输出语句
}
//第4步:创建新的方法
public static void printStar(int row,int col){ //因为没有返回值,所以返回值类型用void
//row代表行,col代表列
for(int i=1;i<=row;i++){ //几行几列,用双重for循环
for(int j=1;j<=col;j++){
System.out.print("*\t"); //\t默认4个空格
}
System.out.println(); //表示输出要换行
}
}
}
4、//需求;键盘录入一个数据n(1<=n<=9),输出对应的nn乘法表
(没有明确的返回值)
import java.util.Scanner; //第1步:导包
public class FunctionTest3_1 {
public static void main(String[] args) { //创建main方法
Scanner sc = new Scanner(System.in); //第2步:创建键盘录入对象
System.out.println("请输入一个数据:"); //第3步:调用创建对象的方法,接收键盘录入信息
int i = sc.nextInt();
chengFaBiao(i); //第4步:调用新定义的方法
// 因为该题无明确的返回值,所以可以单独调用
}
public static void chengFaBiao(int x){
for(int i = 1;i<=x; i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();
}
}
}
输出结果如下:
请输入一个数据:
5
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
Process finished with exit code 0
方法的重载
1、含义:方法的重载:在同一类中,允许存在一个以上同名方法,
但是参数列表不能一样(方法名后面括号里的个数不能一样)
2、特点:①与返回值类型无关,只看方法名和参数列表
②调用时,虚拟机通过参数列表的不同来区分同名的方法
3、例:需求:计算两个数之和以及计算三个数的和
public class FunctionDemo3 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int res1 = sum(a,b); //调用方法1来计算两数之和
System.out.println(res1);
int c = 30;
int res2 = sum(a,b,c);
System.out.println(res2); //调用方法2来计算三数之和
}
public static int sum(int x1,int x2){ //定义新的方法1
int result = x1+x2;
return result;
}
public static int sum(int x1,int x2,int x3){ //再定义新的方法2,方法名可以与方法1相同,
// 但是参数列表不能一样
int result = x1+x2+x3;
return result;
}
}