Java方法
方法重载
package com.xiang.method;public class Demo02 {public static void main(String[] args) {int max = max(20, 100, 10);System.out.println(max);}// 比大小public static int max(int num1,int num2){int result = 0;if (num1 == num2){System.out.println("num1==num2");return num1; // 终止方法}if (num1 > num2)result = num1;else {result = num2;}return result; // 终止方法}// 重载:浮点数比大小public static double max(double num1,double num2){double result = 0;if (num1 == num2){System.out.println("num1==num2");return num1; // 终止方法}if (num1 > num2)result = num1;else {result = num2;}return result; // 终止方法}// 重载:三个数比大小(注:存在小问题,仅作练习用)public static int max(int num1,int num2,int num3){int max = 0;max = max(num1,num2);max = max(max,num3);return max;}
}
可变参数
package com.xiang.method;public class Demo04 {public static void main(String[] args) {//Demo04 demo04 = new Demo04();//demo04.test(1,2,3,4,5,8);printMax(34,55,9,2,8,7,469);printMax(new double[]{2,6,7,9,15});}public void test(int... i){System.out.println(i[0]);System.out.println(i[1]);System.out.println(i[2]);System.out.println(i[3]);System.out.println(i[4]);System.out.println(i[5]);}public static void printMax( double... numbers){if (numbers.length == 0){System.out.println("No argument passed");return;}double result = numbers[0];// 排序for (int i = 1; i < numbers.length; i++) {if (numbers[i] > result){result = numbers[i];}}System.out.println("The max value is " + result);}
}
每日一题:Java中的‘static’
在Java中,static
成员(包括变量和方法)是属于类本身的,而不是类的某个特定实例。这意味着它们可以在不创建类的实例的情况下被访问。然而,虽然可以通过类的实例来访问这些静态成员,但这并不是推荐的做法,原因如下:
1. 语义清晰性
通过类名直接访问静态成员能够更清晰地表达出这个成员是属于类级别的,而非实例级别的。这样做可以提高代码的可读性和可维护性,让其他开发者(或未来的你)一眼就能看出该成员与整个类有关,而不是与任何特定的对象实例相关。
2. 避免混淆
如果使用实例引用来访问静态成员,可能会给不太熟悉代码的人造成误解,误以为该成员是与特定对象实例相关的。这会增加理解代码逻辑的难度,并可能导致错误的理解或假设。
3. 编译器优化
尽管从技术角度看,通过实例引用访问静态成员不会影响程序的行为,但它可能会影响编译器优化的效率。通过类名访问静态成员,可以让编译器更容易识别出这种访问模式,从而做出更好的优化决策。
4. 继承和多态问题
当涉及到继承时,通过实例引用来调用静态方法可能会导致一些困惑,因为静态方法不会像实例方法那样参与多态机制。也就是说,如果你有一个父类的引用指向子类的实例,通过这个引用来调用静态方法时,总是会调用父类中定义的方法版本,而不会考虑实际的运行时类型。这与人们通常期望的动态绑定行为不符。
综上所述,为了代码的清晰性、避免混淆以及更好地利用编译器优化,Java语法建议直接通过类名来访问静态成员,而不是通过实例引用来访问。这样不仅使代码更加直观易懂,而且有助于减少潜在的错误和误解。