- 方法
- 方法的基本结构
- return关键字
- static关键字、修饰符
- 方法的命名规则
- 方法的设计原则
- 方法的重载
- 涉及基本类型的重载
- 可变参数
- 递归
- 递归有两个部分
- 递归函数实现阶乘计算
- Java中的方法其实和c的函数差不多,只是别称不同
- Java中的方法只能作为类的一部分来创建
- 代替繁琐重复的代码
.
.
.
方法的基本结构[修饰符][返回值类型] [方法名](参数列表){
//方法体
}
//例:
void my_print(String str){ //void表示空类型
System.out.println(str);
}
- 返回类型:描述在调用方法之后从方法返回的值
- 参数列表:指定要传给方法什么样的信息
- 修饰符:可选
.
.
return关键字int add(int a,intb){
c = a + b
return c;
}
return有两点作用
- 表示方法已做完,离开此方法,类似于break
- 如果方法产生了一个值,则这个值放在return后面,用于方法调用完毕后,返回一个值
.
.
static关键字、修饰符class StaticTest{
static int i = 47
}
StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();
- 上述中,st1.i和st2.i其实都是指向同一个存储空间 i=47
- 通过static,即便没有创建对象,也可以调用这个方法
- 通过static,表示这个方法或者域不和任何对象有关联
- 通过static,可以通过类名去调用该方法或者是域,所以使用类名去调用static是更好的选择
一个static字段对每个类来说都只有一份存储空间,非static对于每个对象来说都有一个独自的存储空间
.
方法的命名规则驼峰命名法
.
方法的设计原则最好保持方法的原子性,就是一个方法只完成1个功能,这样利于我们后期的扩展
.
.
方法的重载重载的方式是通过命名相同方法名的方法来实现重载
那系统怎么来区分这些相同方法名的方法呢?
- 每个重载都需要一个独一无二的参数类型列表
- 参数列表的顺序不同也算重载,但是并不建议这样做
基本类型能从一个“较小”的类型自动提升至一个“较大”的类型,此过程一旦牵扯重载,可能会造成一些混淆。
- 如果传入的数据类型(实际参数)小于方法中声明的形参的类型,实际参数就会被提升
void test(int a){
System.out.println("Type Int");
}
void test(long a){
System.out.println("Type Long");
}
char x = 'x';
tree.test(x);
//输出结果
//Type Int
- 如果传入的数据类型(实际参数)大于方法中声明的形参的类型,会报错
.
.
可变参数- 在方法声明中,在指定参数类型后加一个省略号(…)
- 一个方法中只能指定一个可变参数,并且参数顺序来说,它必须是最后一个定义
例:
int add(int b;int... c){
//方法体;
}
.
- 上述代码中,c是以数组的形式存在
例:可以使用下标取值
public class Test {
void add(int... numbsers){ //求最大值
if(numbsers.length == 0){
System.out.println("没有参数传入");
}
int result = numbsers[0];
for(int i:numbsers){
if(i > result){
result = i;
}
}
System.out.println(result);
}
public static void main(String[] args) {
Test test = new Test();
test.add(1,2,3,5,3,2,4);
}
}
//输出结果
//5
.
.
递归递归有两个部分A方法调用B方法,我们很容易理解
递归函数:A方法调用A方法,也就是我调用我自己
- 递归头:什么时候不调用自身。如果没有头,将陷入死循环
- 递归体:什么时候调用自身方法
public class Demo04 {
//阶乘
long factorial(long i){
if(i == 1){ //递归头
return i;
}
return i*factorial(i-1); //递归体
}
public static void main(String[] args) {
Demo04 demo04 = new Demo04();
System.out.println(demo04.factorial(10));
}
}
//输出10!



