Java的方法
方法
Java方法是语句的集合,他们一起执行一个功能。
- 方法是解决一类问题的步骤的有序组合
- 方法包含在类或对象中
- 方法在程序中被创建,在其他地方被引用
设计方法的原则:我们设计方法的时候,最好保持方法的原子性。就是一个方法只完成一个功能,这样利于我们后期的扩展。
方法包含了一个方法头和一个方法体,下面是一个方法的所有部分
-
修饰符:这里是可选的,告诉编译器如何调用该方法,定义了该方法的访问类型例如public static final等等
-
返回值类型:方法可能会返回值。returnValueType是方法返回值的数据类型。有些方法执行所需的操作,但没有返回值。在这种情况下,returnValueType是关键字void.(viod代表空的意思)
-
方法名:是方法的实际名称。方法名和参数表共同构成方法签名。(方法可以随便命名,但要遵守开头字母小写和驼峰原则)
-
参数类型:分为实参和形参
-
方法体:方法体包含具体的语句,定义该方法的功能。
修饰符 返回值类型 方法名(参数类型 参数名){//如果方法中有返回值类型的话,结尾一定要用return ··· 方法体 ··· return 返回值; }
举个return返回值的例子
package com.kuang.struct; public class Demo02 { public static void main(String[] args) {//main方法 int max = max(1, 10); System.out.println(max); } //比大小 public static int max(int num1, int num2) {//max方法 int result = 0; if (num1 == num2) { System.out.println("num1 == num2"); return 0;//终止方法 } if (num1 > num2) { result = num1; } else { result = num2; } return result; } }
方法调用
调用方法:对象名.方法名(实参列表)
当方法返回一个值的时候,方法调用通常被当做一个值。例如:
int large = max(30,40);
如果方法返回值是void,方法调用一定是一条语句。
System.out.println("Hello,kuangshen")
拓展
Java是值传递
方法重载
定义:重载就是在一个类中,有相同的函数名称,但形参不同的函数。
方法的重载的规则:
1.方法名称必须相同
2.参数列表必须不同(个数不同,或者类型不同,参数排列顺序不同等)
3.方法的返回类型可以不同也可以相同
4.仅仅返回类型的不同不足以方法的重载
举个例子
package com.kuang.struct; public class Demo02 { public static void main(String[] args) { double max = max(10, 20); System.out.println(max); } public static double max(double num1, double num2) {//......int max...... double result = 0;//或者int result=0; if (num1 == num2) { System.out.println("num1 == num2"); return 0;//终止方法 } if (num1 > num2) { result = num1;//或者写成result=(int)num1; } else { result = num2;//或者写成result=(int)num2; } return result; } //比大小 public static int max(int num1, int num2) { int result = 0; if (num1 == num2) { System.out.println("num1 == num2"); return 0;//终止方法 } if (num1 > num2) { result = num1; } else { result = num2; } return result; } }
运行结果
命令行传参
可变参数
1.JDK1.5开始,Java支持传递同类型的可变参数给一个方法
2.在方法声明中,在指定参数类型后加一个省略号(........)
3.一个方法中只能指定一个可变参数,它必须是最后一个参数,任何普通的参数必须在它之前声明。
public void test(int x,int.....i)
举个例子
package com.kuang.method;
public class Demo03 {
public static void main(String[] args) {
Demo03 demo03 = new Demo03();
demo03.test(1, 2, 3, 4, 45, 6);
}
public void test(int... i) {//这就比方法重载要简便很多
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(i[4]);
System.out.println(i[5]);
}
}
运行结果
递归
递归就是:A方法调用A方法,自己调用自己。
递归结构包括两个部分:
- 递归头:什么时候不调用自身方法。如果没有头,就将掉入死循环。
- 递归体:什么时候需要调用自身方法。
举例
package com.kuang.method;
public class Demo04 {
public static void main(String[] args) {
System.out.println(f(5));//5的阶乘
}
public static int f(int n) {
if (n == 1) {
return 1;
} else {
return n * f(n - 1);
}
}
}
运行结果
这是对上面代码的一个理解,其中f(1)就是递归的头,在没有到达1的时候它会不断地调用它自己。
注:Java是栈机制。
能不用递归就不用递归,用递归的前提是基数比较小的情况下,可以适用于一些小计算。
总结方法
方法的定义
-
修饰符
-
返回类型
-
break:(跳出switch,结束整个循环和return:表示方法结束)的区别
-
方法名:注意规范,使用驼峰命名以及见名知意原则
-
参数列表:(参数类型,参数名)或者可以用......来表示可变常参数
-
异常抛出:例如,数组下标越界: Arrayindexoutofbounds
package com.kuang.oop; //Demo01 类 public class Demo01 { //main 方法 public static void main(String[] args) { } /* 修饰符 返回值类型 方法名(.......){ //方法体 return 返回值; } */ //return 表示结束方法,返回一个结果! public String sayHello() { return "hello,world"; } public void hello() { return; } public int max(int a, int b) { return a > b ? a : b;//三元运算符! } }
方法的调用
-
静态方法
-
非静态方法
-
形参和实参
package com.kuang.oop; public class Demo03 { public static void main(String[] args) { //实际参数形式和形式参数的类型要对应! int add = Demo03.add(1, 2); System.out.println(add); } public static int add(int a, int b) { return a + b; } }
- 值传递和引用传递
package com.kuang.oop; //值传递 public class Demo04 { public static void main(String[] ages) { int a = 1; System.out.println(a); Demo04.change(a); System.out.println(a); } //返回值为空 public static void change(int a) { a = 10; } }
package com.kuang.oop; //引用传递:对象,本质还是值传递 public class Demo05 { public static void main(String[] args) { Perosn perosn = new Perosn(); System.out.println(perosn.name);//null Demo05.change(perosn); System.out.println(perosn.name);//秦疆 } public static void change(Perosn person) { //perosn是一个对象:指向的---->Person perosn = new Perosn();这是一个具体的人,可以改变属性。 person.name = "秦疆"; } } //定义了一个Perosn类,有一个属性:name class Perosn { String name; }
- this关键字
-