Java类&;对象,我能把这个编码得更好吗?

Java类&;对象,我能把这个编码得更好吗?,java,Java,我为Author和Book编写了两个类,然后将Author包含在Book类中。这里没有任何用户输入,只是一种让我了解Java类的方法。在我的驱动程序中,我试图创建book对象来显示细节。细节如预期的那样结合和显示,但我觉得有更好的方法来做到这一点。你有什么建议吗 3个文件: BookDriver.java import java.util.Scanner; import java.util.*; import java.io.*; public class BookDriver{ public

我为Author和Book编写了两个类,然后将Author包含在Book类中。这里没有任何用户输入,只是一种让我了解Java类的方法。在我的驱动程序中,我试图创建book对象来显示细节。细节如预期的那样结合和显示,但我觉得有更好的方法来做到这一点。你有什么建议吗

3个文件:

BookDriver.java

import java.util.Scanner;
import java.util.*;
import java.io.*;

public class BookDriver{
public static void main(String[] args) {

    Scanner userKeyboardInput = new Scanner(System.in);
    System.out.println("");
    System.out.println("===========================");
    System.out.println("     Book Driver Output    ");
    System.out.println("          ******           ");  
    System.out.println("        genericCog         ");   
    System.out.println("===========================");
    System.out.println("");
    Book.CreateBook1();
    Book.ShowBook1();
    Book.CreateBook2();
    Book.ShowBook2();
    System.out.println("");
    System.out.println("===========================");
}//END main
}//END class
public class Book {

static String   Title;
static String   Category;
static String   CoverType;
static int      YearPublished;
static int      NumberOfPages;
static String   FirstName;
static String   LastName;
static String   AuthorFullName;

// BOOK 1
static void CreateAuthor1(){
    Author Author1 = new Author();
    FirstName = "J. R. R.";
    LastName = "Tolkien";
    AuthorFullName = Author1.CombineAuthorName(FirstName, LastName);
}
static void CreateBook1() {
    CreateAuthor1();
    Title  = "The Hobbit; or, There and Back Again";
    YearPublished = 1937;
    NumberOfPages = 300;
    Category = "Fantasy";
    CoverType = "Paperback";
}

static void ShowBook1() {
    System.out.println("-----                  -----");
    System.out.println("       Book 1 Details       ");
    System.out.println("-----                  -----");
    System.out.println("Title:      " + Title);
    System.out.println("Author:     " + AuthorFullName);
    System.out.println("Published:  " + YearPublished);
    System.out.println("Pages:      " + NumberOfPages);
    System.out.println("Category:   " + Category);
    System.out.println("Cover Type: " + CoverType);
    System.out.println("");
    System.out.println("############################");
    System.out.println("");

}

// BOOK 2
static void CreateAuthor2(){
    Author Author2 = new Author();
    FirstName = "Christian";
    LastName = "Keur";
    AuthorFullName = Author2.CombineAuthorName(FirstName, LastName);
}

static void CreateBook2() {
    CreateAuthor2();
    Title  = "IOS Programming: The Big Nerd Ranch Guide";
    YearPublished = 2011;
    NumberOfPages = 563;
    Category = "Educational";
    CoverType = "Paperback";
}

static void ShowBook2() {
    System.out.println("-----                  -----");
    System.out.println("       Book 2 Details       ");
    System.out.println("-----                  -----");
    System.out.println("Title:      " + Title);
    System.out.println("Author:     " + AuthorFullName);
    System.out.println("Published:  " + YearPublished);
    System.out.println("Pages:      " + NumberOfPages);
    System.out.println("Category:   " + Category);
    System.out.println("Cover Type: " + CoverType);
    System.out.println("");
    System.out.println("############################");
    System.out.println("");
}
}//END class Book
public class Author {
static String   FirstName;
static String   LastName;
static String   AuthorFullName;

    public String CombineAuthorName (String FirstName, String LastName){
        AuthorFullName = FirstName + " " + LastName;
        return AuthorFullName;
}
}//END class Author
Book.java

import java.util.Scanner;
import java.util.*;
import java.io.*;

public class BookDriver{
public static void main(String[] args) {

    Scanner userKeyboardInput = new Scanner(System.in);
    System.out.println("");
    System.out.println("===========================");
    System.out.println("     Book Driver Output    ");
    System.out.println("          ******           ");  
    System.out.println("        genericCog         ");   
    System.out.println("===========================");
    System.out.println("");
    Book.CreateBook1();
    Book.ShowBook1();
    Book.CreateBook2();
    Book.ShowBook2();
    System.out.println("");
    System.out.println("===========================");
}//END main
}//END class
public class Book {

static String   Title;
static String   Category;
static String   CoverType;
static int      YearPublished;
static int      NumberOfPages;
static String   FirstName;
static String   LastName;
static String   AuthorFullName;

// BOOK 1
static void CreateAuthor1(){
    Author Author1 = new Author();
    FirstName = "J. R. R.";
    LastName = "Tolkien";
    AuthorFullName = Author1.CombineAuthorName(FirstName, LastName);
}
static void CreateBook1() {
    CreateAuthor1();
    Title  = "The Hobbit; or, There and Back Again";
    YearPublished = 1937;
    NumberOfPages = 300;
    Category = "Fantasy";
    CoverType = "Paperback";
}

static void ShowBook1() {
    System.out.println("-----                  -----");
    System.out.println("       Book 1 Details       ");
    System.out.println("-----                  -----");
    System.out.println("Title:      " + Title);
    System.out.println("Author:     " + AuthorFullName);
    System.out.println("Published:  " + YearPublished);
    System.out.println("Pages:      " + NumberOfPages);
    System.out.println("Category:   " + Category);
    System.out.println("Cover Type: " + CoverType);
    System.out.println("");
    System.out.println("############################");
    System.out.println("");

}

// BOOK 2
static void CreateAuthor2(){
    Author Author2 = new Author();
    FirstName = "Christian";
    LastName = "Keur";
    AuthorFullName = Author2.CombineAuthorName(FirstName, LastName);
}

static void CreateBook2() {
    CreateAuthor2();
    Title  = "IOS Programming: The Big Nerd Ranch Guide";
    YearPublished = 2011;
    NumberOfPages = 563;
    Category = "Educational";
    CoverType = "Paperback";
}

static void ShowBook2() {
    System.out.println("-----                  -----");
    System.out.println("       Book 2 Details       ");
    System.out.println("-----                  -----");
    System.out.println("Title:      " + Title);
    System.out.println("Author:     " + AuthorFullName);
    System.out.println("Published:  " + YearPublished);
    System.out.println("Pages:      " + NumberOfPages);
    System.out.println("Category:   " + Category);
    System.out.println("Cover Type: " + CoverType);
    System.out.println("");
    System.out.println("############################");
    System.out.println("");
}
}//END class Book
public class Author {
static String   FirstName;
static String   LastName;
static String   AuthorFullName;

    public String CombineAuthorName (String FirstName, String LastName){
        AuthorFullName = FirstName + " " + LastName;
        return AuthorFullName;
}
}//END class Author
Author.java

import java.util.Scanner;
import java.util.*;
import java.io.*;

public class BookDriver{
public static void main(String[] args) {

    Scanner userKeyboardInput = new Scanner(System.in);
    System.out.println("");
    System.out.println("===========================");
    System.out.println("     Book Driver Output    ");
    System.out.println("          ******           ");  
    System.out.println("        genericCog         ");   
    System.out.println("===========================");
    System.out.println("");
    Book.CreateBook1();
    Book.ShowBook1();
    Book.CreateBook2();
    Book.ShowBook2();
    System.out.println("");
    System.out.println("===========================");
}//END main
}//END class
public class Book {

static String   Title;
static String   Category;
static String   CoverType;
static int      YearPublished;
static int      NumberOfPages;
static String   FirstName;
static String   LastName;
static String   AuthorFullName;

// BOOK 1
static void CreateAuthor1(){
    Author Author1 = new Author();
    FirstName = "J. R. R.";
    LastName = "Tolkien";
    AuthorFullName = Author1.CombineAuthorName(FirstName, LastName);
}
static void CreateBook1() {
    CreateAuthor1();
    Title  = "The Hobbit; or, There and Back Again";
    YearPublished = 1937;
    NumberOfPages = 300;
    Category = "Fantasy";
    CoverType = "Paperback";
}

static void ShowBook1() {
    System.out.println("-----                  -----");
    System.out.println("       Book 1 Details       ");
    System.out.println("-----                  -----");
    System.out.println("Title:      " + Title);
    System.out.println("Author:     " + AuthorFullName);
    System.out.println("Published:  " + YearPublished);
    System.out.println("Pages:      " + NumberOfPages);
    System.out.println("Category:   " + Category);
    System.out.println("Cover Type: " + CoverType);
    System.out.println("");
    System.out.println("############################");
    System.out.println("");

}

// BOOK 2
static void CreateAuthor2(){
    Author Author2 = new Author();
    FirstName = "Christian";
    LastName = "Keur";
    AuthorFullName = Author2.CombineAuthorName(FirstName, LastName);
}

static void CreateBook2() {
    CreateAuthor2();
    Title  = "IOS Programming: The Big Nerd Ranch Guide";
    YearPublished = 2011;
    NumberOfPages = 563;
    Category = "Educational";
    CoverType = "Paperback";
}

static void ShowBook2() {
    System.out.println("-----                  -----");
    System.out.println("       Book 2 Details       ");
    System.out.println("-----                  -----");
    System.out.println("Title:      " + Title);
    System.out.println("Author:     " + AuthorFullName);
    System.out.println("Published:  " + YearPublished);
    System.out.println("Pages:      " + NumberOfPages);
    System.out.println("Category:   " + Category);
    System.out.println("Cover Type: " + CoverType);
    System.out.println("");
    System.out.println("############################");
    System.out.println("");
}
}//END class Book
public class Author {
static String   FirstName;
static String   LastName;
static String   AuthorFullName;

    public String CombineAuthorName (String FirstName, String LastName){
        AuthorFullName = FirstName + " " + LastName;
        return AuthorFullName;
}
}//END class Author
我建议

  • 对于变量和方法名称,您可以使用
    camelcase
    而不是
    TitleCase
  • 当您可以使用实例字段时,不要初始化静态字段
  • 删除不使用的字段。例如,
    Author
    中不需要任何字段
  • 使用构造函数初始化实例值,而不是使用方法重置静态变量。尽量避免可变的静态字段
  • 尽量不要重复你自己
    ShowBook1
    ShowBook2
    几乎完全相同。您可以设置一个包含图书编号的字段
  • 尽量避免初始化过多的类。设置书籍所需的所有数据都可以传入,BookDriver类可以创建许多不同的书籍,而无需更改书籍代码

如果您不想使用这样的静态变量,那么这将更适合于使用。阅读@GenericCog这个问题会在代码审查网站上获得更好的反响,正如有人已经建议的那样。如果您愿意,可以将其从Stack Overflow中删除,并将其发布到CR上,我们很乐意帮助您改进它。对于编码风格(与其他语言相比,java社区非常严格)和OOP,使用
static
而不是
newauthor()
。有了一些基本的写作知识,你肯定会做出很好的代码设计,因为代码本身看起来很有条理。