我们先来看一个例子
public class MyInteger { private int value; // 构造函数 public MyInteger(int value) { this.value = value; } // 实例方法 public boolean isEven() { return value % 2 == 0; } // 静态方法接受int参数 public static boolean isEvenStatic(int value) { return value % 2 == 0; } // 静态方法接受MyInteger参数 public static boolean isEvenStatic(MyInteger myInteger) { return myInteger.value % 2 == 0; } // 提供一个getter方法来获取value字段的值(尽管在这个示例中不是必须的,但通常是个好习惯) public int getValue() { return value; }
}
接下来,我们演示如何使用这三种方法:
public class Main { public static void main(String[] args) { // 创建一个MyInteger对象 MyInteger myInteger = new MyInteger(10); // 使用实例方法 boolean isEvenInstance = myInteger.isEven(); System.out.println("Is 10 even using instance method? " + isEvenInstance); // 使用静态方法接受int参数 boolean isEvenStaticInt = MyInteger.isEvenStatic(10); System.out.println("Is 10 even using static method with int parameter? " + isEvenStaticInt); // 使用静态方法接受MyInteger参数 boolean isEvenStaticMyInteger = MyInteger.isEvenStatic(myInteger); System.out.println("Is 10 even using static method with MyInteger parameter? " + isEvenStaticMyInteger); // 也可以这样使用静态方法接受MyInteger参数(如果已经有MyInteger对象的话) boolean isEvenStaticMyIntegerAgain = myInteger.isEvenStatic(myInteger); // 注意这里调用静态方法时,仍然通过类名来调用,但我们可以使用myInteger对象作为参数 System.out.println("Is 10 even using static method with MyInteger parameter again? " + isEvenStaticMyIntegerAgain); }
}
注意几点:
- 实例方法
isEven()
是通过MyInteger
的实例myInteger
来调用的。 - 静态方法
isEvenStatic(int value)
是通过类名MyInteger
直接调用的,并传递了一个int
类型的值。 - 静态方法
isEvenStatic(MyInteger myInteger)
也是通过类名MyInteger
直接调用的,但传递了一个MyInteger
类型的对象作为参数。
在实际编程中,我们通常直接通过类名来调用静态方法。
静态方法的特点
- 不依赖于对象实例:静态方法可以在没有创建类实例的情况下调用。
- 通过类名直接调用:你可以使用类名来调用静态方法,而不是通过类的实例。
- 可以访问静态变量:静态方法可以访问和修改类的静态变量。
- 不能访问非静态变量或方法:除非在静态方法中创建一个类的实例,否则静态方法不能直接访问类的非静态变量或方法。
// Main.java class MyInteger { private int value; // 构造函数 public MyInteger(int value) { this.value = value; } // Getter方法 public int getValue() { return value; } // toString方法,用于打印MyInteger对象的信息 @Override public String toString() { return "MyInteger{" + "value=" + value + '}'; } // 静态方法,接受两个MyInteger对象作为参数,返回它们的和 public static MyInteger add(MyInteger a, MyInteger b) { int sum = a.getValue() + b.getValue(); return new MyInteger(sum); }
} public class Main { public static void main(String[] args) { // 创建两个MyInteger对象 MyInteger num1 = new MyInteger(5); MyInteger num2 = new MyInteger(10); // 使用静态方法add计算两个MyInteger对象的和 MyInteger sum = MyInteger.add(num1, num2); // 打印结果 System.out.println(sum); // 输出: MyInteger{value=15} }
}
在这个例子中,add
方法是一个静态方法,它接受两个MyInteger
对象作为参数,并返回一个新的MyInteger
对象,该对象表示这两个数的和。这个方法不需要MyInteger
类的实例来调用,因为它是通过类名MyInteger
直接调用的。