Yes to all of the three questions. Trying things out yourself is one of the best ways to learn how things work.
I don't know what your level of proficiency with
Java is, but here are some highly recommended books:
Effective Java (a must-read for any Java developer)
Java Puzzlers (learn about tricky things in the Java programming language)
Design Patterns (the classic book on design
patterns)
Java Concurrency in Practice (a bit more advanced, but a very good book for anyone who's writing multi-threaded applications)
Code Complete (not specifically about Java, but very useful to learn how to be a better programmer)
Clean Code (not specifically about Java, but very useful to learn how to be a better programmer)