Java 基础语法-方法

简介: Java 基础语法-方法

1 方法

1.1 定义

方法:Method,方法就是一段可以被重复利用的代码片段。并且每一个方法都会独立完成一个独立的功能。

方法的作用:代码复用。(重复的代码不需要重复的编写,这种功能的代码可以只写一份,如果需要使用这个功能的话,我们就调用这个方法。)

方法在C语言当中被称为:函数

  • 方法必须先调用才能够执行。如果不调用,方法是无法执行的。main方法不需要我们调用,但是它被JVM调用。
  • 方法在一个类体当中定义的时候,是没有顺序要求的。
  • 方法当中不能定义方法,一个方法是定义在类体当中的。
1.2 语法规则
1.2.1 定义一个方法的语法规则
[修饰符列表] 方法的返回值类型 方法名(形式参数列表){
  方法体;
}
1.2.2 关于修饰符列表:目前暂时死固定写死:public static

public表示公开的

static表示静态的

修饰符列表是个可选项(可有可无)

1.2.3 关于方法名

方法名是标识符。只要遵循标识符的命名规则和命名规范即可。

  • 一般一个方法都是完成特定功能的,所以方法名一般都是以“功能”命名。例如:sumInt,表示int类型的数据求和。login,表示登录功能。
  • 方法名要见名知意。(一个好的方法名,可以大大提升程序的可读性。)
  • 方法名和变量名的命名规范一样,都是首字母小写,后面每个单词首字母大写。遵循驼峰命名方式。
1.2.4 返回值类型

什么是返回值

值:就是一个数据,或者成为一个结果

返回值:main方法调用了sumInt方法。那么sumInt这个方法执行结束之后,应该有一个执行结果返回给main方法。这里所说的返回结果就是返回值。a调用b,b结束的时候应该返回执行的结果给a。返回值,实际上就是返回一个数据,这个数据可能是:10、20,也可能是true或者false,还有可能是一个字符串"abc",或者字符串"def"。

1.在代码的级别,实现:值的返回


非常重要:在java代码角度,使用“return 值;”这样的语句来完成数据的返回。

返回给谁了?谁调用了,就返回给谁了。【返回给了调用者】。

“return 值;” 这个java语句的作用:将结果返回给调用者,同时所在的方法执行结束。

只要“return 值;”这个语句执行,所在的方法结束。同时将结果返回给调用者。

2.返回值类型起到的作用

返回值类型起到两个作用

  • 作用1:约束返回的数据的类型,不能随意返回数据,只能返回这种类型下的数据。
  • 作用2:根据方法声明的返回值类型来定义接收这个方法返回值的变量的类型。

3.方法的返回值类型,可以是哪些类型?

只要是java中的合法类型,都可以返回。例如:

  • 基本数据类型
  • byte short int long float double boolean char
  • 引用数据类型
  • String…
  • void
  • 表示这个方法不返回任何数据。如果一个方法只是调用它,它的执行结果你不需要,你不在乎,那么这个时候方法的返回值类型就可以写成void。但是不能什么也不写。

4.关于“return 值”这样的语句

当一个方法的返回值类型是void,那么方法体中不能写:return 值

当一个方法的返回值类型不是void,那么方法体当中就必须写:return 值

5.对于void返回值类型的方法来说,这种方法体当中可以使用“return;”语句,作用是:结束方法的执行。

6.重要的语法规则:带有关键字“return”的语句,只要执行,方法立即结束。

7.break和return的区别

break语句用来终止循环

return语句用来终止方法的执行

1.2.5 一个方法的参数
  1. 方法在声明的时候,小括号中的叫做:形式参数列表(形参)
public static int sum(int x, int y){}
// (int x, int y) 是形式参数列表
// int x 是一个形参
// int y 是一个形参

方法在调用的时候,小括号中的叫做:实际参数列表(实参)

sum(10, 20);
// (10, 20) 叫做形式参数列表
// 10 是一个实参
// 20 是另一个实参
  1. 形式参数列表和实际参数列表要一一对应:
  • 个数要一样
  • 类型要对应相同
  1. 形参的个数没有要求,主要看你的具体需求是什么,个数是0~N个。如果有多个的话,使用逗号隔开。“英文的逗号”
  2. 形参中起决定性作用的是:参数的类型。参数的名字其实就是变量名,随意的,只要是合法的标识符就行。
  3. 方法的形式参数列表其实就是用来接收将来调用时传递过来的“物料”。而方法的返回值就是把“物料”加工之后的“产物”。
  4. 方法调用的时候,传递的这个实参,实际上底层会有一个隐形的“赋值运算”,“=”等号运算。
  5. 方法上的每一个形参,都是局部变量
1.2.6 关于方法的调用

如果一个方法的修饰符列表当中有static。那么调用这个方法的语法格式是:

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

当“调用者”和“被调用者”在同一个类当中的时候,“类名.”可以省略。

1.2.7 方法中代码的执行顺序
  • 方法体当中的代码,遵循自上而下的顺序依次逐行执行,不可能出现跳行执行。
  • 上一行代码必须完全执行结束,下一行代码才能开始执行。
1.2.8 从内存的角度分析一下方法调用时候代码的执行顺序
  1. 栈数据结构特点:
  1. 先进后出/后进先出
  1. 栈涉及到的术语:
  1. 栈帧
  2. 栈顶元素
  3. 栈底元素
  4. 压栈(push)
  5. 弹栈(pop)
  1. 在Java的JVM(Java虚拟机)当中有一块空间(一个线程一块),叫做:VM Stack(虚拟机栈),VM Stack主要是在方法调用的时候,给该方法分配所属的内存空间。换句话说:方法调用的时候,需要的空间在VM Stack当中进行分配。

方法调用是压栈(给方法分配执行空间)

方法结束是弹栈(将之前分配的空间全部释放掉)

  1. 方法只定义,不去调用,这个方法是不会执行的。只有方法在调用的时候,才会给该方法分配空间,这个时候发生压栈动作,如果方法执行结束了,这个方法所属的空间就要释放掉,此时发生弹栈动作。
  2. 方法当中的局部变量只在当前方法中有效。因为方法结束之后,该方法所属的内存空间全部释放了。
  3. VMStack当中存储了“局部变量”。

2 方法重载

2.1 定义

在同一个类当中,允许方法名一致,参数列表不同,像这种情况的,就属于方法重载机制

Java编译器是允许的,方法名虽然是一样的,但是参数列表不同,Java编译器可以区分

2.2 一些问题
2.2.1 方法重载机制什么时候使用
  • 在功能相似的情况下,可以把方法名定义为相同的方法名
  • 如果功能A和功能B完全不一样,不相似,没关系,方法名千万别一样
2.2.2 方法重载的好处
  • 代码美观
  • 更便于程序员的开发
2.2.3 能构成方法重载机制 代码需要满足的条件
  • 条件一:在同一个类当中
  • 条件二:方法名一致
  • 条件三:参数列表不同
  • 个数不同算不同
  • 类型不同算不同
  • 顺序不同算不同
2.2.4 方法重载需要注意的问题
  • 方法的重载和方法的返回值类型无关
  • 方法的重载和方法的修饰符列表无关

3 方法递归

方法自己调用自己

  1. 对于递归来说:
  • 必须要有结束条件。
  • 不能无限制的递归,无限制递归会导致“栈内存溢出错误”。栈内存溢出错误之后,JVM就停止了。
  1. 栈内存溢出错误
  • java.lang.StackOverflowError(它发生之后,JVM就退出了。)
  1. 递归不建议使用,因为使用递归,一旦没有结束条件,就会发生栈内存溢出错误。
  2. 原则:能用循环的尽量使用循环,只有当循环搞不定的时候,才会选择使用方法递归的方式。(递归比循环更耗费内存空间。)
  3. 有的时候,即使存在递归的结束条件,并且我们也知道这个递归条件早晚有一天会成立的,但运行的时候还是发生了栈内存溢出错误?这是为什么?这是因为递归的太深了。栈内存不够。怎么解决这个问题呀?

设置VMStack栈内存的大小,可以先考虑扩展VMStack的空间,变大一点。

  1. 如果变大了,还是不行,那基本上可以断定,你这个递归的结束条件是有问题的。
  1. 递归当中必须要掌握的练习题:计算N的阶乘。

目录
相关文章
|
30天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
4天前
|
存储 安全 算法
Java容器及其常用方法汇总
Java Collections框架提供了丰富的接口和实现类,用于管理和操作集合数据。
Java容器及其常用方法汇总
|
6天前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
26 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
4天前
|
Java API
java.time常用方法汇总
`java.time` API 是从 Java 8 开始引入的时间日期处理库,旨在替代老旧的 `java.util.Date` 和 `Calendar`。它提供了更简洁、强大和灵活的方式处理日期、时间、时区及时间间隔,支持全球化和时间计算需求。API 包含获取当前时间、创建指定时间、解析和格式化字符串、进行加减运算、比较时间、获取年月日时分秒、计算时间间隔、时区转换以及判断闰年等功能。示例代码展示了如何使用这些功能,极大简化了开发中的时间处理任务。
|
26天前
|
Java
Java快速入门之类、对象、方法
本文简要介绍了Java快速入门中的类、对象和方法。首先,解释了类和对象的概念,类是对象的抽象,对象是类的具体实例。接着,阐述了类的定义和组成,包括属性和行为,并展示了如何创建和使用对象。然后,讨论了成员变量与局部变量的区别,强调了封装的重要性,通过`private`关键字隐藏数据并提供`get/set`方法访问。最后,介绍了构造方法的定义和重载,以及标准类的制作规范,帮助初学者理解如何构建完整的Java类。
|
23天前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
55 9
|
28天前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
60 12
|
29天前
|
算法 Java API
Java 方法注释:规范、实用和高质量的写法
本文深入探讨了如何编写高质量的 Java 方法注释
50 11
|
29天前
|
SQL Java 数据库连接
【潜意识Java】Java中JDBC过时方法的替代方案以及JDBC为什么过时详细分析
本文介绍了JDBC中一些常见过时方法及其替代方案。
41 5
|
2月前
|
Java
java do while 的语法怎么用?
java do while 的语法怎么用?
64 3