我有以下类,下面列出了数组的静态字段。 您能否告诉/解释如何创建构造函数来初始化所有数组并将其传递给public static void BookInfo方法。非常感谢任何帮助!
public class BookInfo {
// Global arrays accessible by all methods
public static String[] isbnInfo = {
"978-0060014018",
"978-0449221431",
"978-0545132060",
"978-0312474881",
"978-0547745527"
};
public static String[] bookTitleInfo = {
"The Greatest Stories",
"The Novel",
"Smile",
"The Bedford Introduction to Drama",
"AWOL on the Appalachian Trail"
};
public static String[] authorInfo = {
"Rick Beyer",
"James A. Michener",
"Raina Telgemeier",
"Lee A. Jacobus",
"David Miller"
};
public static String[] publisherInfo = {
"HerperResource",
"Fawcett",
"Graphix",
"Bedford St. Martins",
"Mariner Books"
};
public static String[] dateAddedInfo = {
"05/18/2003",
"07/07/1992",
"02/01/2010",
"09/05/2008",
"11/01/2011"
};
public static int[] qtyOnHandInfo = {7, 5, 10, 2, 8};
public static double[] wholesaleInfo = {12.91, 7.99, 6.09, 54.99, 10.17};
public static double[] retailInfo = {18.99, 3.84, 4.90, 88.30, 14.95};
public static void BookInfo() {
System.out.println(" Serendipity Booksellers");
System.out.println(" Book Information\n");
for(int i = 0; i < isbnInfo.length; i++){
System.out.println("ISBN: " + isbnInfo[i]);
System.out.println("Title: " + bookTitleInfo[i]);
System.out.println("Author: " + authorInfo[i]);
System.out.println("Publisher: " + publisherInfo[i]);
System.out.println("Date Added: " + dateAddedInfo[i]);
System.out.println("Quantity-On-Hand: " + qtyOnHandInfo[i]);
System.out.println("Wholesale Cost: $ " + wholesaleInfo[i]);
System.out.println("Retail Price: $ " + retailInfo[i]);
System.out.println();
}
}
}
答案 0 :(得分:6)
您要做的是使用static
块。在运行任何其他代码之前,初始化static
数据。 constructor
仅在实例化对象时被调用,并且它们被称为每个时间,该类型的对象也被实例化,static
在应用程序运行时被初始化一次。
public static final String[] ISBN_INFO;
static
{
BookInfo.ISBN_INFO = {
"978-0060014018",
"978-0449221431",
"978-0545132060",
"978-0312474881",
"978-0547745527" };
// do the same thing with the other blocks
}
同样制作static
变量final
也是一个好主意。
答案 1 :(得分:3)
可以在声明或静态块中初始化数组,不需要为此使用构造函数。例如:
private static String[] array = {"a", "b", "c"};
或者像这样:
private static String[] array;
static {
array = new String[] {"a", "b", "c"};
}
实际上,在构造函数中初始化它可能是错误,每次通过调用构造函数创建新实例时都不应更改静态成员。
答案 2 :(得分:2)
静态变量在类加载时加载到内存中。那时候他们只有initialized
。您不需要在构造函数中初始化它们。
但是,您可以使用static initializer block
初始化它们。
private static int[] arr;
static {
// initialize your arrays here in static initializer block.
arr = new int[5];
arr[0] = 5; arr[1] = 10; ... so on
}
在类加载时, Static initializer
块执行一次。它负责初始化类的静态变量。
此外,静态变量在类的所有实例之间共享。因此,您通过一个实例对它们所做的任何更改都将反映在所有实例中。因此,在构造函数中初始化它们没有意义。