学习笔记--Java方法中的注意事项

Java方法中的注意事项

方法调用

Java的方法在同一个类中调用,可以省略 类名.

/*
    方法调用
*/
public class MethodTest03{

    public static void main(String[] args){

        // 调用方法
        MethodTest03.m();

        // 对于方法的修饰符列表当中有static关键字: “类名.”可以省略
        m();

        // 调用其他类【不是本类中的】方法
        A.doOther();

        // 测试省略
        // doOther();   编译报错
    }

    public static void m(){
        System.out.println("m method execute !")
        m2();   // 在本类中,编译通过
    }

    public static void m2(){
        System.out.println("m2 method execute !")
    }
}

class A{

    public static void doOther(){
        System.out.println("A's doOther method invoke !")
        // m2();    报错 m2()方法 不在 类A 中不能直接调用
    }
}

方法程序执行

  • 方法中的代码是自上而下的顺序执行即可
  • 当前程序没有结束,下一行代码是无法执行

示例:

public class MethodTest04{

    public static void main(String[] args){

        System.out.println("main begin");
        m1();   // main暂定等待m1执行完毕,进入m1
        System.out.println("main over");
    }

    public static void m1(){
        System.out.println("m1 begin");
        m2();   // m1暂定m2执行完毕,进入m2
        System.out.println("m1 over");
    }

    public static void m2(){
        System.out.println("m2 begin");
        System.out.println("m2 over");
    }
}
/* 
    结果分析:
        main begin
        m1 begin
        m2 begin
        m2 over
        m1 over
        main over

    main方法最先调用,main方法也是最后结束
    最后调用的是m2方法,该方法最先结束
*/

浅谈return语句

  • 带有return关键字的java语句只要执行,那么所在方法结束
  • 在“同一作用域”当中,return语句下面不能编写的任何代码
public class MethodTest05{

    public static void main(String[] args){

        // hi;  报错,方法带括号
        hi();
        n();
    }

    /* 
    public static int m(int a){

        if (a > 10){
            return 1;
        }
    } 
    编译器报错:缺少返回语句,
    程序无法保证 "return 1;" 百分之百会执行
    */
    public static int m(){

        int a = 10;
        if (a > 10){
            return 1;   // 作用域 if
        }else{
            return 0;   // 作用域 else
        }
    }

    public static int n(){

        int a = 10;
        if (a > 10){
            return 1;   // 作用域 if
            // System.out.println("Hello"); 报错
        }
        System.out.println("Hello");    // 通过
        return 0;   // 通过

    }

    public static void hi(){
        System.out.println("Hi")
    }
}
  • 返回值类型中是void的方法当中使用 return ;
public class MethodTest05{

    public static void main(String[] args){

        m();
    }

    public static void m(){

        for(int i = 0; i < 10; i++){
            if(i == 5){
                return ;    // 不是终止for循环,是终止 m() 方法
                // 区别 break; 是终止for循环
            }
            System.out.println("i --> " + i);
        }

        System.out.println("Hello World!");
    }
}

Java在JVM(Java虚拟机)中内存分配

  • 方法只是定义,不调用,是不会执行的;JVM 中也不会给该方法分配“运行所属”的内存空间

  • 在JVM内存划分有三块主要的内存空间(除此之外还有):

    • 方法区内存
    • 堆内存
    • 栈内存
  • 关于栈数据结构:

    • 栈:stack,是一种数据结构
    • 数据结构反应是数据的存储形态
    • 数据结构是独立的学科,不属于任何编程语言的范畴
    • 作为程序员需要提前精通:数据结构 + 算法【计算机专业必修】
    • 常见数据结构:
      • 数组

      • 队列

      • 二叉树

      • 哈希表

        . . . . . .

  • 关于【栈/Stack】

    基础成分:栈顶元素,栈底元素,栈帧

    • 栈帧永远指向栈顶元素
    • 栈顶元素处于活跃状态,其它元素静止
    • 术语:
      • 压栈/入栈/push
      • 弹栈/出栈/pop
    • 栈数据结构存储数据的特点是;
      • 先入后出
      • 后入先出
  • 方法代码片段存在哪里?方法执行的时候执行过程的内存在哪里分配

    • 方法代码片段属于.calss字节码文件的一部分,字节码文件在类加载的时候,将其存放在方法区当中。所以JVM中的三块主要内存空间中方法区内存最先有数据。存放了代码片段。
    • 代码片段虽然在方法区内存当中只有一份,但是可以被重复调用。每一次调用这个方法的时候,需要给该方法分配独立的活动场所,在栈内存中分配。【栈内存中分配方法运行的所属内存空间】

    描述:方法在调用的瞬间,会给该方法分配内存空间,会在栈中会发生压栈动作,方法执行结束之后,给该方法分配的内存空间全部释放,此时发生弹栈动作

    • 压栈:给方法分配内存
    • 弹栈:释放该方法的内存空间
  • 局部变量在方法体在声明,局部变量在运行阶段内存在栈中分配

    可以解释为什么局部变量生命周期最短,出了大括号就无法使用,因为方法结束后,进行弹栈释放该方法的内存空间,局部变量同样随方法一同释放

    结合回顾前面方法程序执行示例



Java方法


合集总目录:学习笔记--Java合集



posted @ 2022-01-30 16:32  sha0dow  阅读(59)  评论(0编辑  收藏  举报