How to use constructor to initialize java static array?

I have the following class listed below with a static field of arrays. Could you tell / explain how I can create a constructor to initialize all arrays and pass it to the public static BookInfo method. Any help is much appreciated!

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(); } } } 
+4
source share
3 answers

What you want to do is use the static block. static data is initialized before any other code is run. constructor is called only when an object is instantiated and each is called, when an object of this type is also created, static initialized once when the application starts.

 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 } 

It's also nice to make your static final variables.

+6
source

You can initialize an array in a declaration or in a static block; you do not need to use a constructor for this. For instance:

 private static String[] array = {"a", "b", "c"}; 

Or like this:

 private static String[] array; static { array = new String[] {"a", "b", "c"}; } 

In fact, initializing it in the constructor may be a mistake, the static member should not be changed every time a new instance is created, invoking the constructor.

+3
source

Static variables are loaded into memory during class loading. And at that time only they were initialized . You do not need to initialize them in the constructor.

However, you can use the static initializer block to initialize them.

 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 } 
Block

Static initializer is executed once during class loading. It takes care of initializing your static class variables.

In addition, static variables are distributed among all instances of the class. Thus, any changes you make in one copy will be reflected in all copies. Thus, it makes no sense to initialize them in the constructor.

+2
source

Source: https://habr.com/ru/post/1440562/


All Articles