这是我从Herbert Schildt的书“ Java:完整参考”(第239页,第240页)中以PDF格式获得的代码。我已经研究了“静态”,但是在这种情况下,我想知道为什么必须使用静态。
import java.util.Random;
interface SharedConstants { int NO = 0; int YES = 1; int LATER = 3; int SOON = 4; int NEVER = 5; }
class Question implements SharedConstants { Random rand = new Random();
int ask() {
int prob = (int) (100 * rand.nextDouble());
if(prob < 30) return NO;
else if(prob < 60) return YES;
else if(prob < 75) return LATER;
else if(prob < 98) return SOON;
else return NEVER;
}
}
public class AskMe implements SharedConstants { static void answer(int result) { switch(result) { case NO: System.out.println("No"); break; case YES: System.out.println("Yes"); break; case LATER: System.out.println("Later"); break; case SOON: System.out.println("Soon"); break; case NEVER: System.out.println("Never"); break; } }
public static void main(String[] args) {
Question q = new Question();
answer(q.ask());
answer(q.ask());
answer(q.ask());
answer(q.ask());
}
}
我不知道answer在类中创建方法的那一行AskMe。为什么我们需要“静态”访问控制?如果不是,则编译器将给出类似“错误:无法从静态上下文引用非静态方法answer(int)”的错误。
提前致谢。
(这是我第一次问问题,如果有任何错误,请告诉我)
问题来源:stackoverflow
类的方法在使用时,必须实例化类;而静态方法不需要依赖于类的实例化。Python 可以直接使用静态方法,而避免了去实例化一个对象。实例化对象需要消耗资源的,静态方法避免了这一切。
你能,但没有static你需要的实例AskMe调用answer在main。 void answer(int result) { switch(result) { case NO: System.out.println("No"); break; case YES: System.out.println("Yes"); break; case LATER: System.out.println("Later"); break; case SOON: System.out.println("Soon"); break; case NEVER: System.out.println("Never"); break; } }
public static void main(String[] args) { Question q = new Question(); AskMe askMe = new AskMe(); askMe.answer(q.ask()); askMe.answer(q.ask()); askMe.answer(q.ask()); askMe.answer(q.ask()); }
答案来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。