Лично мне повезло, что основы Java были преподаны в университете. Тогда я ещё мало что понимал и делал всё по примерам, переделывая их под себя, тем самым открывая для себя что-то новое. Ключевый было использования логики/логического мышления и умения правильно разбить задачу на подзадачи.
Книг тогда я по Java не читал, всё решала практика. Лишь после универа, устроившись на работу в крупную контору, стал читать. Но всё равно куда бОльшую роль сыграла практика и работа над своими собственными ошибками.
После работы писал небольшие программки для себя. Просто выдумывал какую-то задачу и делал. Естественно, что каждые 5 минут что-то гуглил или искал на stackoverflow.com.
Так вот собственно по теме - по моему личному опыту нужна практика, практика, практика и ещё много желания научиться и мешок усидчивости.
Желаю удачи и добра!
Курсы на Stepik, на этой платформе есть множество бесплатных курсов. Есть сайт JavaRush, который специально предназначен для изучения Java, но он платный. Еще есть сайт и мобильное приложение Sololearn, там есть курс и по Java и по другим языкам программирования, а так же онлайн IDE.
На javarush, к слову, задачки теперь платные. Год назад было иначе :(