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;可变参数的使用也是没有问题的。