Установка значений в массив объектов

1

Я пересматриваю свою книгу Java, чтобы убедиться, что у меня есть четкое понимание объектов и основ Java в целом. Я наткнулся на этот фрагмент кода из книги, в которой я читал Head First: Java 2nd edition (2005)

 class Book {   

     String title;
     String author; 

 }

 class Main {

    public static void main(String args[]) {    

        int x = 0;      

        Book[] myBooks = new Book[3];
        myBooks[0] = new Book();
        myBooks[1] = new Book();
        myBooks[2] = new Book();
        myBooks[0].title = "Example title xx";
        myBooks[1].title = "Example title cc";
        myBooks[2].title = "Example title yy";
        myBooks[0].author = "Example author xx";
        myBooks[1].author = "Example author cc";
        myBooks[2].author = "Example author yy";    

        while (x < 3) {     

            System.out.print(myBooks[x].title);
            System.out.print(", author ");
            System.out.println(myBooks[x].author);
            x = x + 1;  

        }       
    }   
}

Я не совсем понимаю синтаксис myBooks[0].title= "Example title xx" Я признаю, что я не очень разбираюсь в массивах и как они работают, но не лучше ли перебирать массив и установить все поля объектов с помощью методов setter?

Я думаю, что это так

Из моего ограниченного понимания Этот конкретный метод назначения значений этим полям связан с объемом этих двух классов. Точно так же вы должны использовать имена статических методов вместо того, чтобы сначала создавать объект своих соответствующих классов, но вместо этого статические переменные.

Это кажется очень тривиальным, но для меня очень важно понять и понять идею. Надеюсь, ты сможешь это понять.

  • 0
    isn't it a better practice to loop through the array and set all the object fields with setter methods? Нет, не в этом случае. Вам нужно проверить переменную итерации (например, i in for (int i = .....) ), чтобы узнать, по какому индексу вы находитесь в данный момент, чтобы установить правильное значение. Текущий способ использования индекса исправления здесь чище.
Теги:
object
arrays

3 ответа

3
Лучший ответ

Во-первых, позвольте переписать свою программу без массива:

Book myBooks0, myBooks1, myBooks2;
myBooks0 = new Book();
myBooks1 = new Book();
myBooks2 = new Book();
myBooks0.title = "Example title xx";
myBooks1.title = "Example title cc";
myBooks2.title = "Example title yy";
myBooks0.author = "Example author xx";
myBooks1.author = "Example author cc";
myBooks2.author = "Example author yy";  

Если вы понимаете переменные Java, ссылающиеся на классы cusom, это не должно быть никакой тайной.

Затем вернемся к вашему массиву:

Book[] myBooks = new Book[3];

Он заменяет три именованных переменных выше одной переменной массива, поэтому теперь вместо написания myBooksX мы пишем myBooks[X].

Это большая разница между ними. Преимущество массива состоит в том, что X может быть переменным или целочисленным выражением, которое оценивается до 0, 1 или 2, тогда как с отдельными переменными число должно быть жестко запрограммировано.

  • 0
    Большое спасибо. Я должен был указать, что моя главная проблема была с "." часть. Но ты объяснил суть этого мне. У вас есть какие-либо ресурсы, которые я мог бы использовать, чтобы узнать больше об этом?
  • 0
    @Lotix Книга, которую вы имеете, является довольно хорошим ресурсом. Хороший способ углубить ваше понимание предмета - выполнять упражнения после глав, не глядя на ответы, сравнивая ваш код с их и понимая различия.
1

когда вы работаете с массивами, вы должны понимать концепцию.

Book[] mybooks = new Book[3]

Это означает, что в типе книги будет массив. Book[0] означает, что это ссылка на реальный объект в памяти (как пульт дистанционного управления объектом).

Поэтому, когда вы вызываете mybook[0].title, это означает, что вы вызываете метод title Book[0] (как будто нажимаете кнопку на пульте дистанционного управления Book [0].

1
  1. myBooks[0].title = "Example title xx"
    

    присвоит строку полю title 1-го элемента массива

  2. Не лучше ли перебирать массив и устанавливать все поля объекта с помощью методов setter?

    Вообще-то да.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню