我正在尝试调用静态方法。我知道的是,我们必须使用类名来调用静态方法。但是,我发现即使在对象的帮助下也可以调用静态方法。
例如:
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
}
}
我觉得这很混乱。两者都给出相同的答案,但这是调用静态方法的正确方法吗?
答案 0 :(得分:-1)
最好使用类调用静态方法,就像在第二个版本中一样。
它们都将以相同的方式工作,但是从对象调用静态方法将不会带来任何收益,因为它们无法被继承。最终只会造成混乱。
答案 1 :(得分:-1)
总是最好用类名来调用静态方法。如果满足要求而不创建对象,那么为什么不必要地创建对象。