Java入门基础-05方法
本章知识点总结于黑马程序员的视频课程:《Java入门基础课程》,是对上课做的笔记
目录
一、认识方法
方法是什么
- 方法是一种语法结构,它可以把一段代码封装成一个功能,以便重复调用。
方法的完整格式
/**
修饰符 返回值类型 方法名 (形参列表){
方法体代码 // 需要执行功能的代码
return 返回值;
}
*/
示例:使用方法对两个整数求和并返回
// 使用方法对两个整数求和并返回
// 返回值类型(int);方法名称(sum);形参列表:(int a, int b)
public static int sum (int a, int b){
int c = a + b; // 方法执行体
return c; // 返回值(也可以理解为我们调用这个方法时想要得到的值)
}
方法如何执行?
- 方法定义后,必须调用才可以跑起来,调用格式: 方法名(…)
int rs = sum(10, 20);
System.out.println(rs);
代码:
package com.itheima.method;
public class Test {
public static void main(String[] args) {
// 调用sum方法
int rs = sum(10, 20);
System.out.println(rs);
}
// 方法:对两个整数求和并返回
public static int sum (int a, int b){
int c = a + b; // 方法执行体
return c; // 返回值(也可以理解为我们调用这个方法时想要得到的值)
}
}
方法定义时几个注意的点
- 方法的修饰符:暂时都是用 public static 修饰。后续会讲两者的使用以及其他修饰符。
- 方法申明了具体的返回值类型,内部必须使用return返回对应的类型数据!!!
- 形参列表可以有多个,甚至可以没有;如果有多个形参,多个形参必须用英文符号“ , ” 隔开。且不能给初始化值。
使用方法的好处:
- 提高了代码的复用性,提高了开发效率。
- 让程序逻辑更清晰。
二、方法的其他形式
方法定义时:需要按照方法解决的实际业务需求,来设计合理的方法形式解决问题。
注意事项:
1、如果方法不需要返回值时,返回值类型必须申明成void(无返回值申明),此时方法内部不可以使用return返回数据。
2、方法如果不需要接收数据,则不需要定义形参,且调用方法时也不可以传递数据给方法;如果需要接收数据,则需要定义形参,且调用方法时必须传递数据给方法。
3、没有参数,且没有返回值类型(void)申明的方法,称为无参数、无返回值方法,依此类推。
示例:
package com.itheima.method;
public class Test2 {
public static void main(String[] args) {
// 打印三行Hello Worl!!
printHelloWorld();
System.out.println("-------------------");
// 打印想要行数的hello world
print(2);
}
// 打印三行hello world 的方法 无需返回值 无参数,无返回值方法
public static void printHelloWorld(){
for (int i = 0; i < 3; i++) {
System.out.println("Hello World!!");
}
}
/**
* 有参数,无返回值方法
*/
public static void print(int n){
for (int i = 0; i < n; i++) {
System.out.println("Hello World!!");
}
}
}
运行结果:
三、方法使用时的常见问题
1.方法在类中的位置放前放后无所谓,但一个方法不能定义在另一个方法里面。
2.方法的返回值类型写void(无返回申明)时,方法内不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部必须使用return返回对应的类型数据。
3.return语句的下面,不能编写代码,属于无效代码,执行不到那。
4.方法不调用就不会执行,调用方法时,传递给方法的数据,必须严格匹配方法的参数。
5.调用有返回值的方法,有三种方式:1.可以定义变量接收结果 。2.或者直接输出调用。3.甚至直接调用。
6.调用无返回值的方法,只有1种方式:只能直接调用。
四、方法的案例
设计方法的技巧,主要关注三方面:
- 方法是否需要接收数据进行处理?
- 方法是否需要返回数据?
- 方法要处理的业务(看编程能力)。
1.计算1-n 的和
需求:求1-n的和
分析:
- 方法是否需要接收数据进行处理? 需要接收n具体的值,因此形参声明为:int n。
- 方法是否需要返回数据? 需要返回1-n的求和结果,因此返回值类型声明为int。
- 方法内部的业务:完成求1-n的和并返回。
代码:
package com.itheima.method;
public class Test4 {
public static void main(String[] args) {
int rs = sum(100);
System.out.println(rs);
int rs2 = sum(10);
System.out.println(rs2);
}
public static int sum(int n){
int sum = 0;
for (int i = 1; i <= n; i++) {
sum += i;
}
return sum;
}
}
运行结果:
2.判断一个整数是奇数还是偶数
需求:输入一个整数,判断是偶数还是奇数,并把判断结果输出来。
分析:
- 方法是否需要接收数据进行处理? 需要接收一个整数来判断,因此形参声明为:int number.
- 方法是否需要返回数据? 方法内部判断完后直接输出结果即可,无需返回,因此返回值类型声明为:void
- 方法内部的业务:通过if语句判断number是奇数还是偶数,并输出结果。
代码:
package com.itheima.method;
public class Test5 {
public static void main(String[] args) {
judge(24);
judge(35);
}
public static void judge(int number){
if (number % 2 == 0){
System.out.println(number + "是一个偶数");
}else {
System.out.println(number + "是一个奇数");
}
}
}
运行结果:
五、方法在计算机中的执行原理
- 方法被调用的时候,是进入到栈内存中运行。
- 方法进出栈中的方式是:先进后出。
- 方法在栈中执行完会从栈中清理掉。
- 栈的特点:先进后出
方法为什么要在栈中运行自己? 保证一个方法调用完另一个方法后可以回来。
六、Java的参数传递机制
Java的参数传递机制都是:值传递
- 所谓值传递:指的是在传输实参给方法的形参的时候,传输的是实参变量中存储的值的副本。
- 实参:在方法内部定义的变量。
- 形参:定义方法时 “(…)” 中所声明的参数。
基本类型的参数传递
传递的是参数的值,而非参数的地址。
引用类型的参数传递
此时传递的是参数的地址。
示例:
package com.itheima.method;
public class Test6 {
public static void main(String[] args) {
int[] arrs = {10, 20, 30};
chage(arrs); // 此时传递的是arrs的地址。
System.out.println("main: " + arrs[1]);
}
public static void chage(int[] arrs){
System.out.println("方法内1: " + arrs[1]);
arrs[1] = 222; // 是在arrs地址内进行更改,所以arrs[1]的值也进行了更改
System.out.println("方法内2: " + arrs[1]);
}
}
运行结果:
基本类型和引用类型的参数在传递的时候有什么不同?
- 都是值传递。
- 基本类型的参数传输存储的数据值。
- 引用类型的参数传输存储的地址值。
引用类型函数传递的相关案例
1.打印int类型的数组类容
需求:输出一个int类型的数组类容,要求输出的格式为:[11, 22, 33, 44, 55]
代码:
package com.itheima.method;
public class Test7 {
public static void main(String[] args) {
int[] arr = {10, 20, 30, 40, 50};
printArray(arr);
int[] arr2 = null;
printArray(arr2);
int[] arr3 = {};
printArray(arr3);
}
public static void printArray(int[] arr){
// 判断数组是否为空
if (arr == null){
System.out.println(arr); // null
return; // 跳出当前方法
}
System.out.print("["); // 因为是在同一行,所以用print
for (int i = 0; i < arr.length; i++) {
// 方法一:
// System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");
// 方法二:
if (i == arr.length - 1){
System.out.print(arr[i]);
}else {
System.out.print(arr[i] + ", ");
}
}
System.out.println("]");
}
}
运行结果:
2.比较两个数组
需求:比较两个int类型的数组是否一样,返回true或false。
代码:
package com.itheima.method;
public class Test8 {
public static void main(String[] args) {
int[] arr1 = null;
int[] arr2 = null;
System.out.println(equals(arr1, arr2));
System.out.println("-----------");
int[] arr3 = null;
int[] arr4 = {12, 14};
System.out.println(equals(arr3, arr4));
System.out.println("-----------");
int[] arr5 = {12, 13, 15};
int[] arr6 = {12, 13, 78};
System.out.println(equals(arr5, arr6));
System.out.println("-----------");
int[] arr7 = {12, 23, 15};
int[] arr8 = {12, 23, 15};
System.out.println(equals(arr7, arr8));
System.out.println("-----------");
}
public static boolean equals(int[] arr1, int[] arr2){
// 1.判断两个数组是否都为null
if (arr1 == null && arr2 == null){
return true;
}
// 2. 判断arr1 是null或者arr2是null
if (arr1 == null || arr2 == null){
return false;
}
// 3. 判断两个数组的长度是否相等,如果不一样,直接返回false
if (arr1.length != arr2.length){
return false;
}
// 4. 两个数组的长度一样,接着比较它们的内容是否一样
for (int i = 0; i < arr1.length; i++) {
// 判断当前位置2个数组的元素是否不一样,不一样直接返回false
if (arr1[i] != arr2[i]){
return false;
}
}
return true;
}
}
运行结果:
七、方法重载
方法重载: 一个类中,出现多个方法名称相同,但它们的形参列表是不同的,那么这些方法就称为方法重载了。
方法重载的注意事项:
- 一个类中,只要一些方法的名称相同、形参列表不同,那么它们就是方法重载了,其它的都不管(如:修饰符,返回值类型是否一样都无所谓)。
- 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。
方法重载的应用场景:
- 开发中我们经常需要为处理一类业务,提供多种解决方案,此时用方法重载来设计是很专业的。
补充知识:方法中单独使用return关键字
- return:可以用在无返回值的方法中,作用是:立即跳出并结束当前方法的执行。
- break:跳出并结束当前所在循环的执行。
- continue:结束当前所在循环的当次继续,进入下一次执行。
总结
方法到这里就结束啦,本章知识点有:认识方法,方法的书写格式以及执行;方法的其他形式,包括无返回值方法,方法大的名称;方法使用时常见的六个问题;方法的案例,有计算1-n的和、判断一个整数是奇数还是偶数;方法在计算机中的执行原理,方法在栈中运行;Java的参数传递机制,包括基本类型的参数传递,引用类型的参数传递,引用类型函数传递的相关案例有打印int类型的数组类容和比较两个数组;方法重载;return在方法中单独使用。
下一章:Java入门基础-06编程思维训练