This document is an introduction to programming using Java version 5.0 from December 2006. It was written by David J. Eck of Hobart and William Smith Colleges. The document covers Java programming concepts such as machine language, asynchronous events, the Java virtual machine, object-oriented programming, and the modern user interface. It is licensed under the Creative Commons Attribution-Share Alike license and its web site is provided. The document contains chapters and exercises to teach Java programming.