2016-09-26 73 views
0

我正在閱讀Java How to Program第10版並閱讀前幾章。對於這個例子,我們展示瞭如何確保SecureRandom類,但是有一部分讓我感到困惑。爲什麼你會使用聲明一個對象引用變量static final?

// Fig. 6.8: Craps.java 
// Craps class simulates the dice game craps. 
import java.security.SecureRandom; 

public class Craps 
{ 
    // create secure random number generator for use in method rollDice 
    private static final SecureRandom randomNumbers = new SecureRandom(); 

    // enum type with constants that represent the game status 
    private enum Status { CONTINUE, WON, LOST }; 

    // constants that represent common rolls of the dice 
    private static final int SNAKE_EYES = 2; 
    private static final int TREY = 3; 
    private static final int SEVEN = 7; 
    private static final int YO_LEVEN = 11; 
    private static final int BOX_CARS = 12; 

    // plays one game of craps 
    public static void main(String[] args) 
    { 
     int myPoint = 0; // point if no win or loss on first roll 
     Status gameStatus; // can contain CONTINUE, WON or LOST 

     int sumOfDice = rollDice(); // first roll of the dice 

     // determine game status and point based on first roll 
     switch (sumOfDice) 
     { 
      case SEVEN: // win with 7 on first roll 
      case YO_LEVEN: // win with 11 on first roll 
       gameStatus = Status.WON; 
       break; 
      case SNAKE_EYES: // lose with 2 on first roll 
      case TREY: // lose with 3 on first roll 
      case BOX_CARS: // lose with 12 on first roll 
       gameStatus = Status.LOST; 
       break; 
      default: 
       gameStatus = Status.CONTINUE; // game is not over 
       myPoint = sumOfDice; // remember the point 
       System.out.printf("Point is %d%n", myPoint); 
       break; 
     } 

     // while game is not complete 
     while (gameStatus == Status.CONTINUE) // not WON or LOST 
     { 
      sumOfDice = rollDice(); // roll dice again 

      // determine game status 
      if (sumOfDice == myPoint) // win by making point 
       gameStatus = Status.WON; 
      else if (sumOfDice == SEVEN) // lose by rolling 7 before point 
       gameStatus = Status.LOST; 
     } 

     // display won or lost message 
     if (gameStatus == Status.WON) 
      System.out.println("Player wins"); 
     else 
      System.out.println("Player loses"); 
    } 

    // roll dice, calculate sum and display results 
    public static int rollDice() 
    { 
     // pick random die values 
     int die1 = 1 + randomNumbers.nextInt(6); // first die roll 
     int die2 = 1 + randomNumbers.nextInt(6); // second die roll 

     int sum = die1 + die2; // sum of die values 

     // display results of this roll 
     System.out.printf("Player rolled %d + %d = %d%n", die1, die2, sum); 

     return sum; 
    } 
} // end class Craps 

從書,它提到,它被聲明爲類的私有靜態最終變量,SecureRandom使一個物體總是被用來調用方法,rollDice()。如果有一個包含Craps類的多個實例的程序,它們將共享這一個對象。我的問題是有沒有機會需要類SecureRandom的多個實例?下一個問題將是因爲這是一個對象引用變量SecureRandom,爲什麼它仍然被稱爲Craps的變量?

回答

1

下一個問題將是,因爲這是一個SecureRandom的對象引用變量,爲什麼它仍然被稱爲骰子的變量?

你的可變randomNumbersCraps類的成員,並且它的類型是SecureRandom的。即它被定義爲用作SecureRandom類型的擲骰子類的變量。它被定義爲靜態意味着將只有一個randomNumbers的副本,並且將由所有Craps

相關問題