Pull to refresh
11
0
topjava @topjava

Программирование на Java, наставничество

Send message

Любил этот язык, когда учился в универе: особенно нравилось на нем рисовать анимированные сюжеты. Тогда еще был популярен задачник Пильщикова.

А что вы подразумеваете под "началом"? В данной статье разбирается одна из бесчисленного множества тем, которые изучают начинающие Java-программисты. В ней, в одной месте, собрана вся информация, связанная с пакетами. Это статья для начинающих. А чтобы стать Джуном, нужно пройти долгий путь, читая подобные статьи.

В классе Object метод clone() является protected. Именно его и не отображает метод getMethods(), т.к. заточен на вывод только public-методов. А у массивов данный метод реализован (переопределен, как написано в документации: 10.7. The public method clone, which overrides the method of the same name in class Object) как public. Тут происходит расширение области видимости с protected до public.

Спасибо за конструктивную критику и желание разобраться!

Нууу, это не так, причём вы сами же дальше пишите, что массив - это не просто область памяти, а именно объект, с набором присущих объекту полей и методов.

да, new возвращает ссылку на объект.

Реально запутали, а где именно в документации такое? Потому, что я вижу другое (jls 10.7):

Array Members
The members of an array type are all of the following:
The public final field length, which contains the number of components of the array. length may be positive or zero.

Об этом написано в 10.1. Array Types: An array's length is not part of its type. (ссылка в статье как раз ведет на данное утверждение в спеке).

Что касается пункта 10.7 и приведенного там класса, который якобы описывает массив, то про него можно сказать, что это всего лишь иллюстрация в виде псевдокода, показывающая, как реализация массива могла бы выглядеть в синтаксисе Java. То, что это не реальный класс говорит текст после него: Note that the cast in the example above would generate an unchecked warning (§5.1.9) if arrays were really implemented this way.

Поле length находится в хедере объекта:

  • что подтверждается выводом JOL, который приводится в статье

  • об этом говорит Алексей Шипилев в своем видео

Тоже странное утверждение. Как вы представляете себе объект, реализующий интерфейс Cloneable с недоступным методом clone()? Конечно же, метод clone() доступен и массивы прекрасно клонируются. См в jls: Example 10.7-1. Arrays Are Cloneable

уточнил в тексте, что не сам метод clone() недоступен, а его не отображает метод getMethods(), т. к. он возвращает только public-методы. А clone() - protected.

Рады, что статья помогла разобраться в данной теме. Целью данной статьи было все же дать всесторонние, но при этом исключительно фундаментальные сведения о массивах в Java. А Arrays.copyOf() - это уже приятное расширение, которое мы подробно разбираем в другой статье.

История чем-то на мою похожа: Я тоже закончил «Вычислительные машины, комплексы, системы и сети», тоже начинал с Лафоре, потом изучал Qt (на тот момент в инете было всего два русскоязычных сайта по Qt. У меня до сих пор валяются две или три книги по Qt), тоже писал на нем диплом — «цилиндрическую интерактивную 3D-панораму для своего универа, которая позволяла перемещаться по нему», но потом Java вытеснила Qt ))
Самый гуманный путь — это написать в личку о неточностях, которые вы заметили в тексте, тем самым внеся свой вклад в перевод статьи. Спасибо.
В JEP 378: Text Blocks написано:
Non-Goals
  • Text blocks do not directly support string interpolation. Interpolation may be considered in a future JEP. In the meantime, the new instance method String::formatted aids in situations where interpolation might be desired.
  • Text blocks do not support raw strings, that is, strings whose characters are not processed in any way.

интерполяция и Raw-строки — это, видимо, вопрос будущего. Ждем)
Как написано в одной из статей про текстовые блоки:
В Java строковые литералы (и текстовые блоки) не поддерживают интерполяцию выражений (подстановку переменных), как некоторые другие языки. Исторически строковые выражения создавались с помощью обычной конкатенации строк (+). В Java 5 был добавлен String:format для форматирования строк в стиле «printf».

Java не является первопроходцем в реализации Текстовых блоков. В данном случае она выступает в роли догоняющего, т.к. многострочные строки давно реализованы во многих языках. В статье www.infoq.com/articles/java-text-blocks есть табличка с перечислением языков, которые так или иначе поддерживают разные виды строковых летиралов.
это недостаток подсветки в carbon.now.sh, в котором мы оформляли код
Спасибо за ваш отзыв. Мы изучили статьи на хабре и увидели, что есть немало подобных переводов конвенций, но для других языков: Python, html, css, для Android, С++. Конвенция от гугл одна из самых свежих и актуальных на данный момент, хотя и местами спорная (про ограничение в 100 символов, про отступ в 2 пробела и тд). Конвенция от Oracle 1997 года выпуска. С тех пор много воды утекло, подходы к форматированию местами изменились.
Данный текст является практичным, фундаментальным документом, описывающим все основные подходы к форматированию для языка Java, и его стоило перевести! Не хотелось бы говорить банальные вещи про то, что: новичкам удобней читать на русском; есть люди, которые не знают английского; гугл переводчик не делает качественный перевод — это все лирика (мы согласны, что программисты должны читать на английском). Но, дело сделано — перевод появился. Кому-то он не нужен, кому-то пригодится.
На ютубе есть видео с демонстрацией работы Джеймсом Гослингом «Start7».
Пару лет назад мы его озвучили
Не за что! Рады, что вам понравилась статья!
в idea Это делается через ctrl + alt + v
тоже подумал о таком юзкейсе, но ни когда так не пробовал делать. Надо попробовать)
Я думаю, что этот вопрос должен как-то решаться на уровне сред разработки. Ничего не мешает ide автоматом, во время написания кода, уже определять тип переменной employee и давать доступ к соответствующей доке. Поменялся тип, значит и должна автоматом поменяться дока
var employee = getEmployee(accountName)
если следовать логике, то тут возвращается объект типа Employe, т.к. эта информация зашита в двух местах: в названии и в геттере

Если нужны нюансы, то автор предлагает максимум информации помещать в название переменной/метода. Это кстати не противоречит рекомендациям из книги Clean Code — давайте именам переменных/класса/метода говорящие имена, чтобы код был самодокументируемым.
Придется инфу о возвращаемом типе отражать в имени переменной. Это автор и говорит в статье
… В большинстве случаев это происходит потому, что мы склонны смотреть на тип переменной, как на первичную информацию, а на ее имя, как на вторичную. Хотя должно быть как раз наоборот.
Для примитивных типов использовать тип var, наверно, особо смысла нет. А в статье это разбирается, как некая возможность, которой можно пользоваться. Из статьи можно сделать вывод, что суть var — это синтаксический сахар над типами, который позволяет писать меньше кода. А это значит, что при использовании var инфу о типе придется переносить в название переменной, что, наверно, не всем будет по душе.
1

Information

Rating
Does not participate
Registered
Activity