java - 为什么我们需要像下面这样的一些方法访问修饰符“静态”?
问题描述
这是我从 Herbert Schildt 第 239、240 页的“Java:完整参考”一书中获得的 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
我想知道在 class中创建方法的那一行AskMe
。为什么我们需要“静态”访问控制?如果不是,编译器将给出类似“错误:无法从静态上下文引用非静态方法 answer(int)”的错误。
提前致谢。
(这是我第一次提问,如有错误请告诉我)
解决方案
你可以,但没有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());
}
推荐阅读
- c - 到达execve时如何防止GDB退出?
- node.js - 为什么 Firebase 显示一些奇怪的错误,因为我没有任何与点 (`.`) 相关的错误?
- c++ - 函数名作为c ++中的参数
- typescript - 你如何对对象列表进行排序?
- python-3.x - python3程序的网格计算
- java - StateMachineService.acquireStateMachine 不应启动 stateMachine
- python - TypeError:“NoneType”对象不可迭代循环
- android - 什么是 Flurry Analytics 域?
- node.js - 在 Nodejs 应用程序中使用您自己的凭据,是否安全?
- html - 如何在移动视图中更改 div 的顺序?