I am also a noob when it comes to programming. I am taking formal training at my JC/Community College. I am taking Computer Science classes, which focuses on Java till I get to the University.
The book that we are using is "How To Program: Java 9th Edition". If you want to learn Java, get this book(or any other "accredited" books like it.)
I have had that book since last summer, and has been my greatest learning material when it comes to Java. They actually split the book up to last an entire school year through two semesters.
However, I have had Linux classes, and have been studying Android books on the side. My overall approach has been sufficient in learning. I honestly just learn from books and information on the internet, and my teachers teach me the fine points and have help in ways that aren't on paper. Although Android's dev site has all the information you could possibly need.
My biggest secret/trick is just studying the information, even the ones not in my classes(study, practice,
test). I originally started out saying I want to make Android Apps back when I first started programming, without knowing how deep this request is. Its has turned into learning key elements, because the more I learn the more I will realize how much there is out there and Android is just one of countless routes I could take, and there are a couple subjects you can learn to master android.
I became so daunted, that I officially decided to take the CS degree(Cause I was taking Generals). If your serious, like I became, I would consider traditional schooling, and getting any training you can. I also believe that anyone is capable of learning through books and the internet, if, they have the drive and motivation to do it. I just wouldn't do what some of my friends do, and say that they don't need college cause they can learn on their own, then spend half their time talking instead of learning. I personally like taking both routes, and dedicated myself to learning, which is what I needed to do to learn this stuff.