This introduction to Java is designed for graduate students and higher level undergraduates who have significant experience in programming. It is assumed that they are already reasonably familiar with C, and have some experience with C++. However, it does not assume that readers are expert object oriented programmers. Topics covered include inheritance, polymorphism, data encapsulation, exception handling, threads, network programming, and GUI programming.