了解对象构造和赋值

时间:2015-12-27 07:34:28

标签: java

import java.util.*;

public class DisplayDeck {
    public static void main(String[] args) {
        Deck deck = new Deck();
        for (int suit = Card.DIAMONDS; suit <= Card.SPADES; suit++) {
            for (int rank = Card.ACE; rank <= Card.KING; rank++) {
                Card card = deck.getCard(suit, rank);
                System.out.format("%s of %s%n",
                    card.rankToString(card.getRank()),
                    card.suitToString(card.getSuit()));
            }
        }
    }
}

Deck deck = new Deck();

我可以理解它正在尝试使用对象层实例化类Deck。但是谈到

Card card = deck.getCard(suit, rank);

其中Card是一个类,没有与它关联的new运算符,但它等同于其他东西,尽管LHS似乎更像是实例化类卡。

4 个答案:

答案 0 :(得分:0)

您应该查看Deck课程,了解deck.getCard(suit,rank)的作用。它可能要么创建一个新的Card实例(使用new),要么检索对Card实例中存储的现有Deck实例的引用。

答案 1 :(得分:0)

getCard类中有Deck个方法,它接受 suit rank 参数(整数),然后以某种方式接受某种logic返回Card类的实例。

答案 2 :(得分:0)

看起来令人困惑的是分配对象引用的概念。有关详细说明,请参阅this link

&#34; LHS&#34;您引用的(Card card)是赋值语句的左侧。右侧是一个方法调用,它返回一个对象引用(然后该方法返回的引用被赋值给左侧的变量card)。方法(getCard())可能会创建其返回引用的对象,但看起来更像是Card对象可能由Deck()构造函数创建,并且可能存储在某种Map中以供查找。每次调用getCard()时创建一个新的Card对象都是低效的。

答案 3 :(得分:-1)

DIAMONDS等常量(public static final int DIAMONDS = 1; // or similar)在Card类中定义。由于它们是静态的,即使没有卡的实例也存在。