JAVA方法

方法的概念及使用

方法(method)?

方法就是一个代码片段. 类似于 C 语言中的 "函数"。(c++的方法)

方法的定义

//方法的定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
    方法体代码;
    [return 返回值];
}

示例:判定闰年

public class Method{
    //方法定义
    public static boolean isLeapYear(int year){
        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
            return true;        
        }else{
            return false;        
        }
    }
}

【注意事项】

1. 修饰符:现阶段直接使用public static 固定搭配

2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void

3. 方法名字:采用小驼峰命名

4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开

5. 方法体:方法内部要执行的语句

6. 在java当中,方法必须写在类当中

7. 在java当中,方法不能嵌套定义

8. 在java当中,没有方法声明一说

方法调用的执行过程

调用方法 -> 传递参数 -> 找到方法地址 -> 执行被调用的方法体 -> 被调用方法结束返回 -> 回到主调方法继续往下执行

【注意实项】

        1.定义方法的时候,不会执行方法的而代码。只有调用的时候才会执行

        2.一个方法可以被多次调用

实参和形参的关系

概念:同C语言

形参:传值调用(不修改传入参数)两个实体

实参:传引用类型参数(修改传入参数)

方法重载

条件

1.方法名称相同

2.参数列表不同(参数类型,参数个数,次序不同)

3.返回值不同不影响

4.编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法

//注意:两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的
public class Method{
    public static void main(String []args){
        int a=20;
        int b=10;
        int ret=add(a,b);
        System.out.println("ret = "+ ret);                        
    }
    public static int add(int a,int b){
        return a+b;    
    }
    public static double add(double a,double b){
        return a+b;    
    }
    
//编译出错
Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int)
public static double add(int x, int y) {
                     ^
1 个错误
}

方法签名(了解,帮助理解重载)

在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那为什么类中就可 以定义方法名相同的方法呢?

方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。

public class TestMethod{
    public static int add(int x,int y){
        return x+y;    
    }
    public static double add(double x,double y){
        return x+y;    
    }
    public static void main(String []args){
        add(1,2);
        add(1.2,3.3);    
    }
}

上述代码经过编译之后,然后使用JDK自带的javap反汇编工具查看,具体操作:

1. 先对工程进行编译生成.class字节码文件

2. 在控制台中进入到要查看的.class所在的目录

3. 输入:javap -v 字节码文件名字即可

方法签名中的一些特殊符号说明:

特殊字符

数据类型

V

void

Z

boolean

B

byte

C

char

S

short

I

int

J

long

F

float

D

double

[

数组(以[开头,配合其他的特殊字符,表述对应数据类型的数组,几个[表述几维数组)

L

引用类型,以L开头,以;结尾,中间是引用类型的全类名

递归与迭代

同C语言相同

示例1:汉诺塔问题

目的:使用递归打印1个n层的汉诺塔从A柱到C柱的所有步骤

原理:封装1个函数Hanio(num, ‘A’, ‘B’, ‘C’)。

其中num是塔数;A、B、C,3个字符为抽象成的3个柱子。

如果只有1层那么输出A;

否则就有2种情况,其1是将n-1个碟子从A经C到B。其2是将n-1个碟子从B经A到C

塔数

步骤

1

A->C

2

A->B、A->C、B->C

3

A->C、A->B、C->B、A->C、B->A、B->C、A->C

4

A->B,A->C,B->C,A->B,C->A,C->B,A->B,A->C,B->C,B->A,C->A,B->C,A->B,A->C,B->C

A->B

A->C

    //汉诺塔问题--2^n-1(移动次数)
    //将n-1个盘子经过C挪到B
    //将第n个盘子挪到C
    //将n-1个盘子经过A挪到C
    public static void hanio(int n,char A,char B,char C){
        if (1 == n)
            System.out.println(A+"->"+C);
        else
        {
            hanio(n-1, A, C, B);
            System.out.println(A+"->"+C);
            hanio(n-1, B, A, C);
        }
    }

示例2:青蛙跳台阶

一只青蛙可以一次跳 1 级台阶或一次跳 2 级台阶

,例如:跳上第一级台阶只有一种跳法:直接跳 1 级即可。跳上两级台阶,有两种跳法: 每次跳 1 级,跳两次; 或者一次跳 2 级.

问要跳上第 n 级台阶有多少种跳法?

首先跳到 n 级台阶可以分解为两种情况:

1.之前跳到 n-1 级台阶,然后再跳 1 级到达 n 级;2.之前跳到 n-2 级台阶,然后再跳 2 级到达 n 级;

因此 n 级跳法数量,等于这两种情况之和。

即 F(n) = F(n-1) + F(n-2)

同理可继续推导:

F(n-1) = F(n-2) + F(n-3)

F(n-2) = F(n-3) + F(n-4)

...

F(2) = F(1) + F(0)

F(1) = 1

F(0) = 1

可见这是斐波那契数列,数列中从第三个数开始,每个数都是前两个数之和。那么只需从 F(0) + F(1) = F(2) 开始计算,一直加到 F(n) 即可得出结果。

变态跳台阶同理

public static int frogJump(int n){
    if(n==1)
        return 1;
    if(n==2)
        return 2;
    return frogJump(n-1)+frogJump(n-2);
}

最难不过坚持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值