在我的应用程序中使用默认和非默认构造函数

时间:2014-03-20 10:45:12

标签: java constructor

我是java新手,对默认和非默认构造函数有疑问。我的教授希望我们使用默认构造函数来创建对象BOOK1,然后使用BOOK2,BOOK3和BOOK4的非默认构造函数。我知道构造函数用于创建对象,但我想我不明白我应该如何区分这两者。我的类代码如下,其中我有默认和非默认构造函数:

import java.text.DecimalFormat;

public final class BOOKItem {

    DecimalFormat intFormat = new DecimalFormat("000");
    DecimalFormat doubleFormat = new DecimalFormat("$#,##0.00");

    private int bookID;
    private int numberInStock;
    private double price;
    private double totalValueOfStock;
    private int code;
    private String genre = "";

    public BOOKItem() {
        bookID = 0;
        numberInStock = 0;
        price = 0;
        code = 0;
    }

    public BOOKItem(int newID, int newStock, double newPrice, int newCode) {

        setID(newID);
        setStock(newStock);
        setCode(newCode);
        setPrice(newPrice);


    }

    public void setStock (int newStock) {

        if (newStock >= 1 && newStock <=5000) {
            numberInStock = newStock;
        }
         else {
            numberInStock = 0;
        }
  }

public void setCode (int newCode) {

    if (newCode > 0) {
        code = newCode;
    }
}

public void setID (int newID) {
    if (newID >=11 && newID <= 111111) {
        bookID = newID;
    }
    else {
        bookID = 0;
    }
    }

public void setPrice (double newPrice) {
    if (newPrice >= 1.0 && newPrice <=150.0) {
        price = newPrice;
    }
    else {
        price = 0;
    }
}

public int getID () {

return bookID;

}

public int getNumberInStock () {
    return numberInStock;
}

public int getCode () {
    return code;
}

public double getPrice () {
    return price;
}

public double calcTotalValue () {
    totalValueOfStock = numberInStock * price;
    return totalValueOfStock;
}

public double getTotalValue () {
    return totalValueOfStock;
}

   public void display() {
       switch (code)
    {   
       case 1:               
         genre = "Romance";
           break;
       case 2: 
         genre = "Adventure";
           break;
       case 3:
         genre = "Sci-Fi";
           break;
       case 4:
         genre = "Mystery";
           break;
    }               
   System.out.println("Display:");
   System.out.println("Book ID: " + bookID + " NumInStock: " + numberInStock + " Code: " + genre + " Price: " + 
                      price + " TotalStockValue: " + calcTotalValue());
   }



}

这是我的应用程序使用构造函数(抱歉类代码中断,我不知道它为什么这样做):

import java.util.Scanner;

public class Project7 {

public static void main(String[] args) {

    int bookID;
    int numberInStock;
    double price;
    int code;

    Scanner keyboard = new Scanner(System.in);

    BOOKItem BOOK1, BOOK2, BOOK3, BOOK4;
    BOOK1 = new BOOKItem();
    BOOK2 = new BOOKItem();
    BOOK3 = new BOOKItem();
    BOOK4 = new BOOKItem();

    System.out.println("Enter in a blank separated list: ID, number in stock, quality, price" + 
                       "- use a BAD ID(<11 or >111111)");

    bookID = keyboard.nextInt();
    numberInStock = keyboard.nextInt();
    code = keyboard.nextInt();
    price = keyboard.nextDouble();

    BOOK1.setID(bookID);
    BOOK1.setStock(numberInStock);
    BOOK1.setCode(code);
    BOOK1.setPrice(price);
    BOOK1.display();

    System.out.println("Enter in a blank separated list: ID, number in stock, quality, price" + 
                       "- use a BAD STOCK(>5000)");

    bookID = keyboard.nextInt();
    numberInStock = keyboard.nextInt();
    code = keyboard.nextInt();
    price = keyboard.nextDouble();

    BOOK2.setID(bookID);
    BOOK2.setStock(numberInStock);
    BOOK2.setCode(code);
    BOOK2.setPrice(price);
    BOOK2.display();

    System.out.println("Enter in a blank separated list: ID, number in stock, quality, price" + 
                       "- use a BAD PRICE(>150.0)");

    bookID = keyboard.nextInt();
    numberInStock = keyboard.nextInt();
    code = keyboard.nextInt();
    price = keyboard.nextDouble();

    BOOK3.setID(bookID);
    BOOK3.setStock(numberInStock);
    BOOK3.setCode(code);
    BOOK3.setPrice(price);
    BOOK3.display();

    System.out.println("Enter in a blank separated list: ID, number in stock, quality, price" + 
                       "- use ALL GOOD DATA");

    bookID = keyboard.nextInt();
    numberInStock = keyboard.nextInt();
    code = keyboard.nextInt();
    price = keyboard.nextDouble();

    BOOK4.setID(bookID);
    BOOK4.setStock(numberInStock);
    BOOK4.setCode(code);
    BOOK4.setPrice(price);
    BOOK4.display();






 }
}

我是否在创建对象时做错了什么?如何使用BOOK2,BOOK3和BOOK4的非默认构造函数?我创建了它,但也许我使用它不正确。任何反馈将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用时

 BOOK1 = new BOOKItem();

您正在调用默认构造函数(没有任何参数的构造)

在获取用户输入后,您将调用非默认构造函数

bookID = keyboard.nextInt();
numberInStock = keyboard.nextInt();
code = keyboard.nextInt();
price = keyboard.nextDouble();

BOOK2 = new BOOKItem(bookID, numberInStock, price, code);

使用上面的代码使用参数化构造函数(非默认构造函数)

这称为构造函数重载。

因此,对于要分配默认值的对象,可以调用默认构造函数 对于对象,您可以使用在参数中定义的构造函数中发送变量的信息,以指定该值