JAVA方法笔记

目录

一.方法

1.方法的定义

2.方法的调用

3.方法重载(overload)

4.方法的递归

一.方法

1.方法的定义

每个方法都表示一种行为或者能力。方法类似于c语言的函数,为了提高代码的可利用性,将每个功能模块抽象成为一种方法。

例如:

//计算1!+ 2! + 3! + 4! + 5!

int sum = 0;
for(int i = 1;i < 5; i++){
    int temp = 0;
    for(int j = 0;j < i;j++){
        temp *= j;
    }
    sum += temp;
 }
System.out.println(sum);  

像如上这个例子,可以将求阶乘和加法封装为一种方法,在使用的过程中只需要调用该方法就可以解决。

  在JAVA里如何定义一个方法呢?请看下面这个例子:

public static int add(int a, int b){
     return a + b;
}

不难看出,首先需要确定该方法的访问权限 public ,意味着可以被任何类来使用,其次static说明了该方法为全局的,然后加上方法的返回类型和形式参数。一堆中括号包含了方法的内容。

方法一旦定义,就必须写他的实现。方法的定义位置可以任意放置,这一点是和C语言有所不同。

2.方法的调用

   方法的调用跟c语言函数调用类似,也就是方法名加参数的方法来调用。

int a = 10;
int b = 20;
int sum = add(a,b);
System.out.println(sum);

需要注意的是,对方法进行传参的时候发生形参实例化,只是形参实例化对实参的一份拷贝,并不直接拿取实际参数的值。

如果一个函数没有返回值,那么需要用void来定义返回值类型,在方法中也可以用return来返回,不执行return下面的代码直接返回。

方法可以在任意位置被调用。

3.方法重载(overload)

在同一个类中,如果想要调用一种功能,但是由于参数的类型或者参数的个数不同,可能需要不同的方法,这样效率就大大降低,有没有一个办法可以将他们按照类型或者个数区分开呢?这里引进一个方法重载的概念。

·定义:在同一个类中,定义了若干方法名称相同,参数列表不同(参数类型或者参数个数),与返回值无关,这样的一组方法称为重载方法。举例如下:

public static double add(double a,double b){
    return a + b;
}

 public static int  add(int a,int b){
    return a + b;
}


public static double add(double a,double b,double c){
    return a + b + c;
}


public static int  add(int a,int b,int c){
    return a + b c;
}

这样,在调用时就只用调用add,传入想要传入的参数,会自动根据类型或者个数进行调用。

在JAVA中println就是采用方法重载的方法可以接受所有类型的参数。

4.方法的递归

·定义:一个方法在执行的过程调用自身,就称为递归。

递归的三要素:

     ·一个大问题可以拆分成多个子问题

     ·拆分后子问题和原问题除了数据规模不相同,他们的解决思路完全相同

     ·需要存在递归出口

例如求一个数num的阶乘:

num!= num * num-2 * num-3 *······*1

拆分为 num * fac(num -1)

终止条件 num == 1

如何写递归?

  写递归一定需要注意方法的予以,不要纠结这个递归过程如何实现,不要思考定义(调用自身),考虑调用某种写好的方法。

public class Recursion{
 public static void main (String []args){
             System.out.println(fac(5);
   }

//递归求阶乘
public static int fac(int num){
  //终止条件
   if(num == 1)
    return 1;
  //拆分问题
  //当前已知的时num,不知道num-1!
  //num - 1 的问题交给fac(num - 1)
  //拼接答案
  return num * fac(num - 1);
  }
}

在上图的代码中,运行的过程如下:

   递归的基本过程如图所示,不停的入栈,最后到达递归出口时不停的出栈,把每一层的返回值调用出来,就形成递归的基本结构。不难看出,使用递归需要开辟大量的栈空间,会耗费大量的内存资源,因此递归方法存在此缺陷。

递归是数据结构与算法的基础,包括链表的天然递归,二叉树等等。

有关递归的一些名词:

回溯法:基于递归

动态规划:解决递归问题

递归的例题如下:

1.定义一个方法,返回这个方法各个位数之和

解:   ·首先拆分成求个位的数和除以10后的数的和

          ·其次求除以10的和就是求该数和继续除以10的和

          ·递归出口是该数小于9

代码实现:

    public static int sum(int num)
    {
        if(num < 9)
            return num;

        return  num % 10 + sum(num/ 10);
    }

2.定义一个方法,按从最高位到最低位打印

解:   ·首先拆分:,,首先找到最高位,打印每一位打印最高位和剩余的位数

           ·其次解决问题思路:和打印最高位相同

           ·递归出口:该数小于9

  public static void printNum(int a)
    {
        if(a > 9)
            printNum(a / 10);

        System.out.print(a % 10 + " ");
    }
}

3.实现斐波那契数

( n = 1,1

    n = 2 ,1

    n = 3 ,   2= n1 + n2

    n = 4 ,   3= n2 + n3

    n = n-2  + n-1

解:

 public static int fibonacci(int num)
    {
        if( num == 1 || num ==2)
            return 1;
        return fibonacci( num - 1) + fibonacci( num - 2);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值