Java中的主要方法必须是getter/setter吗?

0 java getter setter program-entry-point getter-setter

最近,我在计算机科学课程中完成了一项任务,创建了一个由所述类构建的两个对象的类.

教授通过电子邮件批评的内容如下:"构造函数,getter和setter中的sysouts应该是主要方法."

他不会说英语,所以没有多大帮助.有人知道他在谈论我的代码时到底在说什么吗?这是我提交的代码:

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

}
Run Code Online (Sandbox Code Playgroud)

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

Vin*_*igh 5

他指的是你班级的可重用性.他希望你公开getter,这样你就可以将print语句放在main方法中了.

为什么?

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

因此,最好将记录保存在main方法中,因此Book可以重用于其他任务.

干将允许您访问的值,同时也让你的领域private,确保他们可以修改的唯一方法就是把你暴露的行为:turnForward,turnBack,等.

改善您的代码

翻页时,当前页面应该更改.它保持不变是没有意义的.

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

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

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

public int getCurrentPage() {
    return currentPage;
}
Run Code Online (Sandbox Code Playgroud)

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

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.");
}
Run Code Online (Sandbox Code Playgroud)