Говоря о горе Хуа, я думаю о Юэ Буцюне, нет, о Линху Чонге; когда я говорю о горе Тай, я думаю о Сыма Цяне, чье знаменитое высказывание «все умирают, или тяжелее горы Тай, или легче пера» -провокация. . Это означает, что тайшаньская версия руководства по разработке Java, выпущенная Али, безусловно, является самой важной.
Версия Huashan последняя версия, когда она была обновлена? 13 июня 2019 года, через 10 месяцев, времени не мало, пора обновляться.
Что было обновлено в новой версии? Это видно из официальной истории версий.
01. Выпустите унифицированное решение для кодов ошибок
Для чего используется код ошибки? Ответ — журнал исключений, который нам удобен, чтобы быстро узнать источник ошибки и определить, кто вызвал проблему. На приведенном выше рисунке A указывает, что ошибка исходит от пользователя; есть также уровень B, указывающий, что ошибка исходит из текущей системы; уровень C, указывающий, что ошибка исходит от сторонней службы, такой как CDN. сервер.
У этого решения стоит поучиться. Многие зрелые системы используют коды ошибок. Если вы подключили оплату WeChat, вы не должны быть незнакомы с кодами ошибок. Хорошо видеть код ошибки, а затем искать руководство, чтобы быстро узнать тип ошибки.
02. Добавлено 34 новых устава
34 слишком много, поэтому позвольте мне выбрать несколько важных и рассказать о них.
1) Дата время
Вы все еще помните последнее событие с прокруткой экрана в техническом кружке? Это проблема, вызванная YYYY и yyyy. Прописная буква Y указывает, к какому году относится неделя дня, а строчная буква y указывает год дня, разница довольно большая. Пробуешь, пробуешь внимательно.
Кроме того, заглавная буква M отличается от строчной буквы m, а заглавная буква H отличается от строчной буквы h.
Кроме того, что-то вроде получения текущих миллисекунд должно использоватьSystem.currentTimeMillis()
, вместоnew Date().getTime()
, следует помнить об этих подробных уставах и не совершать ошибок низкого уровня.
2) NPE-проблема троичной операции
Честно говоря, раньше никогда не обращал внимания на эту проблему, в этот раз увидел, давайте разбираться вместе. Сначала посмотрите на следующий код:
public class TestCondition {
public static void main(String[] args) {
Integer a = 1;
Integer b = 2;
Integer c = null;
Boolean flag = false;
Integer result = flag ? a * b : c;
}
}
состояниеa * b
Это арифметическая операция. Результатом умножения двух является тип int, что приведет к автоматической распаковке типа Integer c. Поскольку значение равно null, выдается следующая ошибка:
Exception in thread "main" java.lang.NullPointerException
at com.cmower.mkyong.TestCondition.main(TestCondition.java:9)
Тогда вам может быть любопытно, почему умножение двух переменных типа Integer будет типом int, это в основном определяется компилятором, он так устроен, взгляните на декомпилированный байткод:
public class TestCondition
{
public static void main(String args[])
{
Integer a = Integer.valueOf(1);
Integer b = Integer.valueOf(2);
Integer c = null;
Boolean flag = Boolean.valueOf(false);
Integer result = Integer.valueOf(flag.booleanValue() ? a.intValue() * b.intValue() : c.intValue());
}
}
a * b
Когда происходит автоматическая распаковка, вызовintValue()
метод, а типы двух выражений тернарной операции должны быть одинаковыми, что приводит к тому, что c также вызываетintValue()
метод, поскольку сам c равен нулю, он может быть только NPE. Понимать?
3) класс коллекционеровtoMap()
метод
В инструкции написано, что при использованииjava.util.stream.Collectors
КатегорияtoMap()
При преобразовании метода в Map обязательно используйте метод с типом параметра BinaryOperator и именем параметра mergeFunction, иначе при возникновении того же значения ключа будет сгенерировано исключение IllegalStateException.
Этот отрывок может быть немного сложным для понимания, поэтому давайте сначала рассмотрим фрагмент кода!
String[] departments = new String[] {"沉默王二", "沉默王二", "沉默王三"};
Map<Integer, String> map = Arrays.stream(departments)
.collect(Collectors.toMap(String::hashCode, str -> str));
При запуске этого кода возникает исключение, и информация о стеке выглядит следующим образом:
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 867758096 (attempted merging values 沉默王二 and 沉默王二)
at java.base/java.util.stream.Collectors.duplicateKeyException(Collectors.java:133)
at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:180)
Ключ повторяется, потому что хэш-код двух «Silent King II» одинаков.Какое решение на данный момент?
String[] departments = new String[] {"沉默王二", "沉默王二", "沉默王三"};
Map<Integer, String> map = Arrays.stream(departments)
.collect(Collectors.toMap(String::hashCode, str -> str, (v1, v2) -> v2));
добавить больше параметров(v1, v2) -> v2
, то есть выбрать один при повторении. Давайте посмотрим, как называется в это времяtoMap()
метод.
public static <T, K, U>
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction) {
return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new);
}
Появились BinaryOperator и mergeFunction?
03. Изменить описание 90 мест
В мануале написано, что, например, изменены описания блокировки ожидания блокировки, десятичных типов создания таблиц и т. д. Я потратил полчаса и не смог найти разницы между предыдущей версией и предыдущей версией.
Я не знаю, может быть, редактор мануала несет ерунду.Если вы можете найти разницу, дайте мне знать.
04. Улучшите некоторые примеры
Например, пример ISNULL в столбце инструкции SQL добавляет более подробный контрпример, чем версия Huashan, как показано на рисунке ниже.
Но, честно говоря, я прочитал описание этого контрпримера как минимум шесть раз, прежде чем понял, что оно означает. Во-первых, не переносите строку перед нулем, что влияет на читабельность, что верно; во-вторых, не используйтеcolumn is null
чтобы оценить пустой, используйтеISNULL(column)
Пустой, более эффективный, и не будет разрыва строки.
select * from cms_subject where column is null and
column1 is not null;
select * from cms_subject where ISNULL(column) and
column1 is not null;
05. Наконец
В декабре 2016 года Alibaba впервые представила это Руководство по разработке Java для отрасли. Прошло более 3 лет с момента выпуска версии Taishan. Это руководство также стало общепринятым в отрасли благодаря совместным усилиям разработчиков Java. по всему миру. Знания, содержащиеся в этом руководстве, очень обширны, включая спецификации программирования в семи измерениях, журналы исключений, модульные тесты, спецификации безопасности, базу данных MySQL, технические спецификации и спецификации дизайна.
Если вы хотите стать хорошим Java-инженером, то это руководство просто необходимо. Если у вас еще нет этого руководства, вы можете выполнить поиск по запросу "Тихий король 2"Ответить"руководство» доступен бесплатно. Для тех, у кого он уже есть, пожалуйста, игнорируйте его. Наконец, я искренне желаю тебе, надеюсь, ты сможешь чему-то научиться, стать лучше, Олли!