我正在尝试为管/地铁票机制作接口类。不是真的,而是计算机科学模块的课程。我不明白何时使用静态方法。我不太了解计算机科学,但主要方法似乎使用静态。
class UNInterfaceTest
{
public static final int NOTTING_HILL = 1;
public static final int HIGH_KEN = 2;
public static final int GLOUS = 3;
public static final int SOUTH_KEN = 4;
public static final int SLOANE = 5;
public static final int VICTORIA = 6;
public static final int ST_JAMES = 7;
public static final int WESTMINSTER = 8;
public static final int QUIT = 10;
private Input in = new Input();
private static void displayMenu()
{
System.out.println("CIRCLE LINE: Please Select the Number of Your Current Station.");
System.out.println(NOTTING_HILL + ": Nottinghill_Gate");
System.out.println(HIGH_KEN + ": High_Street_Kensignton");
System.out.println(GLOUS + ": Gloucester_Road");
System.out.println(SOUTH_KEN + ": South_Kensignton");
System.out.println(SLOANE + ": Sloane_Square");
System.out.println(VICTORIA + ": Victoria");
System.out.println(ST_JAMES + ": St_James_Park");
System.out.println(WESTMINSTER + ": Westminster");
System.out.println();
System.out.println(QUIT + ". Quit");
}
public static void run()
{
while(true)
{
displayMenu();
int option = getMenuInput();
if (option == QUIT)
{
break;
}
doOption(option);
}
}
private static void doOption(int option)
{
switch(option){
case NOTTING_HILL:
//findNottinghill_Gate();
break;
case HIGH_KEN:
//findHighStreetKensignton();
break;
case GLOUS:
//findGloucesterRoad();
break;
case SOUTH_KEN:
//findSouthKensignton();
break;
case SLOANE:
// findSloaneSquare();
break;
case VICTORIA:
//findVictoria();
break;
case ST_JAMES:
//findStJamesPark();
break;
case WESTMINSTER:
//findWestminster();
break;
default:
System.out.println("Invalid option - try again");
}
}
private int getMenuInput()
{
//KeyboardInput val = new KeyboardInput();
System.out.print("Enter menu selection: ");
int option = in.nextInt();
in.nextLine();
return option;
}
public static void main(String[] args)
{
run();
}
}
答案 0 :(得分:6)
将一个类视为一个cookie切割器,将一个对象视为cookie(该类的一个实例)。静态方法是类本身的一部分(cookie切割器),如MyClass.myMethod();
,而非静态方法是类实例(cookie)的一部分,如new MyClass().myMethod();
。
在您的情况下,静态方法通常是特定于售票机的东西,例如计算应扣除多少钱。非静态方法是特定于单个故障单计数器的方法,例如跟踪它已处理的故障单数量。
以下是一些更多信息:
http://cscie160-distance.com/nonstatic.html
答案 1 :(得分:2)
static
方法与类的实例无关
任何不使用或修改其定义的类实例的方法都应该是static
。
答案 2 :(得分:0)
实例方法是按票证计算机,而静态方法会同时影响所有票证计算机。
现在,在您的情况下,您可能实际上只能一次使用e。但从概念上讲,每台机器都有自己的键盘,屏幕和CPU,因此所有方法都应该是实例。
这意味着您需要在main
中创建一台机器:
UNInterfaceTest machine = new UNInterfaceTest();
machine.run();
当然,您目前正在直接编写标准输出(不确定Input
读取的内容)。更好的设计可能是将Writer
传递给UNInterfaceTest构造函数,然后写入(而不是System.out)。这让每台机器都有自己的屏幕。
当然,其中一些信息可能超出了作业的范围。知道它应该仍然有用。
答案 3 :(得分:0)
简短回答:那是因为你没有使用你的物品。您可以将类实例化为对象并使用
运行它
UNInterfaceTest unit = new UNInterfaceTest();
unit.run();
使用非静态方法。