почему мы не можем добавлять элементы в ArrayList вне метода main()?

48
7

public class first {

ArrayList<String> al= new ArrayList<String>();
al.add("Batman"); //it doesn't work
public static void main(String[] args) {

}
}

Почему он не позволяет использовать метод добавления вне основного?

спросил(а) 2016-04-21T06:37:00+03:00 3 года, 7 месяцев назад
7
Решение
45

Это базовая концепция Java или архитектуры Java, вы можете объявлять только переменные и методы в классе. Вся функциональная работа должна выполняться только в функциях.

Вы можете ссылаться на эту ссылку для определения класса, http://www.tutorialspoint.com/java/java_object_classes.htm

ответил(а) 2016-04-21T08:04:00+03:00 3 года, 7 месяцев назад
Еще 6 ответов
59

Я не знаю, почему создатели языка Java пришли к выводам, которые они сделали, поэтому, к сожалению, лучший ответ, который я могу дать, это: Это невозможно, потому что язык Java (компилятор) не позволяет вам это делать.

То, что вы можете сделать, - это объединить этот вызов метода в фигурные скобки, а затем он становится блоком инициализатора.


Это аналогичный вопрос: почему этот Java-код находится в фигурных скобках ({}) вне метода?

ответил(а) 2016-04-21T07:01:00+03:00 3 года, 7 месяцев назад
45

В соответствии с Java Architecture вы не можете написать логический оператор вне метода.

ответил(а) 2017-04-24T13:45:00+03:00 2 года, 7 месяцев назад
43

Шаблоны, такие как метод фабрики или свободный строитель, могут быть очень полезны в java, если конструктор не существует, поскольку они позволяют вам объявлять, создавать экземпляры и инициализировать объекты в одном выражении.

Вот примеры для вашего случая:

List<String> l = java.util.Arrays.asList("Batman");

ArrayList<String> al = new ArrayList<String>(java.util.Arrays.asList("Batman"));

ArrayList<String> al = com.google.common.collect.Lists.newArrayList("Batman");

В последнем примере используется библиотека Guava. Он имеет фабричные методы и/или сборщики для всех видов коллекций java.

ответил(а) 2016-04-21T08:35:00+03:00 3 года, 7 месяцев назад
45

"al" - это переменная экземпляра класса "first" и не объявляя объект класса "первым", вы не можете добавить ничего внутри даже основной функции.

Если вам нужно добавить что-либо за пределами основной функции, не создавая объект класса, тогда этот экземпляр должен быть статическим, а затем вы можете добавить строку, поместив ее в фигурные скобки.

ArrayList<String> al = new ArrayList<>();

{
al.add("names");
}

ответил(а) 2016-04-21T07:22:00+03:00 3 года, 7 месяцев назад
45

У вас отсутствуют скобки.

Попробуйте этот код:

public class first {

ArrayList<String> al= new ArrayList<String>();
{
al.add("Batman");
}

public static void main(String[] args) {

}
}

ответил(а) 2016-04-21T07:03:00+03:00 3 года, 7 месяцев назад
47

class имеет следующую структуру: attributes (ваш arraylist), за которыми следуют functions (например, main()).

Чтобы делать какие-либо манипуляции с attribute, это должно выполняться внутри function. Это делается так, потому что он был разработан таким образом.

ответил(а) 2016-04-21T06:44:00+03:00 3 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема