006. Java方法
Java方法
一. 方法简介
1. 何谓方法?
Java方法是语句的集合, 它们在一起执行一个功能.
- 方法是解决一类问题的步骤的有序集合
- 方法包含于类或对象中
- 方法在程序中被创建, 在其他地方被引用
2. 设计方法的原则
原子性: 一个方法只完成一个功能, 这样有利于后期的拓展.
3. 方法举例
public class Demo01 {
public static void main(String[] args) {
int sum = add(1,2);
System.out.println(sum);
System.out.println("===========================");
test(101,150);
}
//加法
public static int add(int a, int b){
return ((a)+(b));
}
//输出介于a到b的质数
public static void test(int a, int b){
outer:
for(int i = a; i <= b; i++){
for(int j = 2; j <= (i)/2; j++){
if(i%j == 0){
continue outer;
}
}
System.out.println(i);
}
}
}
输出:
3
===========================
101
103
107
109
113
127
131
137
139
149
4. 方法的定义
方法包含一个方法头和一个方法体, 其组成部分为:
- 修饰符: 可选, 定义该方法的访问类型, 告诉编译器如何调用该方法
- 返回值类型: 方法可能会返回值, returnValueType就是方法返回值的类型. 而有的方法不会返回值, 这时返回值类型为
void
- 方法名: 方法的实际名称. 方法名和参数共同构成方法签名
- 参数类型: 参数像是一个占位符, 当方法被调用时, 传递值给参数, 这个值称为实参或变量.
参数列表是指方法的参数类型, 顺序和个数. 参数是可选的, 方法可以不包含任何参数.- 形参: 在方法被调用时用于接收外界输入的数据
- 实参: 调用方法时实际传给方法的数据
- 方法体: 包含具体的语句, 定义该方法的功能
修饰符 返回值类型 方法名(参数列表){
方法体
return 返回值;
}
5. 方法调用
调用格式: 对象名.方法名(实参列表)
当方法返回值为void
, 方法调用一定为一条语句; 当方法有返回值时, 返回值常常作为一个值来使用, 可以出现在等号右边.
Java都是值传递!
二. 方法重载
1. 重载
重载就是在一个类中, 有相同名称, 但不同形参的方法.
在调用方法时, 编译器会根据调用方法的参数个数, 参数类型去逐个匹配以选择回应的方法, 如果匹配失败则报错.
2. 方法重载的规则
- 方法名必须相同
- 参数列表必须不同(个数or类型)
- 返回类型可以相同也可以不同, 但仅仅返回类型不同不足以成为方法的重载!
三. 命令行传参
有时候我们希望运行一个程序的时候再传递给它消息, 这要靠传递命令行参数给main()方法实现(并不常用).
在命令行中要找到包的路径再去加载!
四. 可变参数
从JDK1.5开始, Java开始支持传递同类型的可变参数(不定项参数)给一个方法, 在方法声明中, 在指定参数类型后加一个省略号(...
). 一个方法中只能指定一个可变参数, 它必须是方法的最后一个参数, 任何普通参数必须在它之前声明.
public class Demo04 {
public static void main(String[] args) {
Demo04 demo04 = new Demo04();
demo04.test(1,2,3,4);
}
//逆序输出
public static void test(int... i){
for(int j = i.length; j > 0; j--) {
System.out.println(i[j-1]);
}
}
}
输出:
4
3
2
1
五. 递归
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
--引自 百度百科
递归结构包括两部分:
- 递归头: 规定什么时候不调用自身方法, 如果没有头, 将会陷入死循环.
- 递归体: 规定什么时候需要调用自身方法.
public class Demo05 {
public static void main(String[] args) {
System.out.println(f(8));
}
//计算阶乘
public static int f(int n){
if(n<0){return -1;}
else if(n==0||n==1){return 1;}
return n*f(n-1);
}
}
输出:
40320
递归深度很大时, 不推荐使用!
高山仰止, 景行行止; 虽不能至, 心向往之.