java中的静态和非静态方法

时间:2011-01-03 01:20:11

标签: java class methods static-methods

  

可能重复:
  When should a method be static?

我正在尝试为管/地铁票机制作接口类。不是真的,而是计算机科学模块的课程。我不明白何时使用静态方法。我不太了解计算机科学,但主要方法似乎使用静态。

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();
 }
}

4 个答案:

答案 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();

使用非静态方法。