Я соглашаюсь, что это зависит полностью от того, какой ученик Вы. Однако я был в двух компаниях, которые имели очень большие кодовые базы для начала. Как правило, я работаю как это:
, Если возможно, перед рассмотрением любого функционального кода, я прохожу модульные тесты, которые уже записаны. Они могут обычно выручать довольно много. Если они не доступны, то я делаю следующее.
Первый, я в основном игнорирую реализацию и смотрю только на заголовочные файлы или просто интерфейсы класса. Я пытаюсь понять то, какова цель каждого класса. Во-вторых, я иду один уровень глубоко в реализацию, запускающуюся с того, что, кажется, область большей части важности. Это трудно измерить, поэтому иногда я только запускаю наверху и прокладываю себе путь вниз в списке файлов. Я называю это изучение в ширину. После этого начального шага я обычно иду мудрый глубиной через остальную часть кода. Начальный взгляд в ширину помогает укрепиться/устранить любые идеи, которые я получил от интерфейсного уровня, и затем мудрый глубиной взгляд показывает мне шаблоны, которые использовались для реализации системы, а также различных дизайнерских идей. В глубину я подразумеваю, что Вы в основном ступаете через программу с помощью отладчика, ступая в каждую функцию, чтобы видеть, как это работает и так далее. Это, очевидно, не возможно с действительно большими системами, но 20k LOC не то, что многие. :)
Краткий ответ : неглубоко.
Не совсем -короткий ответ : Если это не переопределено, AnyRef.clone () использует Java's Object.clone () в качестве своей реализации.
Javadoc on Object.clone ():
Клон метода для класса Object выполняет определенную операцию клонирования. Во-первых, если класс этого объекта не реализует интерфейс Клонируемый, затем CloneNotSupportedException выбрасывается. Обратите внимание, что все массивы считаются реализовать интерфейс Cloneable. В противном случае этот метод создает новый экземпляр класса этого объекта и инициализирует все свои поля с помощью именно содержание соответствующие поля этого объекта, как бы по поручению; содержание сами поля не клонируются. Таким образом, этот метод выполняет «неглубокий копия "этого объекта, а не" глубокий copy ».
Обратите внимание:
Длинный ответ : прочтите Эффективная Java, 2-е издание, пункт 11: разумно переопределите клон
Резюме : Не используйте его. Есть альтернативы получше.