Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Это немного зависит от того, какую функцию вы используете.
Функции построения в морском море в целом разделены на два класса
regplot
, boxplot
, kdeplot
и многие другие lmplot
, factorplot
, jointplot
и один или два других Первая группа идентифицируется путем принятия явного аргумента ax
и возвращения объекта Axes
. Как можно предположить, вы можете использовать их в «объектно-ориентированном» стиле, передав им Axes
:
f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)
Функции уровня осей будут только рисовать на Axes
и не будут в противном случае беспорядок с фигурой, поэтому они могут прекрасно сосуществовать в объектно-ориентированном скрипте matplotlib.
Вторая группа функций (уровень уровня) отличается тем фактом, что полученный график может потенциально включать несколько Оси, которые всегда организованы «осмысленным образом». Это означает, что функции должны иметь полный контроль над фигурой, поэтому невозможно построить, скажем, lmplot
, на тот, который уже существует. Вызов функции всегда инициализирует фигуру и устанавливает ее для конкретного графика.
Однако, как только вы вызвали lmplot
, он вернет объект типа FacetGrid
. Этот объект имеет некоторые методы работы на полученном графике, которые немного знают о структуре графика. Он также предоставляет базовую фигуру и массив осей в аргументах FacetGrid.fig
и FacetGrid.axes
. Функция jointplot
очень похожа, но она использует объект JointGrid
. Таким образом, вы все равно можете использовать эти функции в объектно-ориентированном контексте, но вся ваша настройка должна появиться после того, как вы вызвали функцию.