А что вы подразумеваете под "началом"? В данной статье разбирается одна из бесчисленного множества тем, которые изучают начинающие 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 ))
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 есть табличка с перечислением языков, которые так или иначе поддерживают разные виды строковых летиралов.
Спасибо за ваш отзыв. Мы изучили статьи на хабре и увидели, что есть немало подобных переводов конвенций, но для других языков: Python, html, css, для Android, С++. Конвенция от гугл одна из самых свежих и актуальных на данный момент, хотя и местами спорная (про ограничение в 100 символов, про отступ в 2 пробела и тд). Конвенция от Oracle 1997 года выпуска. С тех пор много воды утекло, подходы к форматированию местами изменились.
Данный текст является практичным, фундаментальным документом, описывающим все основные подходы к форматированию для языка Java, и его стоило перевести! Не хотелось бы говорить банальные вещи про то, что: новичкам удобней читать на русском; есть люди, которые не знают английского; гугл переводчик не делает качественный перевод — это все лирика (мы согласны, что программисты должны читать на английском). Но, дело сделано — перевод появился. Кому-то он не нужен, кому-то пригодится.
Я думаю, что этот вопрос должен как-то решаться на уровне сред разработки. Ничего не мешает ide автоматом, во время написания кода, уже определять тип переменной employee и давать доступ к соответствующей доке. Поменялся тип, значит и должна автоматом поменяться дока
var employee = getEmployee(accountName)
если следовать логике, то тут возвращается объект типа Employe, т.к. эта информация зашита в двух местах: в названии и в геттере
Если нужны нюансы, то автор предлагает максимум информации помещать в название переменной/метода. Это кстати не противоречит рекомендациям из книги Clean Code — давайте именам переменных/класса/метода говорящие имена, чтобы код был самодокументируемым.
Придется инфу о возвращаемом типе отражать в имени переменной. Это автор и говорит в статье
… В большинстве случаев это происходит потому, что мы склонны смотреть на тип переменной, как на первичную информацию, а на ее имя, как на вторичную. Хотя должно быть как раз наоборот.
Для примитивных типов использовать тип var, наверно, особо смысла нет. А в статье это разбирается, как некая возможность, которой можно пользоваться. Из статьи можно сделать вывод, что суть var — это синтаксический сахар над типами, который позволяет писать меньше кода. А это значит, что при использовании var инфу о типе придется переносить в название переменной, что, наверно, не всем будет по душе.
А что вы подразумеваете под "началом"? В данной статье разбирается одна из бесчисленного множества тем, которые изучают начинающие 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 возвращает ссылку на объект.
Об этом написано в 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, который приводится в статье
об этом говорит Алексей Шипилев в своем видео
уточнил в тексте, что не сам метод clone() недоступен, а его не отображает метод getMethods(), т. к. он возвращает только public-методы. А clone() - protected.
Рады, что статья помогла разобраться в данной теме. Целью данной статьи было все же дать всесторонние, но при этом исключительно фундаментальные сведения о массивах в Java. А Arrays.copyOf() - это уже приятное расширение, которое мы подробно разбираем в другой статье.
интерполяция и Raw-строки — это, видимо, вопрос будущего. Ждем)
Java не является первопроходцем в реализации Текстовых блоков. В данном случае она выступает в роли догоняющего, т.к. многострочные строки давно реализованы во многих языках. В статье www.infoq.com/articles/java-text-blocks есть табличка с перечислением языков, которые так или иначе поддерживают разные виды строковых летиралов.
Данный текст является практичным, фундаментальным документом, описывающим все основные подходы к форматированию для языка Java, и его стоило перевести! Не хотелось бы говорить банальные вещи про то, что: новичкам удобней читать на русском; есть люди, которые не знают английского; гугл переводчик не делает качественный перевод — это все лирика (мы согласны, что программисты должны читать на английском). Но, дело сделано — перевод появился. Кому-то он не нужен, кому-то пригодится.
Пару лет назад мы его озвучили
если следовать логике, то тут возвращается объект типа Employe, т.к. эта информация зашита в двух местах: в названии и в геттере
Если нужны нюансы, то автор предлагает максимум информации помещать в название переменной/метода. Это кстати не противоречит рекомендациям из книги Clean Code — давайте именам переменных/класса/метода говорящие имена, чтобы код был самодокументируемым.