Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Я должен был поддержать код Java, где большая часть Обработки исключений была похожа:
catch( Exception e ) {}
Подобный Вашему, но продвинутый далее:
Использование класса (статические) переменные, когда запрос определил объем переменной, были корректной вещью сделать в действии Struts.: O
Это было на самом деле развернуто в производстве в течение нескольких месяцев и никого когда-либо, замечал вещь, пока я не рассматривал код один день.
@madlep Точно! Части сообщества Java действительно идут за борт с экстремальными абстракциями и безумно глубокими иерархиями классов. У Steve Yegge было хорошее сообщение в блоге об этом несколько лет назад: Выполнение в Королевстве Существительных .
Абстракция функциональности в класс библиотеки, который никогда не будет снова использоваться, поскольку это настолько характерно для исходной проблемы, решаемой . Следовательно окончание с огромным количеством классов библиотеки, которые никто никогда не будет использовать и которые абсолютно неясный две полезных утилиты Вы на самом деле делаете , имеет (т.е. CollectionUtils
и IOUtils
).
... паузы для дыхания...
абстракция Излишества объектно-ориентированного проектирования (Удаленный так 10k только).
Тот же ответ на подобном потоке (относится ко всем языкам, которые разрешают объектно-ориентированное проектирование).
Разделение на подклассы, когда Вы, как не предполагается, например, вместо того, чтобы использовать состав, агрегирование, и т.д.
Редактирование: Это - особый случай молоток .
Наш интерн использовал static
модификатор для хранения в настоящее время зарегистрированного пользователя в приложении Шва.
class Identity{
...
public static User user;
...
}
class foo{
void bar(){
someEntity.setCreator(Identity.user);
}
}
, Конечно, это работало, когда он протестировал его:)
Смешная мания OO с классом hierachies 10 + уровни глубоко.
Это - то, куда названия как DefaultConcreteMutableAbstractWhizzBangImpl
происходят от. Просто попытайтесь отладить такой код - Вы будете свистеть вверх и вниз по дереву класса в течение многих часов.
Худшая практика Java, которая охватывает почти всех других: Глобальное изменяемое состояние.
Я ненавижу его, когда люди создают интерфейсы только для зависания ряда констант на:
public interface InterfaceAntiPattern {
boolean BAD_IDEA = true;
int THIS_SUCKS = 1;
}
— Интерфейсы для определения поведенческих контрактов, не механизма удобства для включения констант.
Не связанный строго с Java, но вызыванием дорогой функции много раз вместо того, чтобы хранить результат, когда Вы будете знать, это не изменится. Пример:
if (expensiveFunction() > aVar)
aVar = expensiveFunction();
for (int i=0; i < expensiveFunction(); ++i)
System.out.println(expensiveFunction());
Как только я обнаружил исключение «singleton»:
class Singletons {
public static final MyException myException = new MyException();
}
class Test {
public void doSomething() throws MyException {
throw Singletons.myException;
}
}
Один и тот же экземпляр исключения генерировался каждый раз ... с точно такая же трассировка стека, которая не имела ничего общего с реальным потоком кода: - (
Мой любимый алгоритм сортировки, любезно предоставленный бригадой седобородых:
List needsToBeSorted = new List ();
...blah blah blah...
Set sorted = new TreeSet ();
for (int i = 0; i < needsToBeSorted; i++)
sorted.add (needsToBeSorted.get (i));
needsToBeSorted.clear ();
for (Iterator i = sorted.iterator (); i.hasNext ();)
needsToBeSorted.add (i.next ());
По общему признанию, это сработало, но в конце концов я убедил его, что, возможно, Collections.sort будет намного проще.
Однажды мне пришлось исследовать веб-приложение, в котором ВСЕ состояние сохранялось на веб-странице, отправляемой клиенту, а не состояние на веб-сервере.
Хотя хорошо масштабируется :)
Шесть действительно плохих примеров;
System.exit
без предупреждения. например if (properties.size ()> 10000) System.exit (0);
глубоко в
библиотека. synchronized ("one") {}
. синхронизированный (объект) {объект = ...; }
. попробуйте {Integer i = null; i.intValue (); } catch (NullPointerException e) {e.printStackTrace (); }
. new Integer (text) .intValue () или еще хуже, new Integer (0) .getClass ()
API, требующий от вызывающего абонента:
Foobar f = new Foobar(foobar_id);
f = f.retrieve();
Было бы лучше использовать любое из следующего:
Foobar f = Foobar.retrieve(foobar_id);
или
Foobar f = new Foobar(foobar_id); // implicit retrieve
или
Foobar f = new Foobar();
f.retrieve(foobar_id); // but not f = ...
Ошибка младших программистов: излишнее использование переменных-членов вместо локальных.
Пример Java EE:
Запуск потоков в сервлетах или EJB (например, для запуска асинхронной обработки задач).
Это нарушает масштабируемость вашего приложения Java EE. Вы не должны возиться с потоками в компонентах Java EE, потому что сервер приложений должен управлять этим за вас.
Мы реорганизовали это, заставив сервлет поместить сообщение в очередь JMS и написать управляемый сообщениями bean-компонент. для обработки задачи асинхронной обработки.
Создание обработчиков и мутаторов для всех частных переменных, не задумываясь, иногда автоматически.
Инкапсуляция была изобретена не просто так .
Defining the logic using exceptions where a for-loop or any form of loop would suffice.
Example:
while(i < MAX_VALUE)
{
try
{
while(true)
{
array[j] = //some operation on the array;
j++;
}
}
catch(Exception e)
{
j = 0;
}
}
Serious, I know the guy who wrote this code. I reviewed it and corrected the code :)
Не закрывать соединения с базой данных, дескрипторы файлов и т.д. в finally {}
Excesive focuse on re-using objects that leads to static things everywhere. (Упомянутое повторное использование может быть очень полезным в некоторых ситуациях.)
Java имеет встроенный сборщик мусора, если вам нужен объект, создайте новый.
Я видел эту строку пару минут назад:
Short result = new Short(new Integer(new Double(d).intValue()).shortValue());