Ja osobiście podszedłem do tego wszystkiego bardzo niestandardowo, a zarazem efektywnie. Kupiłem książkę Thinking in Java (przyzwoita, ale są lepsze i nowsze pozycje), przeczytałem do około 1/4, po czym odstawiłem ją na półkę. Zamiast wałkować teorię, zabrałem się za duży projekt na Android, gdzie chcąc nie chcąc musiałem wyszukiwać informację jak zaimplementować to czy tamto w Javie. Źródła dowolne. Google jest tak dobrym narzędziem, że jeśli wiesz czego szukasz, na pewno to znajdziesz.
Nie polecam tego każdemu. Thinking in Java na początku traktuje o funkcjonowaniu Javy głównie w oparciu o C++, na niedociągnięciach którego była tworzona. Pierwsza część książki daje solidny obraz możliwości Javy, a jest uboga w kod, co według mnie jest bardzo przyjemne. Znając jako tako C++ i mając (bardzo małe, ale jednak) doświadczenie w większym projekcie nie miałem żadnych problemów z tym językiem, wręcz go pokochałem.
Gdy któryś znajomy chce rozpocząć przygodę z tym językiem nie potrafię odpowiadać gdzie się o czymś dowiedziałem. Po prostu wiem. Trochę z książki, trochę od Derka Banasa(youtube), trochę z oficjalnej dokumentacji... Ogólnie staram się zachwalać ten sposób nauki, ponieważ żaden poradnik nie nauczy cię wszystkiego.