PrefaceTo the Reader
In late 1995, the Java programming language burst onto the Internet scene and gainedinstant celebrity status. The promise of Java technology was that it would become theuniversal glue that connects users with information, whether that information 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 engineeredlanguage that has gained acceptance by all major vendors, except for Microsoft. Its built-insecurity and safety features are reassuring both to programmers and to the users of Javaprograms. Java even has built-in support that makes advanced programming tasks, such asnetwork programming, database connectivity, and multithreading, straightforward.
Since 1995, Sun Microsystems has released five major revisions of the Java SoftwareDevelopment Kit. Over the course of the last 7 years, the Application ProgrammingInterface (API) has grown from about 200 to just over 3,000 classes. The API now spanssuch diverse areas as user interface construction, database management, internationalization,security, and XML processing.
The book you have in your hand is the first volume of the sixth edition of the Core Java book.With the publishing of each edition, the book followed the release of the Java Software DevelopmentKit as quickly as possible, and each time, we rewrote the book to take advantage of thenewest Java features.
As with the previous editions of this book, we still target serious programmers who want to putJava to work on real projects. We still guarantee no nervous text or dancing tooth-shaped characters.We think of you, our reader, as a programmer with a solid background in a programming language.But you do not need to know C++ or object-oriented programming. Based on the responseswe have received to the earlier editions of this book, we remain confident that experienced VisualBasic, C, or COBOL programmers will have no trouble with this book. (You don't even need anyexperience in building graphical user interfaces for Windows, Unix, or the Macintosh.)
What we do is assume you want to:
Write real code to solve real problems;
and
Don't like books filled with toy examples (such as kitchen appliances or fruit trees).
In this book you will find lots of sample code that demonstrates almost every language andlibrary feature that we discuss. We kept the sample programs purposefully simple to focuson the major points, but, for the most part, they aren't fake and they don't cut corners.They should make good starting points for your own code.
We assume you are willing, even eager, to learn about all the advanced features that Javaputs at your disposal. For example, we give you a detailed treatment of:
Object-oriented programming Reflection and proxies Interfaces and inner classes The event listener model Graphical user interface design with the Swing UI toolkit Exception handling Stream input/output and object serialization
We still don't spend much time on the fun but less serious kind of Java programs whosesole purpose is to liven up your Web page. There are quite a few sources for this kindof material alreadywe recommend John Pew's book Instant Java, also published bySun Microsystems Press.
Finally, with the explosive growth of the Java class library, a one-volume treatment of allthe features of Java that serious programmers need to know is no longer possible. Hence,we decided to break the book up into two volumes. The first volume, which you hold inyour hands, concentrates on the fundamental concepts of the Java language, along with thebasics of user-interface programming. The second volume goes further into the enterprisefeatures and advanced user-interface programming. It includes detailed discussions of:
Multithreading Network programming Distributed objects Collection classes Databases Advanced graphics Advanced GUI components Internationalization Native methods JavaBeans XML Processing
When writing a book, errors and inaccuracies are inevitable. We'd very much like to knowabout them. But, of course, we'd prefer to learn about each of them only once.Strategically placed at the end of the FAQ(to encourage you to read through it first) is a form you can use to report bugs and suggestimprovements. Please don't be disappointed if we don't answer every query or if we don'tget back to you immediately. We do read all e-mail and appreciate your input to makefuture editions of this book clearer and more informative.
We hope that you find this book enjoyable and helpful in your Java programming.
About This Book
Chapter 1 gives an overview of the capabilities of Java that set it apart from other pro-gramminglanguages. We explain what the designers of the language set out to do andto what extent they succeeded. Then, we give a short history of how Java came intobeing and how it has evolved.Then we guide you through compiling and runningthree typical Java programs, a console application, a graphical application, and an applet.
Chapter 3 starts the discussion of the Java language. In this chapter, we cover the basics: variables,loops, and simple functions. If you are a C or C++ programmer, this is smooth sailing becausethe syntax for these language features is essentially the same as in C. If you come from a non-Cbackground such as Visual Basic or COBOL, you will want to read this chapter carefully.
Object-oriented programming (OOP) is now in the mainstream of programming practice, andJava is completely object-oriented. Chapter 4 introduces encapsulation, the first of two fundamentalbuilding blocks of object orientation, and the Java language mechanism to implement it,that is, classes and methods. In addition to the rules of the Java language, we also give advice onsound OOP design. Finally, we cover the marvelous javadoc tool that formats your code commentsas a set of hyperlinked web pages. If you are familiar with C++, then you can browsethrough this chapter quickly. Programmers coming from a non-object-oriented backgroundshould expect to spend some time mastering OOP concepts before going further with Java.
Classes and encapsulation are only one part of the OOP story, and Chapter 5 introduces the other,namely, inheritance. Inheritance lets you take an existing class and modify it according to yourneeds. This is a fundamental technique for programming in Java. The inheritance mechanism inJava is quite similar to that in C++. Once again, C++ programmers can focus on the differencesbetween the languages.
Chapter 6 shows you how to use Java's notion of an interface. Interfaces let you go beyond thesimple inheritance model of Chapter 5. Mastering interfaces allows you to have full access tothe power of Java's completely object-oriented approach to programming. We also cover auseful technical feature of Java called inner classes. Inner classes help make your code cleanerand more concise.
In Chapter 7, we begin application programming in earnest. We show how you can makewindows, how to paint on them, how to draw with geometric shapes, how to format text inmultiple fonts, and how to display images.
Chapter 8 is a detailed discussion of the event model of the AWT, the abstract windows toolkit.(We discuss the event model that was added to Java 1.1, not the obsolete and simplistic 1.0event model.) You'll see how to write the code that responds to events like mouse clicks or keypresses. Along the way you'll see how to handle basic GUI elements like buttons and panels.
Chapter 9 discusses the Swing GUI toolkit in great detail. The Swing toolkit allows you to builda cross-platform graphical user interface. You'll learn all about the various kinds of buttons, textcomponents, borders, sliders, list boxes, menus, and dialog boxes. However, some of the moreadvanced components are discussed in Volume 2.
After you finish Chapter 9, you finally have all mechanisms in place to write applets, those mini-programsthat can live inside a Web page, and so applets are the topic of Chapter 10. We showyou a number of useful and fun applets, but more importantly, we look at applets as a method ofprogram deployment. We then describe how to package applications in JAR files, and how todeliver applications over the internet with the Java Web Start mechanism. Finally, we explain howJava programs can store and retrieve configuration information once they have been deployed.
Chapter 11 discusses exception handling, Java's robust mechanism to deal with the fact thatbad things can happen to good programs. For example, a network connection can becomeunavailable in the middle of a file download, a disk can fill up, and so on. Exceptions giveyou 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 stillmight fail to work as expected. In the second half of this chapter, we give you a large numberof useful debugging tips. Finally, we guide you through sample sessions with varioustools: the JDB debugger, the debugger of an integrated development environment, aprofiler, a code coverage testing tool, and the AWT robot.
We finish the book with input and output handling. In Java, all I/O is handled through so-calledstreams. Streams let you deal in a uniform manner with communicating with any source of data,such as files, network connections, or memory blocks. We include detailed coverage of the readerand writer classes, which make it easy to deal with Unicode. We show you what goes on underthe hood when you use the object serialization mechanism, which makes saving and loadingobjects easy and convenient. Finally, we cover several libraries that have been added to SDK 1.4:the "new I/O" classes that contain support for advanced and more efficient file operations, andthe regular expression library.
An appendix lists the Java language keywords.You can expand the file either with one of the fam-iliarunzipping programs or simply with the jar utility that is part of the Java SoftwareDevelopment Kit. See Chapter 2 for more information about installing the SoftwareDevelopment Kit and the sample code.