Cay S. Horstmann
Preface
To the Reader
In late 1995, the Java programming language burst onto the Internet scene and gained instant celebrity status. The promise of Java technology was that it would become the universal glue that connects users with information wherever it comes fromweb servers, databases, information providers, or any other imaginable source. Indeed, Java is in a unique position to fulfill this promise. It is an extremely solidly engineered language that has gained wide acceptance. Its built-in security and safety features are reassuring both to programmers and to the users of Java programs. Java has built-in support for advanced programming tasks, such as network programming, database connectivity, and concurrency.
Since 1995, twelve major revisions of the Java Development Kit have been released. Over the course of the last 25 years, the Application Programming Interface (API) has grown from about 200 to over 4,000 classes. The API now spans such diverse areas as user interface construction, database management, internationalization, security, and XML processing.
The book that you are reading right now is the first volume of the twelfth edition of Core Java. Each edition closely followed a release of the Java Development Kit, and each time, I rewrote the book to take advantage of the newest Java features. This edition has been updated to reflect the features of Java 17.
As with the previous editions, this book still targets serious programmers who want to put Java to work on real projects. I think of you, the reader, as a programmer with a solid background in a programming language other than Java. I assume that you dont like books filled with toy examples (such as toasters, zoo animals, or nervous text). You wont find any of these in the book. My goal is to enable you to fully understand the Java language and library, not to give you an illusion of understanding.
In this book you will find lots of sample code demonstrating almost every language and library feature. The sample programs are purposefully simple to focus on the major points, but, for the most part, they arent fake and they dont cut corners. They should make good starting points for your own code.
I assume you are willing, even eager, to learn about all the advanced features that Java puts at your disposal. For example, you will find a detailed treatment of
Object-oriented programming
Reflection and proxies
Interfaces and inner classes
Exception handling
Generic programming
The collections framework
The event listener model
Graphical user interface design
Concurrency
With the explosive growth of the Java class library, a one-volume treatment of all the features of Java that serious programmers need to know is no longer possible. Hence, the book is broken up into two volumes. This first volume concentrates on the fundamental concepts of the Java language, along with the basics of user-interface programming. The second volume, Core Java, Volume II: Advanced Features, goes further into the enterprise features and advanced user-interface programming. It includes detailed discussions of
The Stream API
File processing and regular expressions
Databases
XML processing
Annotations
Internationalization
Network programming
Advanced GUI components
Advanced graphics
Native methods
When writing a book, errors and inaccuracies are inevitable. Id very much like to know about them. But, of course, Id prefer to learn about each of them only once. You will find a list of frequently asked questions and bug fixes at http://horstmann.com/corejava
. Strategically placed at the end of the errata page (to encourage you to read through it first) is a form you can use to report bugs and suggest improvements. Please dont be disappointed if I dont answer every query or dont get back to you immediately. I do read all e-mail and
appreciate your input to make future editions of this book clearer and more informative.
A Tour of This Book
gives an overview of the capabilities of Java that set it apart from other programming languages. The chapter explains what the designers of the language set out to do and to what extent they succeeded. A short history of Java follows, detailing how Java came into being and how it has evolved.
In , you will see how to download and install the JDK and the program examples for this book. Then Ill guide you through compiling and running a console application and a graphical application. You will see how to use the plain JDK, a Java IDE, and the JShell tool.
starts the discussion of the Java language. In this chapter, I cover the basics: variables, loops, and simple functions. If you are a C or C++ programmer, this is smooth sailing because the syntax for these language features is essentially the same as in C. If you come from a non-C background such as Visual Basic, you will want to read this chapter carefully.
Object-oriented programming (OOP) is now in the mainstream of programming practice, and Java is an object-oriented programming language. introduces encapsulation, the first of two fundamental building blocks of object orientation, and the Java language mechanism to implement itthat is, classes and methods. In addition to the rules of the Java language, you will also find advice on sound OOP design. Finally, I cover the marvelous javadoc
tool that formats your code comments as a set of hyperlinked web pages. If you are familiar with C++, you can browse through this chapter quickly. Programmers coming from a non-object-oriented background should expect to spend some time mastering the OOP concepts before going further with Java.
Classes and encapsulation are only one part of the OOP story, and introduces the othernamely, inheritance. Inheritance lets you take an existing class and modify it according to your needs. This is a fundamental technique for programming in Java. The inheritance mechanism in Java is quite similar to that in C++. Once again, C++ programmers can focus on the differences between the languages.
. Mastering interfaces allows you to have full access to the power of Javas completely object-oriented approach to programming. After covering interfaces, I move on to lambdaexpressions, a concise way for expressing a block of code that can be executed at a later point in time. I then explain a useful technical feature of Java called inner classes.
discusses exception handlingJavas robust mechanism to deal with the fact that bad things can happen to good programs. Exceptions give you an efficient way of separating the normal processing code from the error handling. Of course, even after hardening your program by handling all exceptional conditions, it still might fail to work as expected. In the final part of this chapter, I give you a number of useful debugging tips.
gives an overview of generic programming. Generic programming makes your programs easier to read and safer. I show you how to use strong typing and remove unsightly and unsafe casts, and how to deal with the complexities that arise from the need to stay compatible with older versions of Java.
The topic of is the collections framework of the Java platform. Whenever you want to collect multiple objects and retrieve them later, you should use a collection that is best suited for your circumstances, instead of just tossing the elements into an array. This chapter shows you how to take advantage of the standard collections that are prebuilt for your use.