当前位置: 首页 > 知识库问答 >
问题:

在Java中,getter/setter必须在main方法中吗?

穆阳嘉
2023-03-14

最近,我在一门计算机科学课程上做了一个作业,要创建一个包含两个对象的类。

教授通过电子邮件批评如下:“构造函数、getter和setter中的sysout应该是主要方法。”

他英语说得不太好,所以这没什么帮助。有人知道关于我的代码他到底在说什么吗?这是我提交的代码:

public class Book {

int currentPage;
int nextPage;
int lastPage;

public Book(int pageNumber) {
    currentPage = pageNumber;
    System.out.println("You've opened the book to page " + currentPage + ".");
}

public void turnForward(int numTurned) {
    nextPage = numTurned + currentPage;
    System.out.println("You've turned forward to page " + nextPage + ".");
}

public void turnBack(int numTurned) {
    lastPage = nextPage - numTurned;
    if (lastPage <= 1) {
        lastPage = 1;
        System.out.println("You've turned back to the first page.");
    }else {
        System.out.println("You've turned back to page " + lastPage + ".");
    }
}

public static void main(String[] args) {

  Book bigJava = new Book(5);
  bigJava.turnForward(2);
  bigJava.turnBack(8);

  Book earlyObjects = new Book(22);
  earlyObjects.turnForward(12);
  earlyObjects.turnBack(17);
}

}

是否必须将getter/setter放在main方法中?如果我这样做,代码实际上不会运行。

共有1个答案

厍彭薄
2023-03-14

他指的是你的类的可重用性。他希望你公开getter,这样你就可以把打印语句放在main方法中。

如果其他人想使用您的类,或者您想将其重新用于其他项目,则不应将内容打印到控制台。并非所有可能使用Book的情况都应该在控制台上打印内容。

因此,最好将日志记录保留在main方法中,这样Book可以重用于其他任务。

getter允许您在访问这些值的同时仍然保持字段的私有性,确保修改它们的唯一方法是通过您公开的行为:转发返回,等等。。

当你翻过一页时,当前页应该会改变。保持不变是没有意义的。

你的行为方法应该是改变currentPage变量:

public void turnForward(int pages) {
    currentPage += numOfPages;
}

public void turnBack(int numOfPages) {
    currentPage -= numOfPages;
}

public int getCurrentPage() {
    return currentPage;
}

然后,您的主要方法可以翻页,每次翻页时都会记录:

public static void main(String[] args) {
    Book book = new Book(25);

    int startPage = book.getCurrentPage();
    book.turnForward(5);
    int endPage = book.getCurrentPage();

    System.out.println("The book was turned " + endPage - startPage + " pages forward.");
}
 类似资料:
  • 在上面的代码中,为什么在< code>main()中强制提到< code>String args[]以及为什么我们得到< code > "[ljava . lang . String;@174e5edb"作为输出?

  • 问题内容: 我看到成员变量被赋予了私有修饰符,然后使用getter / setter方法只是为了设置和获取变量的值(以标准化的名义)。 然后为什么不将变量本身公开(除了像spring框架这样的案例,该案例依赖于IOC的getter / setter方法)。它达到目的。 在C#中,我看到成员变量的大小写为getter / setter。为什么不将变量本身公开? 问题答案: 为了从一开始就获得 稳定的

  • 问题内容: 我的教授真正强调要通过始终使用访问器和更改器来访问私有实例变量来防止隐私泄漏。但是,我必须在班级中使用班级的getter / setter方法吗? 因此,例如,如果我有以下课程: 我想为此编写一个toString()方法。我可以写: 还是我需要做这样的事情: 问题答案: 您可以任一个。但是,您的教授可能会喜欢使用方法而不是直接访问。这就是为什么。 假设您有一个这样的课程: 很简单,对吧

  • 为了方便起见,我将setter方法返回类型更改为对象,例如: 但在tomcat做出这一改变之后 PropertyNotFoundException: 为了消除这个异常,我将修饰符从private更改为public,但仍然得到相同的错误。所以我有两个问题; null

  • 问题内容: 始终建议使用getter / setter访问私有变量。为什么最好将它们声明为public并对其进行访问。无论如何,我们正在使用getter和setter访问它? 问题答案: @mre的回答非常好,您的问题很重要。总结一下:您将对象的字段设置为私有,以控制其他对象使用它的方式。您的对象使用setter来: 限制和验证传递给设置器的数据 隐藏其内部数据结构(服务对其他对象感兴趣,而不是服