Kolego nie kupuj książek do nauki języka programowania bo Ci ręczę że jej nie przerobisz i co najgorsze możesz stracić chęci do nauki. A jak już chcesz bardzo to kup ale ogarnij tylko podstawy (z doświadczenia wiem że ciężko się przesiąść z c++ na jakikolwiek nowoczesny język obiektowy) i staraj się klepać własne programy.
Javy zacząłem się uczyć w tym roku i pierwszym moim programem był taki mini sklep spożywczy (bez bazy danych). Zacząłem go pisać po ogarnięciu podstaw, żeby dobrze sobie przetrawić podejście obiektowe. Z biegiem czasu dodawałem nowe funkcjonalności i refaktoryzowałem kod stosując nowe rozwiązania. Niby nic takiego możesz powiedzieć ale teraz wiem co używać, jak używać, po co w ogóle używać.
BONUS: kiedyś widziałem że Thinking in Java wydanie bodajże 6 było udostępnione za darmo na jakimś serwisie. Mi się wydawało, że to legalne źródło ale mogę się mylić (nie namawiam nikogo do piracenia :D).