Note: This document requires the installation of the fonts Georgia, Verdana and Andale Mono (code font) for proper viewing. These can be found at: http://sourceforge.net/project/showfiles.php?group_id=34153&release_id=105355
Modifications in Revision 4.0 (11/20/02 Final version as will be in print)
- Incorporated remainder of copyedits.
- Preface and introduction completed.
- Index completed
- Rewrote debugging section in Chapter 15 that was still raw
- Various corrections based on
reviews
Modifications in Revision 3.0 (10/29/02)
- Reorganized chapters into their final form and numbering. Split Chapter 1 by
moving Analysis and design to Chapter 16.
- Modified the description of the chapters in the introduction. (This needs to
be revisited again.
- Finished threading chapter. Dining philosophers problem added to threading
chapter.
- Edited/rewrote chapters 1 - 11, 14 and Appendix A, B & D, which went to
production.
- Added Applet Signing and Java Web Start sections to Creating Windows
and Applets.
- Added examples showing threading in Creating Windows and
Applets.
- Added improved access control to most classes (more private fields, in
particular).
- Made general improvements throughout the code base.
- Changed cleanup( ) to dispose( )
- Changed friendly to package access
- Changed function to method most places
- Added Preferences API section
- Removed Microsoft EULA (no longer needed for CD)
- Rewrote c14:ShowAddListeners.java to use regular expressions;
refactored
- Renamed death condition to termination
condition
Modifications in Revision 2.0 (9/13/2002)
- Completed part of the rewrite of the threading chapter. This simplifies the
introduction to threading and removes all the GUI examples, so that the
threading chapter may be moved to appear earlier in the book.
- Reorganized material into reasonably final form, and assigned chapter
numbers. Chapters may still migrate.
- Finished com.bruceeckel.simpletest framework and integrated all
test-instrumented examples back into the main book. Added prose for testing
system in Chapter 15. Also updated most examples in book to reflect improvements
in testing system. Note: we are still refactoring this code to make it simpler.
Stay tuned.
- Added sections on JDK 1.4 assertions, including design-by-contract, to
Chapter 15.
- Added JUnit introduction and example to Chapter 15.
- Changed static inner class to nested class.
- Modified c04:Garbage.java so it wouldnt fail on fast machines,
added description.
- Moved BangBean2.java into the GUI chapter, since the non-GUI
threading chapter will now appear before the GUI
chapter.
Modifications in Revision 1.0 (7/12/2002):
- Changed to email-based BackTalk system, which is much simpler to use and may
be used while reading the document offline.
- Added Testing and Debugging chapter, currently numbered 15.
This includes a simple testing system and an introduction to JUnit, as well as a
thorough introduction to Logging and an introduction to using debuggers and
profilers.
- Added test framework to examples in the book. Not all examples are fully
tested yet, but most are at least executed. Comment flags on examples indicate
the testing status of each. Significant change: program output is displayed and
tested directly in the source, so readers can see what the output will actually
be.
- Change to Ant as the build tool, added package statements to
disambiguate duplicate names so Ant wont complain. Running Ant on the
book not only compiles but also runs the aforementioned tests.
- HTML is now generated by a new tool called LogicTran (http://www.Logictran.com). Still learning to
use this one, so early versions will be a bit rough.
- Replaced Thread Group section in multithreading chapter.
- Removed JNI appendix (available in the electronic 2nd edition on
the CD or via download from www.MindView.net)
- Removed Jini section (available in the electronic 2nd edition on
the CD or via download from www.MindView.net)
- Removed Corba section (available in the electronic 2nd edition on
the CD or via download from www.MindView.net) after talking to Dave Bartlett
(Corba & XML expert), who observed that Corba has gone quiet and everyone
has gone up a level to the use of XML for system integration instead of
Corba.
- Made a number of technical corrections suggested over the last 2 years. Most
suggestions have been archived but not made
yet.
Todo:
- Add cloud of teachers, mentors, consultants re: Larrys
suggestion
- Check for double spaces in text, replace ( ) with ( ), correct
em-dashes with
- Refresh TOC page numbers and
Index
Next edition:
- A chapter on strings
- A chapter on generics
- Better unit
testing
Thinking
in
Java
Third Edition
Bruce Eckel
President, MindView, Inc.
Comments from readers:
Much better than any other Java book Ive seen. Make that by an order of magnitude... very complete, with excellent right-to-the-point examples and intelligent, not dumbed-down, explanations ... In contrast to many other Java books I found it to be unusually mature, consistent, intellectually honest, well-written and precise. IMHO, an ideal book for studying Java. Anatoly Vorobey, Technion University, Haifa, Israel
One of the absolutely best programming tutorials Ive seen for any language. Joakim Ziegler, FIX sysop
Thank you for your wonderful, wonderful book on Java. Dr. Gavin Pillay, Registrar, King Edward VIII Hospital, South Africa
Thank you again for your awesome book. I was really floundering (being a non-C programmer), but your book has brought me up to speed as fast as I could read it. Its really cool to be able to understand the underlying principles and concepts from the start, rather than having to try to build that conceptual model through trial and error. Hopefully I will be able to attend your seminar in the not-too-distant future. Randall R. Hawley, Automation Technician, Eli Lilly & Co.
The best computer book writing I have seen. Tom Holland
This is one of the best books Ive read about a programming language... The best book ever written on Java. Ravindra Pai, Oracle Corporation, SUNOS product line
This is the best book on Java that I have ever found! You have done a great job. Your depth is amazing. I will be purchasing the book when it is published. I have been learning Java since October 96. I have read a few books, and consider yours a MUST READ. These past few months we have been focused on a product written entirely in Java. Your book has helped solidify topics I was shaky on and has expanded my knowledge base. I have even used some of your explanations as information in interviewing contractors to help our team. I have found how much Java knowledge they have by asking them about things I have learned from reading your book (e.g., the difference between arrays and Vectors). Your book is great! Steve Wilkinson, Senior Staff Specialist, MCI Telecommunications
Great book. Best book on Java I have seen so far. Jeff Sinclair, Software Engineer, Kestral Computing
Thank you for Thinking in Java. Its time someone went beyond mere language description to a thoughtful, penetrating analytic tutorial that doesnt kowtow to The Manufacturers. Ive read almost all the othersonly yours and Patrick Winstons have found a place in my heart. Im already recommending it to customers. Thanks again. Richard Brooks, Java Consultant, Sun Professional Services, Dallas
Bruce, your book is wonderful! Your explanations are clear and direct. Through your fantastic book I have gained a tremendous amount of Java knowledge. The exercises are also FANTASTIC and do an excellent job reinforcing the ideas explained throughout the chapters. I look forward to reading more books written by you. Thank you for the tremendous service that you are providing by writing such great books. My code will be much better after reading Thinking in Java. I thank you and I'm sure any programmers who will have to maintain my code are also grateful to you. Yvonne Watkins, Java Artisan, Discover Technologies, Inc.
Other books cover the WHAT of Java (describing the syntax and the libraries) or the HOW of Java (practical programming examples). Thinking in Java is the only book I know that explains the WHY of Java; why it was designed the way it was, why it works the way it does, why it sometimes doesnt work, why its better than C++, why its not. Although it also does a good job of teaching the what and how of the language, Thinking in Java is definitely the thinking persons choice in a Java book. Robert S. Stephenson
Thanks for writing a great book. The more I read it the better I like it. My students like it, too. Chuck Iverson
I just want to commend you for your work on Thinking in Java. It is people like you that dignify the future of the Internet and I just want to thank you for your effort. It is very much appreciated. Patrick Barrell, Network Officer Mamco, QAF Mfg. Inc.
I really, really appreciate your enthusiasm and your work. I download every revision of your online books and am looking into languages and exploring what I would never have dared (C#, C++, Python, and Ruby, as a side effect) . I have at least 15 other Java books (I needed 3 to make both JavaScript and PHP viable!) and subscriptions to Dr. Dobbs, JavaPro, JDJ, JavaWorld, etc., as a result of my pursuit of Java (and Enterprise Java) and certification but I still keep your book in higher esteem. It truly is a thinking mans book. I subscribe to your newsletter and hope to one day sit down and solve some of the problems you extend for the solutions guides for you (I'll buy the guides!) in appreciation. But in the meantime, thanks a lot. Joshua Long, www.starbuxman.com
Most of the Java books out there are fine for a start, and most just have beginning stuff and a lot of the same examples. Yours is by far the best advanced thinking book Ive seen. Please publish it soon! ... I also bought Thinking in C++ just because I was so impressed with Thinking in Java. George Laframboise, LightWorx Technology Consulting, Inc.
I wrote to you earlier about my favorable impressions regarding your Thinking in C++ (a book that stands prominently on my shelf here at work). And today Ive been able to delve into Java with your e-book in my virtual hand, and I must say (in my best Chevy Chase from Modern Problems) I like it! Very informative and explanatory, without reading like a dry textbook. You cover the most important yet the least covered concepts of Java development: the whys. Sean Brady
I develop in both Java and C++, and both of your books have been lifesavers for me. If I am stumped about a particular concept, I know that I can count on your books to a) explain the thought to me clearly and b) have solid examples that pertain to what I am trying to accomplish. I have yet to find another author that I continually whole-heartedly recommend to anyone who is willing to listen. Josh Asbury, A^3 Software Consulting, Cincinnati, OH
Your examples are clear and easy to understand. You took care of many important details of Java that cant be found easily in the weak Java documentation. And you dont waste the readers time with the basic facts a programmer already knows. Kai Engert, Innovative Software, Germany
Im a great fan of your Thinking in C++ and have recommended it to associates. As I go through the electronic version of your Java book, Im finding that youve retained the same high level of writing. Thank you! Peter R. Neuwald
VERY well-written Java book...I think youve done a GREAT job on it. As the leader of a Chicago-area Java special interest group, Ive favorably mentioned your book and Web site several times at our recent meetings. I would like to use Thinking in Java as the basis for a part of each monthly SIG meeting, in which we review and discuss each chapter in succession. Mark Ertes
By the way, printed TIJ2 in Russian is still selling great, and remains bestseller. Learning Java became synonym of reading TIJ2, isn't that nice? Ivan Porty, translator and publisher of Thinking In Java 2nd Edition in Russian
I really appreciate your work and your book is good. I recommend it here to our users and Ph.D. students. Hugues Leroy // Irisa-Inria Rennes France, Head of Scientific Computing and Industrial Tranfert
OK, Ive only read about 40 pages of Thinking in Java, but Ive already found it to be the most clearly written and presented programming book Ive come across...and Im a writer, myself, so I am probably a little critical. I have Thinking in C++ on order and cant wait to crack itIm fairly new to programming and am hitting learning curves head-on everywhere. So this is just a quick note to say thanks for your excellent work. I had begun to burn a little low on enthusiasm from slogging through the mucky, murky prose of most computer bookseven ones that came with glowing recommendations. I feel a whole lot better now. Glenn Becker, Educational Theatre Association
Thank you for making your wonderful book available. I have found it immensely useful in finally understanding what I experienced as confusing in Java and C++. Reading your book has been very satisfying. Felix Bizaoui, Twin Oaks Industries, Louisa, Va.
I must congratulate you on an excellent book. I decided to have a look at Thinking in Java based on my experience with Thinking in C++, and I was not disappointed. Jaco van der Merwe, Software Specialist, DataFusion Systems Ltd, Stellenbosch, South Africa
This has to be one of the best Java books Ive seen. E.F. Pritchard, Senior Software Engineer, Cambridge Animation Systems Ltd., United Kingdom
Your book makes all the other Java books Ive read or flipped through seem doubly useless and insulting. Brett g Porter, Senior Programmer, Art & Logic
I have been reading your book for a week or two and compared to the books I have read earlier on Java, your book seems to have given me a great start. I have recommended this book to a lot of my friends and they have rated it excellent. Please accept my congratulations for coming out with an excellent book. Rama Krishna Bhupathi, Software Engineer, TCSI Corporation, San Jose
Just wanted to say what a brilliant piece of work your book is. Ive been using it as a major reference for in-house Java work. I find that the table of contents is just right for quickly locating the section that is required. Its also nice to see a book that is not just a rehash of the API nor treats the programmer like a dummy. Grant Sayer, Java Components Group Leader, Ceedata Systems Pty Ltd, Australia
Wow! A readable, in-depth Java book. There are a lot of poor (and admittedly a couple of good) Java books out there, but from what Ive seen yours is definitely one of the best. John Root, Web Developer, Department of Social Security, London
Ive just started Thinking in Java. I expect it to be very good because I really liked Thinking in C++ (which I read as an experienced C++ programmer, trying to stay ahead of the curve). Im somewhat less experienced in Java, but expect to be very satisfied. You are a wonderful author. Kevin K. Lewis, Technologist, ObjectSpace, Inc.
I think its a great book. I learned all I know about Java from this book. Thank you for making it available for free over the Internet. If you wouldnt have Id know nothing about Java at all. But the best thing is that your book isnt a commercial brochure for Java. It also shows the bad sides of Java. YOU have done a great job here. Frederik Fix, Belgium
I have been hooked to your books all the time. A couple of years ago, when I wanted to start with C++, it was C++ Inside & Out which took me around the fascinating world of C++. It helped me in getting better opportunities in life. Now, in pursuit of more knowledge and when I wanted to learn Java, I bumped into Thinking in Javano doubts in my mind as to whether I need some other book. Just fantastic. It is more like rediscovering myself as I get along with the book. It is just a month since I started with Java, and heartfelt thanks to you, I am understanding it better now. Anand Kumar S., Software Engineer, Computervision, India
Your book stands out as an excellent general introduction. Peter Robinson, University of Cambridge Computer Laboratory
Its by far the best material I have come across to help me learn Java and I just want you to know how lucky I feel to have found it. THANKS! Chuck Peterson, Product Leader, Internet Product Line, IVIS International
The book is great. Its the third book on Java Ive started and Im about two-thirds of the way through it now. I plan to finish this one. I found out about it because it is used in some internal classes at Lucent Technologies and a friend told me the book was on the Net. Good work. Jerry Nowlin, MTS, Lucent Technologies
Of the six or so Java books Ive accumulated to date, your Thinking in Java is by far the best and clearest. Michael Van Waas, Ph.D., President, TMR Associates
I just want to say thanks for Thinking in Java. What a wonderful book youve made here! Not to mention downloadable for free! As a student I find your books invaluable (I have a copy of C++ Inside Out, another great book about C++), because they not only teach me the how-to, but also the whys, which are of course very important in building a strong foundation in languages such as C++ or Java. I have quite a lot of friends here who love programming just as I do, and Ive told them about your books. They think its great! Thanks again! By the way, Im Indonesian and I live in Java. Ray Frederick Djajadinata, Student at Trisakti University, Jakarta
The mere fact that you have made this work free over the Net puts me into shock. I thought Id let you know how much I appreciate and respect what youre doing. Shane LeBouthillier, Computer Engineering student, University of Alberta, Canada
I have to tell you how much I look forward to reading your monthly column. As a newbie to the world of object oriented programming, I appreciate the time and thoughtfulness that you give to even the most elementary topic. I have downloaded your book, but you can bet that I will purchase the hard copy when it is published. Thanks for all of your help. Dan Cashmer, B. C. Ziegler & Co.
Just want to congratulate you on a job well done. First I stumbled upon the PDF version of Thinking in Java. Even before I finished reading it, I ran to the store and found Thinking in C++. Now, I have been in the computer business for over eight years, as a consultant, software engineer, teacher/trainer, and recently as self-employed, so Id like to think that I have seen enough (not have seen it all, mind you, but enough). However, these books cause my girlfriend to call me a geek. Not that I have anything against the conceptit is just that I thought this phase was well beyond me. But I find myself truly enjoying both books, like no other computer book I have touched or bought so far. Excellent writing style, very nice introduction of every new topic, and lots of wisdom in the books. Well done. Simon Goland, simonsez@smartt.com, Simon Says Consulting, Inc.
I must say that your Thinking in Java is great! That is exactly the kind of documentation I was looking for. Especially the sections about good and poor software design using Java. Dirk Duehr, Lexikon Verlag, Bertelsmann AG, Germany
Thank you for writing two great books (Thinking in C++, Thinking in Java). You have helped me immensely in my progression to object oriented programming. Donald Lawson, DCL Enterprises
Thank you for taking the time to write a really helpful book on Java. If teaching makes you understand something, by now you must be pretty pleased with yourself. Dominic Turner, GEAC Support
Its the best Java book I have ever readand I read some. Jean-Yves MENGANT, Chief Software Architect NAT-SYSTEM, Paris, France
Thinking in Java gives the best coverage and explanation. Very easy to read, and I mean the code fragments as well. Ron Chan, Ph.D., Expert Choice, Inc., Pittsburgh PA
Your book is great. I have read lots of programming books and your book still adds insights to programming in my mind. Ningjian Wang, Information System Engineer, The Vanguard Group
Thinking in Java is an excellent and readable book. I recommend it to all my students. Dr. Paul Gorman, Department of Computer Science, University of Otago, Dunedin, New Zealand
With your book, I have now understood what object oriented programming means. ... I believe that Java is much more straightforward and often even easier than Perl. Torsten Römer, Orange Denmark
You make it possible for the proverbial free lunch to exist, not just a soup kitchen type of lunch but a gourmet delight for those who appreciate good software and books about it. Jose Suriol, Scylax Corporation
Thanks for the opportunity of watching this book grow into a masterpiece! IT IS THE BEST book on the subject that Ive read or browsed. Jeff Lapchinsky, Programmer, Net Results Technologies
Your book is concise, accessible and a joy to read. Keith Ritchie, Java Research & Development Team, KL Group Inc.
It truly is the best book Ive read on Java! Daniel Eng
The best book I have seen on Java! Rich Hoffarth, Senior Architect, West Group
Thank you for a wonderful book. Im having a lot of fun going through the chapters. Fred Trimble, Actium Corporation
You have mastered the art of slowly and successfully making us grasp the details. You make learning VERY easy and satisfying. Thank you for a truly wonderful tutorial. Rajesh Rau, Software Consultant
Thinking in Java rocks the free world! Miko OSullivan, President, Idocs Inc. Feedback
About Thinking in C++:
Best Book! Winner of the
1995 Software Development Magazine Jolt Award!
This book is a tremendous achievement. You owe it to yourself to have a copy on your shelf. The chapter on iostreams is the most comprehensive and understandable treatment of that subject Ive seen to date.
Al Stevens
Contributing Editor, Doctor Dobbs Journal
Eckels book is the only one to so clearly explain how to rethink program construction for object orientation. That the book is also an excellent tutorial on the ins and outs of C++ is an added bonus.
Andrew Binstock
Editor, Unix Review
Bruce continues to amaze me with his insight into C++, and Thinking in C++ is his best collection of ideas yet. If you want clear answers to difficult questions about C++, buy this outstanding book.
Gary Entsminger
Author, The Tao of Objects
Thinking in C++ patiently and methodically explores the issues of when and how to use inlines, references, operator overloading, inheritance, and dynamic objects, as well as advanced topics such as the proper use of templates, exceptions and multiple inheritance. The entire effort is woven in a fabric that includes Eckels own philosophy of object and program design. A must for every C++ developers bookshelf, Thinking in C++ is the one C++ book you must have if youre doing serious development with C++.
Richard Hale Shaw
Contributing Editor, PC Magazine
Thinking
in
Java
Third Edition
Bruce Eckel
President, MindView, Inc.
PRENTICE HALL
Professional Technical Reference
Upper Saddle River, New Jersey 07458
www.phptr.com
Library of Congress Cataloging-in-Publication Data
Eckel, Bruce.
Thinking in Java / Bruce Eckel.--3rd ed.
p. cm.
Includes bibliographical references and index.
ISBN 0-13-100287-2
1. Java (Computer program language) I. Title.
QA76.73.J38 E25 2003
005.13'3--dc21 2002042490
CIP
Acquisitions Editor: Paul Petralia
Editorial/Production Supervision: Nicholas Radhuber
Manufacturing Manager: Maura Zaldivar
Marketing Manager: Bryan Gambrel
Cover Design: Daniel Will-Harris
Interior Design: Daniel Will-Harris, www.will-harris.com
©2003 by Bruce Eckel, President, MindView, Inc.
Published by Pearson Education, Inc.
Publishing as Prentice Hall PTR
Upper Saddle River, NJ 07458
The information in this book is distributed on an as is basis, without warranty. While every precaution has been taken in the preparation of this book, neither the author nor the publisher shall have any liability to any person or entitle with respect to any liability, loss or damage caused or alleged to be caused directly or indirectly by instructions contained in this book or by the computer software or hardware products described herein.
All rights reserved. No part of this book may be reproduced, in any form or by any means, without permission in writing from the publisher.
Prentice Hall books are widely used by corporations and government agencies for training, marketing, and resale. The publisher offers discounts on this book when ordered in bulk quantities. For more information, contact the Corporate Sales Department at 800-382-3419, fax: 201-236-7141, email: corpsales@prenhall.com or write: Corporate Sales Department, Prentice Hall PTR, One Lake Street, Upper Saddle River, New Jersey 07458.
Java is a registered trademark of Sun Microsystems, Inc. Windows 95, Windows NT, Windows 2000 and Windows XP are trademarks of Microsoft Corporation. All other product names and company names mentioned herein are the property of their respective owners.
Printed in the United States of America
10 9 8 7 6 5 4 3 2 1
ISBN 0-13-100287-2
Pearson Education LTD.
Pearson Education Australia PTY, Limited
Pearson Education Singapore, Pte. Ltd
Pearson Education North Asia Ltd
Pearson Education Canada, Ltd.
Pearson Educación de Mexico, S.A. de C.V.
Pearson Education-Japan
Pearson Education Malaysia, Pte. Ltd
Check www.MindView.net
for in-depth details
and the date and location
of the next
Thinking in Java Seminar
- Based on this book
- Taught by the best MindView team members
- Personal attention during the seminar
- Includes in-class programming exercises
- Intermediate/Advanced seminars also offered
- Hundreds have already enjoyed this seminar
see the Web site for
their testimonials
Bruce Eckels Hands-On Java
Seminar
Multimedia CD: 3rd Edition follows this
book
Its like coming to the seminar!
Available at
www.BruceEckel.com
- The Hands-On Java Seminar captured on a Multimedia CD!
- Overhead slides and synchronized audio voice narration for all the lectures.
Just play it to see and hear the lectures!
- Created and narrated by Bruce Eckel.
- Based on the material in this book.
- Demo lecture available at
www.BruceEckel.com
Dedication
To the person who, even now,
is creating the next great computer language
Overview
Whats Inside