首页 > 技术文章 > 方法(新定义一个方法,然后调用)

saowei 2021-11-27 23:52 原文

方法

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;
    }
}

推荐阅读