Недопонимание предпоследней задачи, хотя методом тыка решил ее.
Не могу понять, почему в задаче "Стек-трейс длиной 10 вызовов"
method1().length - 12, а method10().length - 3 в исправленном состоянии. По дебагеру массивы StackTraceElement[ ] в method1() - 3 элемента, в method10() - 12 элементов. Возвращают же эти методы массивы содержащие размер цепочки до метода из которого мы вызываем? А length возвращает длину переданных массивов. Но все проходит наоборот!
Вообще, если в method10() вызвать sout - Thread.currentThread().getStackTrace().length, то получается такая картина
12
3
12
3
То есть длина массива StackTraceElement[ ] в методе меняется несколько раз.
Что за хрень? Блин уже мозги кипят.
да нигде этого не было. В наших задачах получается:
0 - это гетМетодНейм
1- это название самого этого метода где выполняется код
2- это название метода который вызывает наш метод, где выполняется код
Лучше теоретическую часть в серии Java Syntax Pro посмотреть, а не в Java Syntax New, там хоть описание методов StackTraceElement есть https://javarush.com/quests/lectures/questsyntaxpro.level14.lecture05
имхо, задачи 1-2 бесполезны, лучше сразу в ответ идти, 3-4 можно поугадывать минут 5.
в последней задаче после доработки log не поленитесь добавить метод
method1() { log(" La-la-la In method1 "); }
и его вызов из main. так более понятно зачем нужен метод log и как оно работает.
Господа будущие разработчики, кто не до конца понял как работает стек трейс и сделал задачи "методом тыка" - попробуйте сделать нормальный вывод стека в консоль и посмотреть что в нём лежит в каждом методе. Жизнь сразу станет проще.
задачки решаемы, но без понятия как работают исключения, стек как-будто бесполезен. Лучше перед этой темой нормальную теорию в книжках по jave почитать
Я наверно один недалекий))). JavaRush дает три строчки теории и потом в задачах появляется требование знать материал, которого еще не было в лекциях. Например во второй задаче в решении есть "getStackTrace()[2]". Вопрос: где в теоретической части изложено, что можно обращаться таким образом. Почему именно [2], а не [1] или [0]?
Да это жестко, где-то на javarush было написано, что тут не вся инфа.
JavaRush нужно совмещать с чем-нибудь, например какую нибудь книжку найти проходить темы, а практиковаться здесь(ибо в книгах редко есть практические задачи)
ну собственно потому что все и не должно быть таким, чтоб только копипастом делать можно было. Надо гуглить, думать, а вы что хотели) И необязательно какие-то еще книжки читать на самом деле. На самом же ресурсе здесь часто есть дополнительные статьи на все темы. Или на другом ресурсе. Прям книги книги на таком этапе в общем-то и не так уж надо читать параллельно. То есть надо, если хотите сразу идти степенно и глубоко настолько насколько можно, а если быстрее, то легче самому пробовать, играться, так сказать. Надо было вывести стектрейс в консоль в IDE, или тут в браузере это сделать. Посомтреть, что такое стектрейс, взятый таким методом, как там написано, и что можно с этим сделать. Не всегда должно быть легко и просто все. Это создает иллюзию, что ты все знаешь и все получается, а это не так. Надо часто самому тыкать и смотреть высматривать, что такое где. Команда System.out.println() должна быть вызвана всегда в процессе решения если что-то непонятно и вообще помотреть что происходит. Или отладкой пользоваться смотреть. Ну в самом деле. Ничего сверхсложного, просто не все гладенько))
Как я понял - getStackTrace() - это массив, который является стеком, т.е. каждый элемент в нем - это тот метод который идет в иерархии вызовов (пример для метода method1()):
getStackTrace()[2].getMethodName() - это main;
getStackTrace()[1].getMethodName() - это method1;
getStackTrace()[0].getMethodName() - это getStackTrace;
getStackTrace()[3].getMethodName() - выше main ничего нет, поэтому получите ArrayIndexOutOfBoundsException, массив то из 3 элементов.
Для методе method2() будет такой:
getStackTrace
method5
method4
method3
method2
method1
main
Итого getStackTrace()[2].getMethodName() - потому что именно в третьем элементе лежит вызвавший текущий метод метод. Во втором - текущий метод, в первом - метод getStackTrace.
Насчет надо гуглить - двоякое мнение, знаете, я покупаю книгу, чтобы по ней изучать информацию, зачем тогда гуглить, если есть хорошая книга. JR позиционирует себя как хороший сервис для будущего разраба, так я купила его(для получения знаний), почему не навалить здесь же информации и не выдавать ее студентам
Двоякое-то двоякое, да только в жизни так не бывает, наверное, что в одном месте все так идеально собрано и всем подходит. Тут есть куча статей, да. Можно их тут же и искать, но они точно также ищутся и через гугл (статьи с джавараш). И в конце уровней даются доп лекции. Но все равно всегда и все люди говорят умные, что надо несколько источников обрабатывать. Почему еще что-то покупать или брать? Потому. Потому что инфа представляется разными словами и разными людьми и кому что больше зайдет - не угадаешь. Здесь тоже ссылок полно разных полезных дают, но как бы при это и урок есть с рекомендациями хороших книг и наставлениями не оставаться только на JR.
А умение гуглить это, как шутят, вообще главное умение. Это просто нужно уметь делать, и чем раньше привыкнуть - тем лучше. Бубнеть, что зачем еще что-то, я же то-то купил и то-то купил - толку не принесет, к сожалению.
Вообще единственное место, где как раз все навалено и все есть, надо только поискать - это как раз таки интернет. Вот в нем все навалено. Именно навалено. Здесь стараются и давать что-то, чтоб вроде понятно было, но и не заваливать прям. Но источники другие хорошие здесь тоже навалены, как вы говорите, и все - идите смотрите там, если там понятнее, дополнительно - не проблема. Разные люди - разные способы объяснения нужны всем) Почитать что-то другими словами или посмотреть - это лучшее усвоение материала, так что вредным все равно не будет. А самое лучшее и полное руководство, где все есть, но читать его как книжку или курс тяжеловато и скучно, это оф руководство, конечно. Там есть все. Но учиться по нему сложновато)
У них на сайте (помимо курса) овердох.. крутейших и понятных статей. При этом они понимают, что лучшие знания и навыки нарабатываются на практике, а запоминается лишь то, что пощелкал, попробовал, где упёрся, где пришлось поискать, подумать. Остальное - вылетает ко всем чертям. Важнейший навык, который вырабатывет подход JR - навык самостоятельного обучения. Обычно он должен вырабатываться в универе, но не у всех вырабатывается. И вот тут как раз JR отлично работает.
И опять таки, работая в индустрии придется производить собственные смыслы, собственные реализации, основываясь на том, что нашел и собрал по крупицам в интернете. не для каждой практической задачи найдется подробная технологическая карта. Нет как бы в программировании такого, что уже всё создано до нас, а нам надо только все выучить и повторять в нужном порядке. Иначе у прогеров не было бы таких хороших зарплат. И вот чтобы научиться не теряться в океане, в который попадаешь, став разрабом, JR и использует именно эти модели в подходе к обучению.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ