Java方法的定义和使用

如果后续我们写的代码越来越多,全部都放在main方法中的话,可读性会很不好,有一些代码也要重重复复的写,造成代码量很大...

所以我们可以将一些代码抽取出来,放在自定义的方法中,在main方法中直接或间接的调用它们。

1.什么是方法?

方法是具有一定功能的代码片段。

2.如何定义一个方法?

我们首先先看看我们最熟悉的main方法:

public static void main(String[] args) {
        
}

我们逐个来分析:

权限修饰符

public意为公有的,是一个权限修饰符。除此之外,我们还有另外三种权限修饰符:protected受保护的、private私有的、default(不写权限修饰符的话默认为default)。权限修饰符顾名思义就是访问的权限,不同的修饰符,访问的权限是不一样的。

权限修饰符用于修饰成员变量、方法、类、接口。(后续会学到这些概念)

(注意:方法中的局部变量只能使用默认的default,不能使用另外三个权限修饰符修饰)

在这里涉及到子类的概念,可暂时不管,因为我们目前只写一个类,所以看看本类就好。

本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类)
public
protected ×
default × ×
private × × ×

可以看到只要在同一个类中,被任何修饰符修饰的方法都是可以被调用的。(最后代码验证)

状态修饰符static

static是静态的意思。在这里先了解:被static修饰的变量为静态变量,被static修饰的方法称为静态方法。静态变量和静态方法都属于类,在静态方法中只能直接调用静态方法。(后续对象内容的时候会更加详细的介绍static)

返回值

void是返回值为空的意思,即没有要返回的数据,除了void,方法的返回值可以是基本数据类型、引用数据类型(数组、字符串、其它类、集合...)。

如何返回数据呢?

return + 对应返回值类型的要返回的数据;

void返回值为空,省略了return;

注意点:

定义了返回值则必须返回数据,且必须返回与返回值类型一样的数据类型的数据,否则会报错提示;
一个方法中可以有多个return语句;当碰到其中一个return语句时,就会结束该方法。(最后的代码中有验证)

方法名

main是方法名,如果是我们自定义的方法,就需要我们自定义的名字,但是起名最好能够见名知意,并且要符合标识符规则,方法取名一般为小驼峰命名(第一个单词首字母小写,其余单词首字母大写),如helloWorld、printString...

参数

String []args我们已经知道是什么了,即一个String类型的参数,在这里args是形式参数,目前是没有具体的值的。我们也可以定义自参数,参数的类型可以为基本数据类型,也可以为引用数据类型,可任意个个数,但是在调用方法的时候,必须按照参数的顺序将对应的参数传给方法。

以上我们已经分析了一个方法的框架,但是权限修饰符、状态修饰符、参数都不是一个方法必须有的,即都是可选的。

方法定义模板:
[权限修饰符][其它修饰符] 返回值 方法名([参数...]){
	方法体(具有一定功能的代码片段)
}

在此扩展方法的可变参数:

如果我们不确定参数的个数为多少个,必须在使用的时候才知道的话,这个时候我们就可以使用可变参数:

语法:

数据类型...变量名

!必须放在最后,且只能定义一次。(本质是一样的,因为只能放在最后,所以1个以上肯定有的不是在最后)

3.方法的使用

当我们了解完上述定义方法后,就可以尝试着定义使用方法了!

package com.dh.method;

public class Method02 {

    //1.
    //公有的 静态的 返回值类型为int 方法名为add 参数为两个int类型的数据
    public static int add(int num1,int num2){
        int c = num1 + num2;
        return c;
    }

    //!在此扩展:在方法中定义的变量叫局部变量,只在该方法中有效,所以不同方法中的局部变量是可以重名的

    //2.
    //受保护的 静态的 返回值类型为double 方法名为sub 参数为一个int,一个double类型的数据
    protected static double sub(double num1,int num2){
        //直接返回
        return num1-num2;
    }

    //3.
    //默认的 静态的 返回值类型为void 方法名为show 参数为一个String类型的数据
    static void show(String str){
        System.out.println(str);
        return;//可省略不写
    }

    //4.
    //私有的 静态的 返回值类型为boolean 方法名为flag 参数为一个boolean类型的数据
    private static boolean flag(boolean b){
        if(b == true){
            //b为true的话直接返回b,就不会继续向下执行了
            return b;
        }
        System.out.println(b);//只有b为false才会执行到这
        return false;//不仅可以返回变量、表达式、也可返回固定的数据
    }

    //5.
    //可变参数
    public static void variableParameters(String name,int age,char sex,double...x){
        System.out.println("可变参数");
    }

    public static void main(String[] args) {

        //方法必须在main中被调用了才会执行!!!并且执行顺序只与调用的顺序有关,与方法的位置无关

        //因为四个方法都为static,所以可以在main中直接调用
        //static方法中只能直接调用static方法

        //调用方式:方法名+参数(参数必须数据类型、顺序一一匹配)
        //有返回值的方法可以定义一个变量接收,并且可以输出
        int addResult = add(1, 2);      //此处的1,2为实参,即实际的参数。上述方法中定义的为形式参数(相当于一个坑,这里就是实际填入这个坑的东西)
        System.out.println(addResult);

        //也可以不接收就直接输出
        System.out.println(sub(4.5,4));

        //返回值为空的数据,不需要变量去接收,也不能放在输出语句中
        show("Hello,World!");

        flag(true);

        //以上方法的定义和使用,验证了四个权限修饰符都可以定义方法,并且在本类中都可以被调用

        System.out.println("===========================");
        //可变参数的验证
        variableParameters("可变参数1",18,'男',1.1,1.2);//两个参数
        variableParameters("可变参数2",18,'女',1.1,1.2,1.3,1.4);//四个参数
    }
}

分析运行结果:

add方法、show方法和sub方法都输出了正确的结果;在flag方法中,因为flag为true,所以直接判断返回了,没有输出false;可变参数的使用也是没有问题的。

posted @ 2021-01-18 08:46  deng-hui  阅读(1223)  评论(0编辑  收藏  举报