Книги это хорошо, но недостаточно. В книгах есть примеры кода, возможно даже много примеров. Но так как хорошие книги многократно переиздаются, то и примеры там древние. Да, в java мало что меняется, в основном добавляется новое. Но это новое добавляется не просто так, а потому что это очень надо программистам. И они это новое радостно используют в текущих проектах. Соответственно чтобы понять что они пишут надо изучать новое, а не старое :)
А ещё в книгах нет задач (или почти нет). Программирование - практический навык, поэтому нарабатывать его надо решая задачи много задач, с автоматической проверкой решений.
Поэтому я бы посоветовал
курсы :) А книги - любые из тех что советовали выше, но только как дополнение к курсам.