方法的定义和使用
方法: 是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。
注意:
方法必须先创建才可以使用,该过程称为方法定义。
方法创建后并不是直接运行的,需要手动使用后才能执行,该过程称为方法调用。
//定义格式
public static void 方法名(){...}
public static void isEvenNumber(){...}
package com.xxxx.learn.heima;
public class MethodDemo {
public static void main(String[] args) {
//方法调用
isEvenNumber();
}
//定义一个方法,在方法中定义一个变量,判断该数据是否为偶数
public static void isEvenNumber(){
//定义变量
int number = 10;
//判断该数据是否为偶数
if(number%2 == 0){
System.out.println(true);
}else{
System.out.println(false);
}
}
}
形参和实参
形参: 方法中定义的参数,等同于变量定义格式。
实参: 方法调用中的参数,等同于使用变量或常量。
带参数方法
//定义格式
public static void 方法名(数据类型 变量名1,数据类型 变量名2){...}
public static void getMax(int number1, int number2){...}
方法调用时,参数的数量和类型必须与方法定义中的设置相匹配,否则程序将报错。
package com.xxxx.learn.heima;
public class MethodDemo {
public static void main(String[] args) {
//方法调用
isEvenNumber(10);//常量值的调用
int a = 11;
isEvenNumber(a);//变量值的调用
}
//定义一个方法,该方法接收一个参数,判断该数据是否为偶数
public static void isEvenNumber(int number){
//判断该数据是否为偶数
if(number%2 == 0){
System.out.println(true);
}else{
System.out.println(false);
}
}
}
带返回值方法
//定义格式
public static 数据类型 方法名(参数){
return 数据;
}
注意: 方法定义时return后面的返回值与方法定义上的数据类型要匹配,否则程序将报错。
//带返回值方法调用格式
数据类型 变量名 = 方法名(参数);
boolean flag = isEvenNumber(5);
注意: 方法的返回值通常会使用变量接收,否则该返回值将毫无意义。
package com.xxxx.learn.heima;
public class MethodDemo {
public static void main(String[] args) {
//方法调用
boolean flag = isEvenNumber(10);
System.out.println(flag);
}
//定义一个方法,该方法接收一个参数,判断该数据是否为偶数
public static boolean isEvenNumber(int number){
//判断该数据是否为偶数
if(number%2 == 0){
return true;
}else{
return false;
}
}
}
方法注意事项
- 方法不能嵌套定义。
- void表示无返回值,可以省略return,也可以单独书写return,后面不加数据。
方法的通用格式
public static 返回值类型 方法名(参数){
方法体;
return 数据;
}
方法的重载
方法重载是指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载。
- 多个方法在同一个类中
- 多个方法具有相同的方法名
- 多个方法的参数列表不同(类型、个数、顺序)
方法重载的特点:
- 重载仅对应方法的重载,与方法的调用无关,调用方式参照标准格式。
- 重载仅针对同一个类中方法的名称和参数进行识别,与返回值类型无关,也就是说不能通过返回值类型来判定两个方法是否相互构成重载。
在调用的时候,java虚拟机会通过参数的不同来区分同名的方法。
package com.xxxx.learn.heima;
public class MethodDemo {
public static void main(String[] args) {
//方法调用
int result1 = sum(10,20);
double result2 = sum(10.0,20.0);
int result3 = sum(10,20,30);
System.out.println(result1);
System.out.println(result2);
System.out.println(result3);
}
//需求1:求两个int类型数据和的方法
public static int sum(int a , int b){
return a + b;
}
//需求2:求两个double类型数据和的方法
public static double sum(double a , double b){
return a + b;
}
//需求3:求三个int类型数据和的方法
public static int sum(int a , int b,int c){
return a + b + c;
}
}
/*输出结果:
30
30.0
60
*/
重载和重写的区别
方法的参数传递
对于基本数据类型的参数,形式参数的改变,不影响 实际参数的值。
package com.xxxx.learn.heima;
public class ChangeDemo {
public static void main(String[] args) {
int number = 10;
System.out.println("调用change方法前:number = " + number);
change(number);
System.out.println("调用change方法后:number = " + number);
}
public static void change(int number){
number = 20;
}
}
/**
输出结果:
调用change方法前:number = 10
调用change方法后:number = 10
*/
对于引用数据类型的参数,形式参数的改变,影响 实际参数的值。
package com.xxxx.learn.heima;
public class ArgsDemo {
public static void main(String[] args) {
int[] array = {10,20,30};
System.out.println("调用change方法前:array[0] = " + array[0]);
change(array);
System.out.println("调用change方法后:array[0] = " + array[0]);
}
private static void change(int[] array) {
array[0] =100;
}
}
/**
输出结果:
调用change方法前:array[0] = 10
调用change方法后:array[0] = 100
*/