Если у Вас есть фоновая задача, которая будет жить в течение долгого времени, как в течение всего времени жизни Вашего приложения, то создание Вашего собственного потока является разумной вещью. Если у Вас есть короткие работы, которые должны делаться в потоке, затем использовать объединение потока.
В приложении, где Вы создаете много потоков, издержки создания потоков становятся существенными. Используя пул потоков создает потоки однажды и снова использует их, таким образом избегая создания потока наверху.
В приложении, которое я продолжил работать, изменив от создания потоков к использованию пула потоков для недолгих потоков, которым действительно помогают через помещенное из приложения.
Я не согласен с другими плакатами. Допустимо использование пустой строки. Я предпочитаю использовать его, когда это возможно.
В подавляющем большинстве случаев пустая строка и пустая строка представляют одно и то же - неизвестные данные. Представляете ли вы это с помощью null или пустой строки - это вопрос выбора.
В этом и заключается безумие (обычно). Если вы сталкиваетесь с множеством проблем с нулевым указателем, это связано с тем, что вы пытаетесь использовать их до фактического заполнения. Эти проблемы с нулевым указателем - это громкие неприятные предупреждающие сирены, сообщающие вам, где это использование, позволяя вам затем пойти и исправить проблему. Если вы изначально просто установите их пустыми, вы рискуете использовать их вместо того, чего вы на самом деле ожидали.
Абсолютно нет. Пустая строка и пустая строка - это совершенно разные вещи, и вы не должны их путать.
Для дальнейшего пояснения:
Как уже упоминал Юлий, если вы видите много исключений с нулевым указателем, это потому что вы ожидаете, что у вещей будут значения, когда их нет, или вы небрежно инициализируете вещи перед их использованием. В любом случае вам следует потратить время на правильное программирование - убедитесь, что у вещей, которые должны иметь значения, есть эти значения, и убедитесь, что если вы обращаетесь к значениям вещей, которые могут не иметь ценности, вы принимаете это во внимание.
Имеет ли смысл в конкретном случае использовать значение до того, как оно будет установлено в другом месте, и в этом случае вести себя как пустая строка? т.е. действительно ли пустая строка является правильным значением по умолчанию, и имеет ли смысл вообще иметь значение по умолчанию?
Если ответ положительный, то установка в объявлении значения "" будет правильным решением. Если нет, то это рецепт, который усложнит поиск и диагностику ошибок.
Как правило, этого лучше избегать. Пара причин:
Получение исключения NullPointerException обычно является хорошим предупреждением о том, что вы используете переменную раньше, чем должны, или что вы забыли ее установить. Установка его в пустую строку избавит от исключения NullPointerException, но, скорее всего, вызовет другую (и которую будет труднее отследить) ошибку в дальнейшем в вашей программе.
Может быть допустимая разница между нулем и "". Нулевое значение обычно указывает на то, что значение не было установлено или значение неизвестно. Пустая строка означает, что она была намеренно пуста. В зависимости от вашей программы это небольшое различие может быть важным.
Ни за что. Почему ты хочешь это сделать? Это даст неверные результаты. нули и "" "- не одно и то же.
Null лучше, поэтому они называются непроверенными исключениями {исключение нулевого указателя}. Когда генерируется исключение, оно сообщает вам, что вы должны инициализировать его некоторым ненулевым значением, прежде чем вызывать какие-либо методы для него.
Если вы выполняете
private String field1 = "";
, вы пытаетесь подавить ошибку. Позже будет сложно найти ошибку.
Я бы этого не делал, вам нужно знать, правильно ли заполняются ваши экземпляры данными.
Я бы не советовал ни того, ни другого.
Вместо этого вы должны дать вашим полям разумные значения. Если они не должны меняться, я бы сделал их конечными.
public class Foo {
private final String field1;
private final String field2;
public Foo(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
// etc.
}
Не нужно присваивать значения "я еще не инициализирован". Просто присвойте им начальные значения.