This is a free, on-line textbook on introductory programming using Java. This book is directed mainly towards beginning programmers, although it might also be useful for experienced programmers who want to learn more about Java. It is an introductory text and does not provide complete coverage of the Java language. The text is a PDF and is suitable for printing or on-screen reading. It contains internal links for navigation and external links to source code files, exercise solutions, and other resources. Contents: 1) Overview: The Mental Landscape. 2) Programming in the Small I: Names and Things. 3) Programming in the Small II: Control. 4) Programming in the Large I: Subroutines. 5) Programming in the Large II: Objects and Classes. 6) Introduction to GUI Programming. 7) Arrays. 8) Correctness and Robustness. 9) Linked Data Structures and Recursion. 10) Generic Programming and Collection Classes. 11) Files and Networking. 12) Advanced GUI Programming. Appendices: Source Code for All Examples in this Book, and News and Errata.