【Java基础篇】第七章 方法

⭐⭐⭐Java基础篇目录⭐⭐⭐


第一章 Java开发环境搭建
第二章 标识符与关键字
第三章 变量
第四章 数据类型
第五章 运算符
第六章 控制语句
第七章 方法
第八章 认识面向对象
第九章 对象的创建和使用
第十章 封装
第十一章 this和static
第十二章 继承
第十三章 方法的覆盖和多态
第十四章 super


文章目录

  • 1、方法
  • 2、方法的定义
  • 3、方法的调用
  • 4、return和break的对比
  • 5、JVM的内存结构&方法执行时内存的变化
  • 6、方法的重载
  • 7、代码的封装
  • 8、方法的递归

1、方法

Java中的方法即C中的函数,定义一个方法,下次使用该功能时直接调用该方法,提高了代码的复用性。

【Java基础篇】第七章 方法_第1张图片

public class Function {
    public static void main(String[] args) {
        sum(100,200);
        sum(200,300);

    }
    public static void sum(int x,int y){
        int s=x+y;
        System.out.println(x+"+"+y+"="+s);
    }


}
小总结
-----------------
- 程序开始执行的时候先执行main方法,main方法是程序的入口
- main方法是JVM去调用的,不用我们去手动调
- 方法定义在类体中,方法定义的先后顺序无所谓

2、方法的定义

Java方法定义的格式:

[修饰符列表] 返回值类型 方法名(形式参数列表){
	方法体;
}

【Java基础篇】第七章 方法_第2张图片
【Java基础篇】第七章 方法_第3张图片

小总结

  • 返回值类型不是void,则方法体执行结束时必有return x;语句,且遇到return x;语句,当前方法的执行也必然结束。
  • 返回值类型是void,则方法体语句中没有return x;但可以有return;来终结方法的执行。
  • 形参列表中的变量都是局部变量,方法执行结束之后,其对应的内存释放。
  • 方法体中就是实现逻辑业务和需求的代码。

3、方法的调用

调用(此处暂不涉及对象的概念

类名.方法名(实参列表);

调用的方法若有返回值,则要用变量去接收,变量的类型看方法返回值的类型,也可不接收,也可直接println(sum(100,200));调用的方法若是void类型,这时接收就出错。

【Java基础篇】第七章 方法_第4张图片
【Java基础篇】第七章 方法_第5张图片

public class Function {

    public static void main(String[] args) {
        System.out.println("main begin");
        m1();
        System.out.println("main over");

    }

    public static void m1() {
        System.out.println("m1 begin");
        m2();
        System.out.println("m1 over");
    }

    public static void m2(){
        System.out.println("m2 begin");
        m3();
        System.out.println("m2 over");
    }
    public static void m3(){
        System.out.println("m3 begin");
        System.out.println("----->");
        System.out.println("m3 over");
    }
}

运行结果:
【Java基础篇】第七章 方法_第6张图片

Tips:
main方法最先执行,也是最后一个结束。main方法的结束,也代表着整个程序就结束了。

4、return和break的对比

break是终止循环,return是终结当前方法。所以在return语句后面再写语句是无意义的,编译也会报错:“无法访问的语句”。

【Java基础篇】第七章 方法_第7张图片
【Java基础篇】第七章 方法_第8张图片
【Java基础篇】第七章 方法_第9张图片

5、JVM的内存结构&方法执行时内存的变化

小总结

  • JVM内存主要有三大块:栈区、堆区、方法区(还有其他边角料空间)
  • 方法在被调用的时候需要的内存空间在栈区分配
  • 类加载的时候,字节码文件存方法区,方法区最先有数据

【Java基础篇】第七章 方法_第10张图片
【Java基础篇】第七章 方法_第11张图片

栈区存的是方法被调用时或执行时所需要的内存、方法的局部变量

方法调用----->压栈------>分配空间
方法结束----->弹栈------>释放空间

【Java基础篇】第七章 方法_第12张图片
【Java基础篇】第七章 方法_第13张图片

将方法的返回值直接扔给print

System.out.println(sum(100,200));
//等价于
int result = sum(100,200);
System.out.println(result);

分析思考解决一个问题的方法和逻辑,从而拆解问题,根据拆解的问题去提取方法、定义方法,最后填充代码。
eg:
求大于一个数的最小质数。得先实现一个数是不是质数的判定,再把输入的数每次加一,加一后调用之前的方法,判定是质数则输出,不是则继续加。

import java.util.Scanner;
public class Number {
    public static void main(String[] args) {
        minPrimeNumber();
    }

    /**
     * 判断一个数是不是质数
     * @param num
     * @return
     */
    public static int primeNumber(int num){
        for(int i=2;i<num;i++){
            if (num%i==0){
                return 1;//不是质数
            }
        }
        return 0;//是质数
    }

    /**
     * 求大于一个数的最小质数
     */
    public static void minPrimeNumber(){
        Scanner s = new Scanner(System.in);
        System.out.println("请输入你的数:");
        int number = s.nextInt();
        while (true){
            number++;
            if (primeNumber(number)==0){
                System.out.println("大于它的最小质数是:"+number);
                break;
            }
        }
    }
}


运行结果:
【Java基础篇】第七章 方法_第14张图片

6、方法的重载

发生重载的条件(同时满足):

  • 在同一个类中
  • 方法名相同
  • 参数列表不同(如参数个数不同、参数类型不同、除法运算中的参数顺序不同)

注意:方法重载的重点是看方法名和形参列表,和是否有返回值、返回值类型、修饰符是否相同无关!!!

【Java基础篇】第七章 方法_第15张图片
【Java基础篇】第七章 方法_第16张图片
【Java基础篇】第七章 方法_第17张图片

【Java基础篇】第七章 方法_第18张图片

println就是一个经典的重载,输出不同的数据类型,均是println,若没有重载,则每种数据类型对应的方法名不同,使用不方便。

7、代码的封装

【Java基础篇】第七章 方法_第19张图片
【Java基础篇】第七章 方法_第20张图片

8、方法的递归

【Java基础篇】第七章 方法_第21张图片

StackOverflow Error的排查思路:

  • 查看递归结束的条件是否正确
  • 若结束条件没问题,则手动调大JVM的栈内存的初始大小

【Java基础篇】第七章 方法_第22张图片

//递归求和
public static int sum(int num){
        if(num==1||num==0){
            return num;
        }
        return num+sum(num-1);
 }

【Java基础篇】第七章 方法_第23张图片

你可能感兴趣的:(Java基础,java,jvm,开发语言)