一、方法
方法:
- 是语句的集合,组成在一起执行一个功能。
- 包含于类或者对象中
- 在程序中被创建,在其他地方被调用
方法设计的原则:一个方法只完成一个功能【方法的原子性】,有利于后期扩展。
变量的命名规范;
- 所有的变量、方法、类名,见名知意
- 局部变量、类成员变量、方法名:首字母小写和驼峰原则:monthSalary,除了第一个单词意外所有的首字母都大写
- 常量:大写字母和下划线:MAX_VALUE
- 类名:首字母大写和驼峰原则:GoodMan
方法定义:只有把这个add方法用修饰符static定义成类方法才能在类中引用
1.方法定义
语法:
修饰符 返回值类型 方法名(参数类型 参数名){
方法体
```
return 返回值;
}
参数分类:
-
形参:相当于一个占位符
-
实参:实际调用时传递的参数
2.方法调用
- 当方法有返回值的时候,方法调用会被当做一个值来处理。
- 当方法没有返回值的时候,方法调用是一条语句
代码实例:
这里可以理解一下,在方法中碰到return之后方法就结束了,后面就不会执行了。
package com.javastudy.method;
public class Demo02 {
public static void main(String[] args) {
int c=max(1,1);
System.out.println(c);
}
//比大小
public static int max(int a,int b){
int result=0;
if (a==b){
System.out.println("a=b");
return 0;//return除了返回值,还可以终止方法,
// 程序在方法里面执行到return这一步就结束了,后面就不跑了。
}
if (a>b){
result=a;
}else {
result=b;
}
return result;
}
}
输出;
a=b
0
3.方法重载
方法重载;在一个类中,有相同的函数名称但是形参不同的函数。
方法重载的原则;
- 方法名必须相同
- 参数列表必须不同
- 方法返回值类型可以相同也可以不同
- 仅仅方法返回值类型不同不足以成为方法重载
方法重载后编译器会根据调用方法的参数个数,参数类型,逐个匹配对应的方法,如果匹配失败,编译器会报错。
4.命令行传参(了解)
package com.javastudy.method;
public class Demo03 {
public static void main(String[] args) {
//args.length是数组长度
for (int i = 0; i < args.length; i++) {
System.out.println("args["+i+"]:"+args[i]);
}
}
}
-
打开程序所在文件
-
在文件夹下打开命令行,用javac去编译文件
如图所示,出现了一个错误,最后查找资料加上红框内的代码编译成功
- 编译出class文件后去执行,编译的时候不需要加包名,但是执行的时候一定要把包名写上
5.可变参数
JDK1.5以后引入的,当你不知道要传几个参数时,就定义一个可变长的参数。
-
定义方法:在方法声明中,指定参数类型后加个省略号
-
注意:一个方法中只能指定一个可变长的参数,并且这个可变长参数必须是方法的最后一个参数,任何普通参数必须在他之前声明。
package com.javastudy.method;
public class Demo04 {
public static void main(String[] args) {
Demo04 demo04=new Demo04();
demo04.test(1,2,3);//这里具体传值个数是可变的
}
public void test(int... i){//这地方去声明一个可变长参数
for (int j=0;j<i.length;j++){
System.out.println(i[j]);
}
}
}
输出:
1
2
3
再来看一个例子去理解一下这个可变长参数
package com.javastudy.method;
public class Demo04 {
public static void main(String[] args) {
//调用可变参数的方法
printMax(24,52,6,4,8,6,32,44,59);//这个地方我传多少个参数都可以
printMax(new double[]{1,2,3});//这里是传了一个数组
}
public static void printMax(double...numbers){
if (numbers.length==0){
System.out.println("没有数据输入");
return;
}
double result=numbers[0];
//排序
for (int i=1;i<numbers.length;i++){
if (numbers[i]>result){
result=numbers[i];
}
}
System.out.println("最大值是"+result);
}
}
输出:
最大值是59.0
最大值是3.0
二、递归
递归:A方法自己调用自己
递归结构包括两个部分:
- 递归头:什么时候不调用自身方法,如果没有就会陷入死循环。
- 递归体:什么时候需要调用自身方法。
代码实例:
package com.javastudy.method;
import java.util.Scanner;
public class Demo05 {
//计算阶乘
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入数字:");
int number=scanner.nextInt();
System.out.println(f(number));
scanner.close();
}
//5! 5*f(4)
//f(4)=4*f(3)
//f(3)=3*f(2)
//f(2)=2*f(1)
public static int f(int n){
if (n==1){
return 1;
}else {
return n*f(n-1);
}
}
}
请输入数字:
5
120
以5!为例,递归原理:
缺点:如果递归层次比较大,会导致栈溢出,能不用递归就不用递归。