方法(一系列难点解析)
1、方法概述
1.1 方法的概念
方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集
注意:
方法必须先创建才可以使用,该过程成为方法定义
方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用
2. 方法的定义和调用
2.1 无参数方法定义和调用
定义格式:
public static void 方法名 ( ) {
// 方法体;
}
调用格式:
方法名();
注意:
方法必须先定义,后调用,否则程序将报错。
方法调用过程图解
总结:每个方法在被调用执行的时候,都会进入栈内存,并且拥有自己独立的内存空间,方法内部代码调用。完毕之后,会从栈内存中弹栈消失。
范例如下:
public class MethodTest {
public static void main(String[] args) {
//在main()方法中调用定义好的方法
getMax();
}
//定义一个方法,用于打印两个数字中的较大数,
public static void getMax() {
//方法中定义两个变量,用于保存两个数字
int a = 10;
int b = 20;
//使用分支语句分两种情况对两个数字的大小关系进行处理
if(a > b) {
System.out.println(a);
}
else {
System.out.println(b);
}
}
}
2.2、带参数方法定义和调用
2.2.1 带参数方法定义
格式: public static void 方法名 ( 参数 ) { … … }
格式(单个参数): public static void 方法名 ( 数据类型 变量名 ) { … … }
范例(单个参数): public static void isEvenNumber( int number) { … … }
格式(多个参数): public static void 方法名 ( 数据类型 变量名1 ,数据类型 变量名2 ,…… ) { … … }
范例(多个参数): public static void getMax( int number1 , int number2 ) { … … }
注意:
方法定义时,参数中的数据类型与变量名都不能缺少,缺少任意一个程序将报错
方法定义时,多个参数之间使用逗号( ,)分隔
2.2.2 带参数方法调用
格式: 方法名 ( 参数 ) ;
格式(单个参数): 方法名 ( 变量名/常量值 ) ;
范例(单个参数): isEvenNumber( 5 ) ;
格式(多个参数): 方法名 ( 变量名1/常量值1 ,变量名2/常量值2 ) ;
范例(多个参数): getMax ( 5,6 ) ;
注意:
方法调用时,参数的数量与类型必须与方法定义中的设置相匹配,否则程序将报错
/*
带参数方法的定义和调用
定义格式:
public static void 方法名(参数) { … … }
调用格式:
方法名(参数);
*/
public class MethodDemo {
public static void main(String[] args) {
//常量值的调用
isEvenNumber(10);
//变量的调用
int number = 10;
isEvenNumber(number);
}
//需求:定义一个方法,该方法接收一个参数,判断该数据是否是偶数
public static void isEvenNumber(int number) {
if(number%2 == 0) {
System.out.println(true);
} else {
System.out.println(false);
}
}
}
2.3带返回值方法的定义和调用
格式: public static 数据类型 方法名 ( 参数 ) {
return 数据 ;
}
范例1: public static boolean isEvenNumber( int number ) { return true ;
}
范例2: public static int getMax( int a, int b ) {
return 100 ;
}
注意:
方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错
public class MethodTest {
public static void main(String[] args) {
//在main()方法中调用定义好的方法并使用变量保存
int result = getMax(10,20);
System.out.println(result);
//在main()方法中调用定义好的方法并直接打印结果
System.out.println(getMax(10,20));
}
//定义一个方法,用于获取两个数字中的较大数
public static int getMax(int a, int b) {
//使用分支语句分两种情况对两个数字的大小关系进行处理
//根据题设分别设置两种情况下对应的返回结果
if(a > b) {
return a;
} else {
return b;
}
}
}
注意:方法的返回值通常会使用变量接收,否则该返回值将无意义
2.4、方法的通用格式
3 形参和实参
- 形参:方法定义中的参数
等同于变量定义格式,例如:int number - 实参:方法调用中的参数
等同于使用变量或常量,例如: 10 number
4、重写和重载
重载:发生在一个类里面,方法名相同,参数列表不同(类型不同或者数量不同)(混淆点:跟返回类型没关系)
以下不构成重载
public double add(int a,int b)
public int add(int a,int b)
重写:发生在父类子类之间的,方法名相同,参数列表相同
重写注意事项:
1.父类中的私有方法不能被重写。
2、子类重写父类方法的时候,访问权限需要大于等于父类(public>默认>私有)
**
/*
需求:
使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)
思路:
1:定义比较两个数字的是否相同的方法compare()方法,参数选择两个int型参数
2:定义对应的重载方法,变更对应的参数类型,参数变更为两个long型参数
3:定义所有的重载方法,两个byte类型与两个short类型参数
4:完成方法的调用,测试运行结果
*/
public class MethodTest {
public static void main(String[] args) {
//调用方法
System.out.println(compare(10, 20));
System.out.println(compare((byte) 10, (byte) 20));
System.out.println(compare((short) 10, (short) 20));
System.out.println(compare(10L, 20L));
}
//int
public static boolean compare(int a, int b) {
System.out.println("int");
return a == b;
}
//byte
public static boolean compare(byte a, byte b) {
System.out.println("byte");
return a == b;
}
//short
public static boolean compare(short a, short b) {
System.out.println("short");
return a == b;
}
//long
public static boolean compare(long a, long b) {
System.out.println("long");
return a == b;
}
}
5.方法参数传递
5.1、方法参数是基本数据类型
5.2、方法参数是引用数据类型
参考资料:
https://zhuanlan.zhihu.com/p/58309788
https://www.bilibili.com/video/BV18J411W7cE?from=search&seid=3621457779371381782
黑马程序员笔记。