java方法
基本概念
-
构成方法有四大要素。返回值类型、方法名称、参数、方法体
-
一般情况下,定义一个方法的语法如下所示。
修饰符 返回值类型 方法名(参数列表) { //方法体 return 返回值; }
-
形参变量隶属于方法,也就是说它们是方法的局部变量,只当在被调用时才被创建,才被临时性的分配内存,在调用结束后,立即释放所分配的内存单元。也就是说,当方法调用返回后,就不能再使用这些形式参数。
-
方法名称和方法参数列表(参数类型,参数个数)一起构成方法签名,方法签名是唯一标识方法的。注意这里的参数列表和参数名无关,只关联参数类型和参数个数。
方法重载
-
定义:使用方法名称相同但是参数列表不同的方法签名的机制叫做方法重载。
-
使用方法重载之后,对于调用者只需要调用一个方法并传入不同的参数即可获取想要的结果。而编译器根据传入的参数列表不同调用对应的方法。
案例:
public class MethodOverride { public static void main(String[] args) { int i=1; float f=1.11f; char c = 'a'; valueOf(i); valueOf(f); valueOf(c); } static void valueOf(int i) { System.out.println("整数是:"+i); } static void valueOf(float i) { System.out.println("浮点数是:"+i); } static void valueOf(char i) { System.out.println("字符是:"+i); } }
输出结果:
整数是:1
浮点数是:1.11
字符是:a
参数传递:基本数据类型,引用类型
一、 基本数据类型参数传递
-
案例:
public class 方法参数传递_基本数据类型 { public static void main(String[] args) { int i=100; System.out.println("调用change方法前:"+i); change(i); System.out.println("调用change方法后:"+i); } public static void change(int i) { i=200; } }
输出结果:
对于基本数据类型的参数,形式参数的改变不影响实际参数的值。形式参数和实际参数其实是两个不同的内存空间,一个的改变不会影响另一个存储空间。
二、引用数据类型参数参数传递
-
案例:
public class 方法参数传递_引用类型 { public static void main(String[] args) { int[] arr1={1,2,3}; System.out.println("调用change方法前arr[0]:"+arr1[0]); change(arr1); System.out.println("调用change方法后arr[0]:"+arr1[0]); } public static void change(int[] arr2) { arr2[0]=100; } }
输出结果:
对于引用类型的参数,形参的改变会影响实参的值。形参和实参是两个不同的内存空间, 一个的改变不会影响另一个存储空间。但是,引用类型的变量所存储的内容其实是地址值。也就是说,调用方法的时候,传入的实参arr实际上是堆内存中的数组首地址。在change方法中修改数组元素的时候,修改的是堆内存中数组的元素,而不是形参arr2,也不是实参arr1。而实参arr1和形参arr2都指向这个堆内存中的数组,所以最后打印出来的值是改变了的。
可变参数
-
格式:修饰符 返回值类型 方法名(数据类型…变量名);如:public int method(int…b);
-
如果既包含固定参数又包含可变参数,如public void method2(int a,int…b),其中a是个正常的形参变量,而b则是一个数组。可变参数必须要写在形参列表的最后面。
public class 可变参数方法 { public int sum(int a, int... b) { int sum=0; for (int temp : b) { sum=sum+temp; } sum=sum+a; return sum; } public static void main(String[] args) { 可变参数方法 alternate=new 可变参数方法(); System.out.println(alternate.sum(1));//输出1 System.out.println(alternate.sum(1, 1));//输出2 System.out.println( alternate.sum(1, 1, 1, 1));//输出3 } }
方法注意事项
- 方法不能嵌套定义,即方法内部不能再定义方法。
- void表示无返回值,可以省略return,也可以单独书写return后面不加数据。
- java只有值传递,没有引用传递。