1、简介
- 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。
- 方法的声明
- 方法名的命名规则除了和变量(戳这里温习)的命名规则一致之外,若方法名由一个单词组成,则用小写即可,若由多个单词组成则需满足小骆驼命名法(即首个单词小写后面的单词首字母大写)。
访问修饰符 返回类型 方法名 (参数列表) {
//方法体
}
2、方法类型
方法分类:根据方法是否带参数,是否有返回值,可以分为4类:
- 1.无参无返回值方法
public void noArgsNoReturn() { //方法体 }
- 2.无参带返回值方法
public int noArgsWithReturn() { int x=5,y=6; return x*y; }
- 3.带参无返回值方法
public void withArgsNoReturn(int a,int b) { //方法体 }
- 4.带参带返回值方法
public int withArgsWithReturn(int a, int b) { return a * b; }
- 5.在主方法中使用这些方法(仅作为演示,运行略)
public static void main(String[] args) { MethodDemo mMethodDemo = new MethodDemo(); mMethodDemo.noArgsNoReturn(); int c = mMethodDemo.noArgsWithReturn(); mMethodDemo.withArgsNoReturn(5, 6); int d = mMethodDemo.withArgsWithReturn(10, 20); }
3、数组作为方法参数
- 1.定义一个方法,打印输出数组元素的值。代码如下:
public class ArrayAsMethodArgs {
public static void main(String[] args) {
int[] arr = { 10, 20, 30, 40, 50 };
ArrayAsMethodArgs arrayAsMethodArgs = new ArrayAsMethodArgs();
arrayAsMethodArgs.printArray(arr);
}
public void printArray(int[] arr) {
for (int i : arr) {
System.out.print(i + " ");
}
}
}
- 2.运行结果如下所示。
- 3.再来演示一个例子:查找数组元素的值,则传入方法的参数分别为数组和要查找的元素,修改上面的代码。
public class ArrayAsMethodArgs {
public static void main(String[] args) {
int[] arr = { 10, 20, 30, 40, 50 };
System.out.println("请输入一个整数:");
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
ArrayAsMethodArgs arrayAsMethodArgs = new ArrayAsMethodArgs();
boolean b = arrayAsMethodArgs.printArray(arr, n);
if (b == true) {
System.out.println("找到了!");
} else {
System.out.println("没找到!");
}
scanner.close();
}
public boolean printArray(int[] arr, int a) {
boolean flag = false;
for (int i : arr) {
if (i == a) {
flag = true;
break;
}
}
return flag;
}
}
- 4.运行结果如下。
4、方法重载
- 所谓方法重载即方法名相同,参数列表不同,如下代码所示:
public class MethodReload {
public static void main(String[] args) {
MethodReload mReload=new MethodReload();
mReload.name();
mReload.name("");
mReload.name(1.0, 2);
mReload.name(1000,1000);
}
public void name(int a, int b) {
}
public void name(double a,int b) {
}
public void name() {
}
public void name(String s) {
}
}
5、方法传值
- 1.看下列一个演示,交换两个变量的值,代码如下。
public class ExchangeDemo {
public static void main(String[] args) {
int m = 4, n = 5;
System.out.println("交换前:m=" + m + ",n=" + n);
ExchangeDemo.swap(m, n);
System.out.println("交换后:m=" + m + ",n=" + n);
}
// 这里定义一个静态方法,则在主方法中可以直接使用[类.方法]名而不用实例化对象
public static void swap(int a, int b) {
int temp;
System.out.println("交换前:a=" + a + ",b=" + b);
temp = a;
a = b;
b = temp;
System.out.println("交换后:a=" + a + ",b=" + b);
}
}
- 2.运行结果如下。
- 3.结果分析:从上面的结果可以看出,m和n的值并没有交换。这是由于在主方法当中定义m,n值的时候,是在内存中分别为m和n开辟了空间,把4的值存放到m当中,把5的值存放到n当中,当进行方法调用的时候,把m,n的值传给了变量a,b,这时候只是把4和5两个值传过去了,并没有把变量的地址传过去,而传过去值之后,a和b发生了交换,因此a和b进行了互换,而m和n的值不变。关于详细解释请看这篇博客:理解Java中的引用传递和值传递,请参考博客自行尝试传递其他类型数据。
- 4.补充:在方法中通过对象作为参数,传递的是它的引用,可以通过引用获取该对象的所有信息。
6、可变参数列表
6.1、可变参数列表
- 1.可变参数列表的形式为以下方法
sum
中的参数形式。
public class VariableArgsList {
public static void main(String[] args) {
VariableArgsList.sum(1);
VariableArgsList.sum(1, 2, 3);
VariableArgsList.sum(1, 2, 3, 4);
}
public static void sum(int... n) {
int sum = 0;
for (int i : n) {
sum += i;
}
System.out.println("sum=" + sum);
}
}
- 2.运行结果如下。
注意:
- 若方法的参数既有其他类型的参数,也有可变参数列表,一定要将可变参数列表放置在最后一个参数的位置。例如
public static void sum(int a, int b, int... n) {}
- 可以将数组传递给可变参数列表的,但是不能将可变参数列表(即多个值)传递给数组(数组作为参数时)。
- 一个方法中的参数只允许有一个可变参数列表。
6.2、可变参数列表作为方法参数的重载问题
- 1.编写代码如下,看看会优先调用哪个方法?
public class VariableArgsList {
public static void main(String[] args) {
VariableArgsList val = new VariableArgsList();
System.out.println("和为:" + val.plus(1, 2));
}
public int plus(int a, int b) {
System.out.println("不带可变参数列表的方法被调用!");
return a + b;
}
public int plus(int... n) {
int sum = 0;
for (int i : n) {
sum += i;
}
System.out.println("带可变参数列表的方法被调用!");
return sum;
}
}
- 2.运行代码发现,不带可变参数列表的方法被调用了。这里我们要知道,带可变参数列表的方法是最后被访问的。
7、文档注释
- 之所以叫文档注释,是因为这个注释如果通过命令去执行的话,可以将注释当中的内容提取出来,生成程序的帮助文档(记住在编写完成代码后保存一下代码内容,以便按预期生成文档内容)。
- 1.编写文档注释如下图所示。
- 2.生成帮助文档则需要借助cmd(使用快捷键:Windows+X可快速找到)来生成帮助文档。
所用命令:
cd /d 文件路径
手写命令式,路径要用反斜杠,也可直接复制文件所在路径javadoc -d doc 类名
后面一定要带上.java