【无标题】

1.方法

  1.1概述和使用

方法:一堆代码的集合,创建空间存储,并设置名字,可以通过名字找到

目的:代码复用、易维护、易扩展、更灵活

1.2方法声明

方法声明:修饰符列表,返回值类型,方法名(参数列表){方法体}

修饰符列表:可以有,可以没有,可以有多个,虽然可以有多个,但是有些是不能同时出现的,多个修饰符没有先后顺序

        权限控制相关,四选一:public,private;protected,(默认包权限)四选一

        stailc表示静态,不加则为成员

        synchronized,final,abstract...但是finai和abstract 不能同时出现

返回值类型:执行完之后是否要将结果反馈给调用处,可以写11种数据类型中任意一种如果不需要返回值则写void

         如果指定了返回值,则方法体内必须 有return语句

return:1终止方法运行,2将数据返回到调用处

        比如返回值类型为int类型,那么,方法体中必须有return int 值;也可以是char类型,char可以自动类型转换成int类型

         如果是void,则不需要有return,就算要写return,那么此时只能终止方法运行,不能返回数据return.

方法名:符合命名规则即可

参数列表:可以有多个,也可以没有,多用逗号隔开

1.3方法分类

方法分类:

静态方法:使用static修饰的方法就是静态方法

成员方法:没有使用static修饰的就是成员方法

构造方法:~~~~~~

1.4方法调用

方法调用

   方法不调用不执行,调用才执行,并把结果返回到调用处

   前缀.方法名(参数)

静态方法:类名.方法名(参数),如果调用当前类中的静态方法,类名可以省略

成员方法:对象.方法名(参数)

1.5入参出参

入参:参数列表(变量),一般让你做一件事的时候,你需要用到必要的未知条件\未知数据{位置条件就是参数列表(String[] argge)},要做什么事情,他的核心未知数就是入参

   参数是调用处传递的

出参:返回值,完成功能后   ,你的打印语句  ,一般是需要返回的数据

1.6方法重载

方法的唯一性:Java中 方法可以重名

       方法重载:方法名相同,参数列表不同

                      个数不同或类型不同

目的:使用方便,相同功能,相同方法名,方便记忆

    

2.内存分析

 java在运行时 进行的内存划分

 静态区/方法区 : 保存静态资源文件,比如静态变量,方法,运行时的class文件等 

  VM栈 : 以栈数据结构为模型,创建的一块空间,主要用于执行方法

             栈数据结构特征 : 先进后出

                 栈顶元素 : 最后放进去的

                 栈底元素 : 第一个放进去的

                 栈帧 : 栈数据结构中的元素,称为栈帧

             压栈 : 把栈帧放到栈空间的过程

             弹栈 : 把栈帧在栈空间弹出去的过程

         每当调用一个方法的时候,该方法就会在栈内存中开辟一个栈帧,并压栈到栈空间,开始执行,方法执行完后,弹栈,栈帧销毁

  堆内存 : 保存类对象和成员变量及成员方法

  1 编码 , 程序员通过java语言,编写java程序

  2 编译 , 把java文件编译成class文件

  3 运行 , 运行时 JVM开机,将所运行的类载入内存空间中的静态区

          3.1 加载完成后,JVM会自动调用该类的main方法(只要是方法调用,就会在栈内存中开辟栈帧并压栈)

          3.2 如果main方法中,有别的方法调用

              3.2.1 如果调用的是其他类中的方法,则先把对应类加载到静态区,然后再栈内存中开辟栈帧

              3.2.2 如果调用的是当前类中的方法,则直接在栈内存开辟栈帧

         3.3 如果被调用的方法中,还有其他方法调用,则继续开辟栈帧压栈,一直到栈顶元素,执行完成,弹栈,返回上一个栈帧继续执行

         3.4 直到main栈帧弹栈,则整个程序生命周期终止

    public static void main(String[] args) {

        m1();

        System.out.println("main执行了");

    }

    public static void m1() {

        m2();

        System.out.println("m1执行了");

    }

    public static void m2() {

        m3();

        System.out.println("m2执行了");

    }

    public static void m3() {

        System.out.println("m3执行了");

    }

3.递归

3.1概述和基本应用

递归和迭代(循环)是等价的 

  循环可以做的,递归也能做,但是递归能做的,循环不一定能做 

  递归需要频繁压栈弹栈,比较消耗内存,并且效率较低,所以循环能完成的,就不要使用递归 

  比如 树状结构,目录遍历等 都需要使用递归完成 

  递归 : 

          直接递归 : 方法中调用当前方法(自己调用自己)

          间接递归 : 两个方法相互调用

    public static void main(String[] args) {

        m1();

    }

    // 直接递归

    public static void m1(){

        // 注意 递归 也有符合 循环三要素

        // 初始值,终止条件,步长,否则会死循环

        // Exception in thread "main" java.lang.StackOverflowError

        // 因为一直压栈,不会弹栈,导致栈内存移出

        m1();

    }

    // 间接递归

    public static void m2(){

        m3();

    }

    public static void m3(){

        m2();

    }

    public static int m1(int m) {

        if (m == 1) {

            return 1;

        }

        return m + m1(m - 1);

    }

3.2斐波那契额数列

斐波那契数列 : 

         前两位为1, 后面每位的值都等于前两位的和

  1 1 2 3 5 8 13 21 34 55 89 

    public static void main(String[] args) {

        int result = test(21);

        System.out.println(result);

    }

    // 计算 第N位的值 是多少

    public static int test(int n) {

        if (n == 1 || n == 2) {

            return 1;

        }

        return test(n - 1) + test(n - 2);

    }

    public static void test2(int n){

        // 默认表示第一位(还表示当前位的前两位)

        long a = 1;

        // 默认表示第二位(还表示当前位的前一位)

        long b = 1;

        long c = 1;// 表示当前位

        if (n == 1 || n == 2) {

            System.out.println(1);

            return;

        }

        for (int i = 3; i <= n; i++) {

            c = a+b;

            a = b;

            b = c;

        }

        System.out.println(c);

    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值