方法的定义调用以及重载
定义:
public static void 方法名 ( ) { // 方法体; }
演示:
//演示 public static void method ( ) { // 方法体; }
调用:
方法名();
method();
注意:方法需要先定义,在调用,否则程序会报错,void表示无返回值,可以省略return,也可以单独的书写return,后面不加数据,方法不能嵌套
无参无返回值方法:
public void methed(){ }
有参返回值方法:
public void methed(int a){ }
无参有返回值:
public int methed(){ }
有参有返回值:
public int methed(int a){ }
注意:方法定义时,多个参数之间使用逗号( ,)分隔
练习:需求:设计一个方法可以获取两个数的较大值,数据来自于参数
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; } } }
方法参数的实参和形参;
涉及到值传递和址传递。值传递,不影响数值,址传递影响数值,跟JVM工作原理有关,下面演示一下
值传递:
public class Demo { public static void main(String[] args) { int a = 10; Test(a); System.out.println(a); } public static void Test(int a){ a = 12; } }
结果:
址传递:
public class Demo { public static void main(String[] args) { int [] arr = {10,20}; Test(arr); System.out.println(arr[0]); } public static void Test(int [] arr){ arr[0] = 20; } }
结果:
通过上述测试说明值传递不改变对象的值,址传递改变对象的值
方法的重载指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
多个方法在同一个类中
多个方法具有相同的方法名
多个方法的参数不相同,类型不同或者数量不同注意:重载仅对应方法的定义,与方法的调用无关,调用方式参照标准格式
重载仅针对同一个类中方法的名称与参数进行识别,与返回值无关,换句话说不能通过返回值来判定两
个方法是否相互构成重载
示例:
public class MethodDemo { public static void fn(int a) { //方法体 } public static int fn(double a) { //方法体 } } public class MethodDemo { public static float fn(int a) { //方法体 } public static int fn(int a , int b) { //方法体 } }
练习:
需求:使用方法重载的思想,设计比较两个整数是否相同的方法,兼容全整数类型(byte,short,int,long)
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; } }