2011-01-03 3 views
1

Возможные Дублировать:
When should a method be static?статические и не являющиеся статические методы в Java

я пытаюсь сделать класс интерфейса для билетного трубки/метро. хорошо не для реального, а для курсовой работы в модуле информатики. Я не понимаю, когда использовать статические методы. Я не знаю много о компьютерных науках, но основные методы, похоже, используют статические.

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

Методы экземпляров - это машина для билетов, а статические методы - то, что влияет на все машины билета одновременно.

Теперь, в вашем случае, вы можете реально использовать только по e за раз. Но концептуально каждая машина будет иметь свою клавиатуру, экран и процессор, поэтому все методы должны быть экземплярами.

Это означает, что вам нужно создать машину в main:

UNInterfaceTest machine = new UNInterfaceTest(); 
machine.run(); 

Конечно, вы сейчас писать непосредственно на стандартный вывод (не уверен, что Input читает). Лучшая конструкция может состоять в том, чтобы передать в Writer конструктору UNInterfaceTest, а затем записать на это (вместо System.out). Это позволяет каждой машине иметь собственный экран.

Конечно, некоторые из этих сведений могут выходить за рамки заданий. Это должно быть полезно знать.

2

Метод static не связан с экземпляром класса.
Любой метод, который не использует или не модифицирует экземпляр класса, в котором он определен, должен быть static.

0

Короткий ответ: Это потому, что вы не используете свои объекты. Вы можете создать экземпляр своего класса в качестве объекта и запустить его с помощью

 

UNInterfaceTest unit = new UNInterfaceTest(); 
unit.run(); 
 

Использование нестатических методов.

5

Подумайте о классе как резаке для печенья, а также в качестве файла cookie (экземпляр класса). Статические методы - это методы, относящиеся к самому классу (режущему файлу cookie), как в MyClass.myMethod();, тогда как нестатические методы являются частью экземпляров класса (куки), как в new MyClass().myMethod();.

В вашем случае статические методы будут специфичны для билетных машин в целом, например, для расчета того, сколько денег следует вычесть. Нестатические методы могут быть специфическими для одного счетчика билетов, например, отслеживать, сколько билетов оно обработало.

Вот еще информация:
http://cscie160-distance.com/nonstatic.html

+1

+1, мне нравится аналогия. – Sapph

Смежные вопросы