This book offers a thorough introduction to the concepts and practices of object-oriented programming in Java. It also introduces the most common data structures and related algorithms and their implementations in the Java collections framework. Chapters 1-14 follow the syllabus of the AP Computer Science course. They will prepare you well for the AP CS exam. Chapters 15-18 on file input and output, graphics, graphical user interfaces, and events handling in Java will give you a better sense of real-world Java programming; this material also makes case studies, labs, and exercises more fun. Chapters 19-26 deal with more advanced data structures and algorithms. The last chapter, Design Patterns, discusses more intricate aspects of object-oriented design and serves as an introduction to design patterns. The book follows four main threads: OOP concepts and techniques, algorithms, Java syntax and style, and Java libraries. As in the software engineering profession itself, these threads are interwoven into an inseparable braid. Working through this book will not make you a Java expert right away, but it will bring you to the level of an entry-level Java programmer with a better than average understanding of the fundamental concepts.