Java学习笔记三:基础知识——方法的定义/语法格式/调用/重载/递归/栈内存

一、方法 method

1、 方法是可以完成某个特定功能并且可以重复利用的代码片段。

方法的作用:提高代码的复用性,使代码更为规范、简洁。

代码遵循自上而下的顺序运行,main方法会被jvm自动调用,其他方法不被调用则不会执行。

2、方法的语法格式

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

注:[]里面的内容表示可选 不是必须的;
	方法体由java语句构成;

2.1 修饰符列表:
public static 可省略

2.2 返回值类型

返回值类型可以是任何合法的数据类型;

返回值一般指的是方法执行结束后的结果,通常是一个数据;

当一个方法执行结束不返回任何值时,返回值类型也不能省略,必须写上void关键字,所以void表示该方法执行结束不返回任何结果。

如果返回值类型不是void,再方法体执行结束时必须使用“return 值”来完成值的返回,否则编译会报错。

如果返回值类型是void,方法体中不能有“return 值”语句,但可以有“return;”

当return语句执行,当前方法必然结束。

2.3 方法名
要求首字母小写,后面每个单词首字母大写

2.4 形式参数列表
简称形参;
形式参数列表中的每一个参数都是“局部变量”,方法体结束之后内存释放;
形参的个数是0-N个;
形参有多个时,用逗号隔开。
public static void sumInt(){}
public static void sumInt(int x){}
public static void sumInt(int x, int y){}
public static void sumInt(int x, int y, double a, String s){}

2.5 方法体
由Java语句构成。
方法体中编写的时业务逻辑代码,完成某个特定功能。

3、方法的调用

方法必须调用之后才能执行。

调用的语法:
类名.方法名(实际参数列表);

实参和形参的类型和个数必须一一对应。

使用变量来接收方法的返回值,需要定义变量类型。

方法没有返回值时,不能用变量接收结果;方法有返回值时,也可以不接收。

在方法调用时,a()方法调用b()方法时,a和b都在同一个类中,“类名.”可以省略,如果不在同一个类中,“类名.”不能省略。

不是只有main方法才可以调用其他方法。

break;用来终止switch和离之最近的循环;
return;用来终止离之最近的一个方法。
在同一个域中,return下面不能再编写其他代码。

二、内存

1、 JVM中主要的三块内存空间:
栈、堆、方法区

方法区:
类加载器classloader,将硬盘上的xxx.class字节码文件装载到JVM时,
会将字节码文件存放到方法区中。方法区存储的是代码片段。
因为类需要加载,所以方法区中最先有数据。

栈内存 stack:
在方法被调用时,该方法需要的内存空间在栈中分配。
栈内存存储方法执行时的内存空间和局部变量。

方法调用:压栈,分配空间
方法结束:弹栈,释放空间

2、 栈数据结构

进栈、入栈、压栈、push
出栈、弹栈、pop

栈底元素、栈顶元素

栈帧永远指向栈顶元素;
处于栈顶部的元素具有活跃权;

栈数据结构的特点:
先进后出,后进先出。

三、方法重载

1、方法重载的优点:
代码整齐美观;
功能相似的代码方法名相同,易于代码编写和记忆。

2、方法的区分:
方法名相同时,编译器通过方法参数类型进行方法区分。

3、什么时候使用方法重载:
在同一个类中,两个方法的功能相似时,考虑方法名一致

什么时候代码会发生方法重载:
在同一个类中
方法名相同;
参数列表不同;(个数、类型、顺序)
同时满足以上三个条件

方法的重载与方法的返回值类型无关;
与修饰符列表无关。

四、方法的递归

1、 递归是指方法自己调用自己。

2、 当递归程序没有结束条件,会发生栈内存溢出错误:StackOverFlowError
因此递归必须要有结束条件

有结束条件也可能发生错误,是因为递归太深,栈内存不够。

当栈内存溢出错误发生:
先检查递归的结束条件是否正确;

若结束条件没问题,需手动调整JVM栈内存初始化大小。
java -Xss xxxGB xx.java

java -X 可以查看调整堆栈大小的参数

/*
计算1-n的和
 */


/*


// 使用for循环实现

public class RecursionSample01 {

    public static void main(String[] args) {
        int retValue1 = sum(3);
        System.out.println(retValue1);
        System.out.println(sum(10));
    }

    //计算1-n的方法
    public static int sum(int n){
        int result = 0;
        for(int i = 1; i <= n; i++){
            result += i;
        }
        return result;
    }
}

*/



// 使用递归方法实现

public class RecursionSample01 {

    public static void main(String[] args) {
        int retValue2 = sum(10);
        System.out.println(retValue2);
    }

    //递归方法
    public static int sum(int n){
        if (n == 1){
            return 1;
        }

        return n + sum(n-1);
    }
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值