Страницы

Поиск по вопросам

среда, 11 декабря 2019 г.

Создание объекта класса внутри него же самого

#java


Разбираюсь в Java и возник вопрос: 
Если делаю массив connections статическим и использую его в методе getElementOfArray()
то при System.out.println(getElementOfArray()); он выводит (последний) элемент массива
(что и нужно). Но если я хочу чтобы массив принадлежал объекту а не классу, и создаю
объект ConnectionManagerдля доступа к массиву, то System.out.println(getElementOfArray());
выводит только null.

Вопрос: 


Какой создается объект, при ConnectionManager cm = new ConnectionManager();
Будет ли этот объект начинаться с psvm
Почему все-таки со статическим массивом все проходит хорошо, а при создании объекта
- нет?


Спасибо огромное

public class ConnectionManager {
    private Connection1[] connections = new Connection1[5]; //Массив для Connection1
    private static int counter;

    private void fillArray() {
        for (int i = 0; i < connections.length; i++) {    //Наполняет массив
            connections[i] = Connection1.getInstance();   //элементами Connection1
            counter++;
            System.out.println(connections.getClass() + " Element added");
        }
    }

    static Connection1 getElementOfArray(){
        ConnectionManager cm = new ConnectionManager();     //Cоздание объекта
        if(counter > 0){
            return cm.connections[--counter];
        } else {
            return null;
        }
    }

    public static void main(String[] args) {
        ConnectionManager cm = new ConnectionManager();
        cm.fillArray();
        System.out.println(getElementOfArray());
    }
}

    


Ответы

Ответ 1



У вас создается два объекта ConnectionManager. В методе main один объект, а в методе getElementOfArray другой, соответственно, если массив не статический происходит обращение к разным массивам. Т.е. метод fillArray заполняет массив другого объекта, к которому не происходит обращение. Надеюсь, понятно объяснил =)

Ответ 2



У тебя массив не заполняется. Здесь ты создаешь объект и заполняешь в нем массив: public static void main(String[] args) { ConnectionManager cm = new ConnectionManager(); cm.fillArray(); System.out.println(getElementOfArray()); } А здесь ты создаешь новый объект и ничего в нем не заполняешь: static Connection1 getElementOfArray(){ ConnectionManager cm = new ConnectionManager(); //Cоздание объекта if(counter > 0){ return cm.connections[--counter]; } else { return null; } }

Комментариев нет:

Отправить комментарий