在Java中调用静态方法的正确方法是哪种?

时间:2019-01-23 04:50:47

标签: java static-methods

我正在尝试调用静态方法。我知道的是,我们必须使用类名来调用静态方法。但是,我发现即使在对象的帮助下也可以调用静态方法。

例如:

public class SwitchStaticMethod {
//static methods can also be called by object
    /**
     * @param args the command line arguments
     */

    public static int getMonthNumber(String month) {
    int monthNumber = 0; 
    if (month == null) { 
      return monthNumber; } 
    switch (month.toLowerCase()) { 
      case "january": monthNumber = 1; break; 
      case "february": monthNumber = 2; break; 
      case "march": monthNumber = 3; break; 
      case "april": monthNumber = 4; break; 
      case "may": monthNumber = 5; break; 
      case "june": monthNumber = 6; break; 
      case "july": monthNumber = 7; break; 
      case "august": monthNumber = 8; break; 
      case "september": monthNumber = 9; break; 
      case "october": monthNumber = 10; break; 
      case "november": monthNumber = 11; break; 
      case "december": monthNumber = 12; break; 
      default: monthNumber = 0; break; } 
      return monthNumber; } 

    public static void main(String[] args) {
        // TODO code application logic here
        String month = "August";

      SwitchStaticMethod objSNM = new SwitchStaticMethod();
      int returnedMonthNumber = objSNM.getMonthNumber(month); 
      if (returnedMonthNumber == 0) { 
         System.out.println("Invalid month"); 
      } else { 
         System.out.println(returnedMonthNumber); 
     }   // TODO c
    }

}

类似地,我可以在没有对象帮助的情况下调用静态方法,如以下代码所示:

public class SwitchStaticMethod2 {

    /**
     * @param args the command line arguments
     */
     public static int getMonthNumber(String month) {
    int monthNumber = 0; 
    if (month == null) { 
      return monthNumber; } 
    switch (month.toLowerCase()) { 
      case "january": monthNumber = 1; break; 
      case "february": monthNumber = 2; break; 
      case "march": monthNumber = 3; break; 
      case "april": monthNumber = 4; break; 
      case "may": monthNumber = 5; break; 
      case "june": monthNumber = 6; break; 
      case "july": monthNumber = 7; break; 
      case "august": monthNumber = 8; break; 
      case "september": monthNumber = 9; break; 
      case "october": monthNumber = 10; break; 
      case "november": monthNumber = 11; break; 
      case "december": monthNumber = 12; break; 
      default: monthNumber = 0; break; } 
      return monthNumber; } 
    public static void main(String[] args) {
        // TODO code application logic here

        String month = "August";

      //SwitchStaticMethod2 objSNM = new SwitchStaticMethod2();
      int returnedMonthNumber = SwitchStaticMethod2.getMonthNumber(month); 
      if (returnedMonthNumber == 0) { 
         System.out.println("Invalid month"); 
      } else { 
         System.out.println(returnedMonthNumber); 
     }   // TODO c
    }
    }

我觉得这很混乱。两者都给出相同的答案,但这是调用静态方法的正确方法吗?

2 个答案:

答案 0 :(得分:-1)

最好使用类调用静态方法,就像在第二个版本中一样。

它们都将以相同的方式工作,但是从对象调用静态方法将不会带来任何收益,因为它们无法被继承。最终只会造成混乱。

答案 1 :(得分:-1)

总是最好用类名来调用静态方法。如果满足要求而不创建对象,那么为什么不必要地创建对象。