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的阶乘。

目录
相关文章
|
3天前
|
Java
Java的方法详解
Java的方法是类中的重要组成部分,用于定义类的行为。方法可以接收参数、执行操作并返回结果。其基本语法包括返回类型、方法名、参数列表和方法体。方法支持重载,即同名但参数不同的多个方法;静态方法则直接通过类名调用,无需实例化。此外,Java还支持可变参数,允许方法接收不定数量的参数。通过访问修饰符如`public`、`protected`、`private`,可以控制方法的可见性。方法是实现类功能的基本单元,增强了程序的灵活性和复用性。
|
7天前
|
存储 Java 容器
Java 基础语法
Java是一种面向对象的编程语言,其基础语法包括类和对象、方法、变量、控制流语句、继承和多态以及异常处理。代码需写在类中,`main()`方法是程序入口,变量用于存储数据,控制流语句控制程序执行流程,继承和多态增强代码灵活性,异常处理保证程序稳定性。掌握这些知识可帮助您编写简单的Java程序。
|
10天前
|
存储 Java 程序员
优化Java多线程应用:是创建Thread对象直接调用start()方法?还是用个变量调用?
这篇文章探讨了Java中两种创建和启动线程的方法,并分析了它们的区别。作者建议直接调用 `Thread` 对象的 `start()` 方法,而非保持强引用,以避免内存泄漏、简化线程生命周期管理,并减少不必要的线程控制。文章详细解释了这种方法在使用 `ThreadLocal` 时的优势,并提供了代码示例。作者洛小豆,文章来源于稀土掘金。
|
11天前
|
安全 前端开发 Java
浅析JVM invokedynamic指令与Java Lambda语法的深度融合
在Java的演进历程中,Lambda表达式无疑是Java 8引入的一项革命性特性,它极大地简化了函数式编程在Java中的应用,使得代码更加简洁、易于阅读和维护。而这一切的背后,JVM的invokedynamic指令功不可没。本文将深入探讨invokedynamic指令的工作原理及其与Java Lambda语法的紧密联系,带您领略这一技术背后的奥秘。
10 1
|
15天前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
25 5
|
17天前
|
安全 Java 开发者
【技术咖必看】Java异常处理新境界:throws关键字,打造万无一失的方法签名!
【技术咖必看】Java异常处理新境界:throws关键字,打造万无一失的方法签名!
30 3
|
17天前
|
安全 Java 程序员
【程序猿逆袭指南】Java高手的秘密武器:throws关键字,让你的方法签名霸气侧漏!
【程序猿逆袭指南】Java高手的秘密武器:throws关键字,让你的方法签名霸气侧漏!
13 3
|
15天前
|
小程序 Java
【aspose-words】Aspose.Words for Java模板语法详细剖析
本文通过详细分析Aspose.Words for Java模板语法,介绍了使用条件块、变量和动态合并表格单元格三个常用模板标签,并结合实际案例进行演示。通过这三个标签的实操,帮助读者更好地掌握Aspose.Words的使用技巧。此外,还提供了官方文档链接以便进一步学习。
58 0
【aspose-words】Aspose.Words for Java模板语法详细剖析
|
18天前
|
Java Spring 容器
Java获取接口的所有实现类方法
这篇文章介绍了在Java中获取接口所有实现类的方法,包括使用JDK的ServiceLoader(SPI机制)和Spring Boot中的@Autowired自动注入及ApplicationContextAware接口两种方式。
40 1
|
1天前
|
JavaScript 前端开发 Java
通过JUnit5访问Java静态、私有、保护变量和方法
在《通过Gtest访问C++静态、私有、保护变量和方法》一文中介绍了如何通过Gtest访问C++静态、私有、保护变量和方法,本文介绍如何通过Junit5访问Java静态、私有、保护变量和方法。
6 0