方法
方法声明
- 语法格式
访问修饰符 返回类型 方法名(参数列表)
方法分类
- 根据方法是否带参数,是否有返回值,可分为四类:
无参数无返回值
无参数有返回值
有参数无返回值
有参数有返回值
方法重载
同一个类中,方法名相同,参数列表不同,即为方法重载。
方法的重载的规则:
方法名必须相同
参数列表必须不同(个数不同、类型不同、类型顺序不同)。
方法的重载与返回值类型以及访问权限修饰符无关
java
public class MethodDemo {
public void getMaxNumber(float a, float b) {
float max = a > b ? a : b;
System.out.println("max = " + max);
}
public void getMaxNumber(double a, double b) {
double max = a > b ? a : b;
System.out.println("max = " + max);
}
public void getMaxNumber(boolean a, double b) {
}
public void getMaxNumber( double b,boolean a) {
}
}上述操作是被允许的,因为方法名相同,参数列表不同。
可变参数
可变参数的语法格式为:类型... 变量名。
java
public class ArgsDemo {
public int getSum(int... nums) {
int sum = 0;
for (int num : nums) {
sum += num;
}
return sum;
}
public static void main(String[] args) {
ArgsDemo md = new ArgsDemo();
System.out.println(md.getSum(1, 2, 3, 4, 5));
}
}可变参数中的方法重载(会优先调用参数类型和数量完全匹配的固定参数方法)
java
public class ArgsDemo {
public int getSum(int... nums) {
int sum = 0;
for (int num : nums) {
sum += num;
}
return sum;
}
public int getSum(int a, int b) {
return a + b;
}
public static void main(String[] args) {
ArgsDemo md = new ArgsDemo();
//此时会优先匹配到getSum(int a, int b),而不是匹配到getSum(int... nums)
System.out.println(md.getSum(1, 2));
}
}面试题
值传递和引用传递的区别?
Java 官方明确指出 Java 中只有值传递
基本数据类型属于'值传递',传递的就是值的副本,值的拷贝,在方法中对参数的修改不会影响原变量
引用数据类型属于'引用传递' 传递的是地址,也就是引用,在方法中对参数的修改会影响原变量
String 类型是特殊的引用数据类型 作为参数不会影响原变量 因为 String 是不可变
java
import java.util.Arrays;
public class TestArrayInterView {
public static void m1(int num){
num++;
}
public static void m2(int [] nums){
System.out.println("nums = " + nums);
for (int i = 0; i < nums.length; i++) {
nums[i]++;
}
}
public static void main(String[] args) {
int a = 10;
m1(a);
System.out.println("a = " + a); // 10
int [] b = {1,2,3,4,5};
m2(b);
System.out.println("b = " + b);
System.out.println(Arrays.toString(b)); // 2,3,4,5,6
}
}