📄 Page
1
(This page has no text content)
📄 Page
2
What they’re saying about Head First “Java technology is everywhere—If you develop software and haven’t learned Java, it’s definitely time to dive in—Head First.” — Scott McNealy, Sun Microsystems Chairman, President and CEO “Beyond the engaging style that drags you forward from know-nothing into exalted Java warrior status, Head First Java covers a huge amount of practical matters that other texts leave as the dreaded “exercise for the reader...” It’s clever, wry, hip and practical—there aren’t a lot of textbooks that can make that claim and live up to it while also teaching you about object serialization and network launch protocols. ” — Dr. Dan Russell, Director of User Sciences and Experience Research IBM Almaden Research Center (and teaches Artificial Intelligence at Stanford University) “Kathy and Bert’s ‘Head First Java’ transforms the printed page into the closest thing to a GUI you’ve ever seen. In a wry, hip manner, the authors make learning Java an engaging ‘what’re they gonna do next?’ experience.” — Warren Keuffel, Software Development Magazine “It’s fast, irreverent, fun, and engaging. Be careful—you might actually learn something!” — Ken Arnold, former Senior Engineer at Sun Microsystems Co-author (with James Gosling, creator of Java), “The Java Programming Language” Amazon named Head First Java a Top Ten Editor’s Choice for Computer Books of 2003 (first edition) Software Development Magazine named Head First Java a finalist for the 14th Annual Jolt Cola/Product Excellence Awards “...the only way to decide the worth of a tutorial is to decide how well it teaches. Head First Java excels at teaching. OK, I thought it was silly... then I realized that I was thoroughly learning the topics as I went through the book.” “The style of Head First Java made learning, well, easier.” — slashdot (honestpuck’s review) “Head First Java is like Monty Python meets the gang of four... the text is broken up so well by puzzles and stories, quizzes and examples, that you cover ground like no computer book before.” — Douglas Rowe, Columbia Java Users Group
📄 Page
3
“Read Head First Java and you will once again experience fun in learning...For people who like to learn new programming languages, and do not come from a computer science or programming background, this book is a gem... This is one book that makes learning a complex computer language fun. I hope that there are more authors who are willing to break out of the same old mold of ‘traditional’ writing styles. Learning computer languages should be fun, not onerous.” — Judith Taylor, Southeast Ohio Macromedia User Group “A few days ago I received my copy of Head First Java by Kathy Sierra and Bert Bates. I’m only part way through the book, but what’s amazed me is that even in my sleep-deprived state that first evening, I found myself thinking, ‘OK, just one more page, then I’ll go to bed.’ “ — Joe Litton “If you’re relatively new to programming and you are interested in Java, here’s your book...Covering everything from objects to creating graphical user interfaces (GUI), exception (error) handling to net- working (sockets) and multithreading, even packaging up your pile of classes into one installation file, this book is quite complete...If you like the style...I’m certain you’ll love the book and, like me, hope that the Head First series will expand to many other subjects!” — LinuxQuestions.org “I was ADDICTED to the book’s short stories, annotated code, mock interviews, and brain exercises.” — Michael Yuan, author, Enterprise J2ME Praise for Head First Java “ ‘Head First Java’... gives new meaning to their marketing phrase `There’s an O Reilly for that.` I picked this up because several others I respect had described it in terms like ‘revolutionary’ and a described a radically different approach to the textbook. They were (are) right... In typical O’Reilly fashion, they’ve taken a scientific and well considered approach. The result is funny, irreverent, topical, interactive, and brilliant...Reading this book is like sitting in the speakers lounge at a view conference, learning from – and laughing with – peers... If you want to UNDERSTAND Java, go buy this book.” — Andrew Pollack, www.thenorth.com “If you want to learn Java, look no further: welcome to the first GUI-based technical book! This perfectly-executed, ground-breaking format delivers benefits other Java texts simply can’t... Prepare yourself for a truly remarkable ride through Java land.” — Neil R. Bauman, Captain & CEO, Geek Cruises (www.GeekCruises.com) “If anyone in the world is familiar with the concept of ‘Head First,’ it would be me. This book is so good, I’d marry it on TV!” — Rick Rockwell, Comedian The original FOX Television “Who Wants to Marry a Millionaire” groom “This stuff is so fricking good it makes me wanna WEEP! I’m stunned.” — Floyd Jones, Senior Technical Writer/Poolboy, BEA
📄 Page
4
“FINALLY - a Java book written the way I would’a wrote it if I were me. Seriously though - this book absolutely blows away every other software book I’ve ever read... A good book is very difficult to write... you have to take a lot of time to make things unfold in a natural, “reader oriented” sequence. It’s a lot of work. Most authors clearly aren’t up to the challenge. Congratulations to the Head First EJB team for a first class job! — Wally Flint “I could not have imagined a person smiling while studying an IT book! Using Head First EJB materials, I got a great score (91%) and set a world record as the youngest SCBCD, 14 years.” — Afsah Shafquat (world’s youngest SCBCD) Praise for other Head First books co-authored by Kathy and Bert “I feel like a thousand pounds of books have just been lifted off of my head.” — Ward Cunningham, inventor of the Wiki and founder of the Hillside Group “I laughed, I cried, it moved me.” — Dan Steinberg, Editor-in-Chief, java.net “My first reaction was to roll on the floor laughing. After I picked myself up, I realized that not only is the book technically accurate, it is the easiest to understand introduction to design patterns that I have seen.” — Dr. Timothy A. Budd, Associate Professor of Computer Science at Oregon State University author of more than a dozen books including C++ for Java Programmers “Just the right tone for the geeked-out, casual-cool guru coder in all of us. The right reference for prac- tical development strategies—gets my brain going without having to slog through a bunch of tired stale professor-speak.” — Travis Kalanick, Founder of Scour and Red Swoosh Member of the MIT TR100 “This Head First Servlets book is as good as the Head First EJB book, which made me laugh AND gave me 97% on the exam!” — Jef Cumps, J2EE consultant, Cronos Amazon named Head First Servlets a Top Ten Editor’s Choice for Computer Books of 2004 (first edition) Software Development Magazine named Head First Servlets and Head First Design Patterns finalists for the 15th Annual Product Excellence Awards
📄 Page
5
Make it Stick Other Java books from O’Reilly Head First Design Patterns Head First Servlets Head First EJB™ Ant: The Defi nitive Guide™ Better, Faster, Lighter Java™ Enterprise JavaBeans™ Hibernate: A Developer’s Notebook Java™ 1.5 Tiger: A Developer’s Notebook Java™ Cookbook Java™ in a Nutshell Java™ Network Programming Java™ Servlet & JSP Cookbook Java™ Swing JavaServer Faces™ JavaServer Pages™ Programming Jakarta Struts Tomcat: the Defi nitive Guide Be watching for more books in the Head First series
📄 Page
6
Head First Java™ Second Edition Beijing • Cambridge • Köln • Paris • Sebastopol • Taipei • Tokyo Wouldn’t it be dreamy if there was a Java book that was more stimulating than waiting in line at the DMV to renew your driver’s license? It’s probably just a fantasy... Kathy Sierra Bert Bates
📄 Page
7
Head First Java™ Second Edition by Kathy Sierra and Bert Bates Copyright © 2003, 2005 by O’Reilly Media, Inc. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly Media books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (safari.oreilly.com). For more information, contact our corporate/institutional sales department: (800) 998-9938 or corporate@oreilly.com. Editor: Mike Loukides Cover Designer: Edie Freedman Interior Designers: Kathy Sierra and Bert Bates Printing History: May 2003: First Edition. February 2005: Second Edition. (You might want to pick up a copy of both editions... for your kids. Think eBay™) The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Java and all Java-based trademarks and logos are trademarks or registered trademarks of Sun Microsystems, Inc., in the United States and other countries. O’Reilly Media, Inc. is independent of Sun Microsystems. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O’Reilly Media, Inc. was aware of a trademark claim, the designations have been printed in caps or initial caps. While every precaution has been taken in the preparation of this book, the publisher and the authors assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. In other words, if you use anything in Head First Java™ to, say, run a nuclear power plant or air traffic control system, you’re on your own. ISBN: 0596009208 [M]
📄 Page
8
To our brains, for always being there (despite shaky evidence)
📄 Page
9
Creators of the Head First series Kathy Sierra Kathy has been interested in learning theory since her days as a game designer (she wrote games for Virgin, MGM, and Amblin’). She developed much of the Head First format while teaching New Media Authoring for UCLA Extension’s Entertainment Studies program. More recently, she’s been a master trainer for Sun Microsystems, teaching Sun’s Java instructors how to teach the latest Java technologies, and a lead developer of several of Sun’s Java programmer and developer certifi cation exams. Together with Bert Bates, she has been actively using the concepts in Head First Java to teach hundreds of trainers, developers and even non-programmers. She is also the founder of one of the largest Java community websites in the world, javaranch.com, and the Creating Passionate Users blog. Along with this book, Kathy co-authored Head First Servlets, Head First EJB, and Head First Design Patterns. In her spare time she enjoys her new Icelandic horse, skiing, running, and the speed of light. kathy@wickedlysmart.com Bert is a software developer and architect, but a decade-long stint in artifi cial intelligence drove his interest in learning theory and technology- based training. He’s been teaching programming to clients ever since. Recently, he’s been a member of the development team for several of Sun’s Java Certifi cation exams. He spent the fi rst decade of his software career travelling the world to help broadcast clients like Radio New Zealand, the Weather Channel, and the Arts & Entertainment Network (A & E). One of his all-time favorite projects was building a full rail system simulation for Union Pacifi c Railroad. Bert is a hopelessly addicted Go player, and has been working on a Go program for way too long. He’s a fair guitar player, now trying his hand at banjo, and likes to spend time skiing, running, and trying to train (or learn from) his Icelandic horse Andi. Bert co-authored the same books as Kathy, and is hard at work on the next batch of books (check the blog for updates). You can sometimes catch him on the IGS Go server (under the login jackStraw). terrapin@wickedlysmart.com Bert Bates Although Kathy and Bert try to answer as much email as they can, the volume of mail and their travel schedule makes that difficult. The best (quickest) way to get technical help with the book is at the very active Java beginners forum at javaranch.com.
📄 Page
10
ix i Intro Your brain on Java. Here you are trying to learn something, while here your brain is doing you a favor by making sure the learning doesn’t stick. Your brain’s thinking, “Better leave room for more important things, like which wild animals to avoid and whether naked snowboarding is a bad idea.” So how do you trick your brain into thinking that your life depends on knowing Java? Who is this book for? xxii What your brain is thinking xxiii Metacognition xxv Bend your brain into submission xxvii What you need for this book xxviii Technical editors xxx Acknowledgements xxxi Table of Contents (summary) Intro xxi 1 Breaking the Surface: a quick dip 1 2 A Trip to Objectville: yes, there will be objects 27 3 Know Your Variables: primitives and references 49 4 How Objects Behave: object state affects method behavior 71 5 Extra-Strength Methods: flow control, operations, and more 95 6 Using the Java Library: so you don’t have to write it all yourself 125 7 Better Living in Objectville: planning for the future 165 8 Serious Polymorphism: exploiting abstract classes and interfaces 197 9 Life and Death of an Object: constructors and memory management 235 10 Numbers Matter: math, formatting, wrappers, and statics 273 11 Risky Behavior: exception handling 315 12 A Very Graphic Story: intro to GUI, event handling, and inner classes 353 13 Work on Your Swing: layout managers and components 399 14 Saving Objects: serialization and I/O 429 15 Make a Connection: networking sockets and multithreading 471 16 Data Structures: collections and generics 529 17 Release Your Code: packaging and deployment 581 18 Distributed Computing: RMI with a dash of servlets, EJB, and Jini 607 A Appendix A: Final code kitchen 649 B Appendix B: Top Ten Things that didn’t make it into the rest of the book 659 Index 677 Table of Contents (the full version)
📄 Page
11
x You Bet Shoot Me 2 A Trip to Objectville I was told there would be objects. In Chapter 1, we put all of our code in the main() method. That’s not exactly object-oriented. So now we’ve got to leave that procedural world behind and start making some objects of our own. We’ll look at what makes object-oriented (OO) development in Java so much fun. We’ll look at the difference between a class and an object. We’ll look at how objects can improve your life. 1 Breaking the Surface Java takes you to new places. From its humble release to the public as the (wimpy) version 1.02, Java seduced programmers with its friendly syntax, object-oriented features, memory management, and best of all—the promise of portability. We’ll take a quick dip and write some code, compile it, and run it. We’re talking syntax, loops, branching, and what makes Java so cool. Dive in. The way Java works 2 Code structure in Java 7 Anatomy of a class 8 The main() method 9 Looping 11 Conditional branching (if tests) 13 Coding the “99 bottles of beer” app 14 Phrase-o-matic 16 Fireside chat: compiler vs. JVM 18 Exercises and puzzles 20 Method Party() 0 aload_0 1 invokespe- cial #1 <Method java.lang.Object()> 4 return Compiled bytecode Virtual Machines Chair Wars (Brad the OO guy vs. Larry the procedural guy) 28 Inheritance (an introduction) 31 Overriding methods (an introduction) 32 What’s in a class? (methods, instance variables) 34 Making your fi rst object 36 Using main() 38 Guessing Game code 39 Exercises and puzzles 42
📄 Page
12
xi pass-by-value means pass-by-copy 3 Know Your Variables Variables come in two flavors: primitive and reference. There’s gotta be more to life than integers, Strings, and arrays. What if you have a PetOwner object with a Dog instance variable? Or a Car with an Engine? In this chapter we’ll unwrap the mysteries of Java types and look at what you can declare as a variable, what you can put in a variable, and what you can do with a variable. And we’ll finally see what life is truly like on the garbage-collectible heap. Dog reference Dog objec t size 24 int fido 4 How Objects Behave State affects behavior, behavior affects state. We know that objects have state and behavior, represented by instance variables and methods. Now we’ll look at how state and behavior are related. An object’s behavior uses an object’s unique state. In other words, methods use instance variable values. Like, “if dog weight is less than 14 pounds, make yippy sound, else...” Let’s go change some state! 00000111 int X 00000111 int Z copy of x foo.go(x); void go(int z){ } Declaring a variable (Java cares about type) 50 Primitive types (“I’d like a double with extra foam, please”) 51 Java keywords 53 Reference variables (remote control to an object) 54 Object declaration and assignment 55 Objects on the garbage-collectible heap 57 Arrays (a fi rst look) 59 Exercises and puzzles 63 Methods use object state (bark different) 73 Method arguments and return types 74 Pass-by-value (the variable is always copied) 77 Getters and Setters 79 Encapsulation (do it or risk humiliation) 80 Using references in an array 83 Exercises and puzzles 88
📄 Page
13
xii 5 Extra-Strength Methods Let’s put some muscle in our methods. You dabbled with variables, played with a few objects, and wrote a little code. But you need more tools. Like operators. And loops. Might be useful to generate random numbers. And turn a String into an int, yeah, that would be cool. And why don’t we learn it all by building something real, to see what it’s like to write (and test) a program from scratch. Maybe a game, like Sink a Dot Com (similar to Battleship). 6 Using the Java Library Java ships with hundreds of pre-built classes. You don’t have to reinvent the wheel if you know how to find what you need from the Java library, commonly known as the Java API. You’ve got better things to do. If you’re going to write code, you might as well write only the parts that are custom for your application. The core Java library is a giant pile of classes just waiting for you to use like building blocks. A B C D E F G 0 1 2 3 4 5 6 AskMe.com Pets.comG o 2 .c o m We’re gonna b uild the Sink a Dot Com game “Good to know there’s an ArrayList in the java.util package. But by myself, how would I have fi gured that out?” - Julia, 31, hand model Building the Sink a Dot Com game 96 Starting with the Simple Dot Com game (a simpler version) 98 Writing prepcode (pseudocode for the game) 100 Test code for Simple Dot Com 102 Coding the Simple Dot Com game 103 Final code for Simple Dot Com 106 Generating random numbers with Math.random() 111 Ready-bake code for getting user input from the command-line 112 Looping with for loops 114 Casting primitives from a large size to a smaller size 117 Converting a String to an int with Integer.parseInt() 117 Exercises and puzzles 118 Analying the bug in the Simple Dot Com Game 126 ArrayList (taking advantage of the Java API) 132 Fixing the DotCom class code 138 Building the real game (Sink a Dot Com) 140 Prepcode for the real game 144 Code for the real game 146 boolean expressions 151 Using the library (Java API) 154 Using packages (import statements, fully-qualifi ed names) 155 Using the HTML API docs and reference books 158 Exercises and puzzles 161
📄 Page
14
xiii Some classes just should not be instantiated 200 Abstract classes (can’t be instantiated) 201 Abstract methods (must be implemented) 203 Polymorphism in action 206 Class Object (the ultimate superclass of everything) 208 Taking objects out of an ArrayList (they come out as type Object) 211 Compiler checks the reference type (before letting you call a method) 213 Get in touch with your inner object 214 Polymorphic references 215 Casting an object reference (moving lower on the inheritance tree) 216 Deadly Diamond of Death (multiple inheritance problem) 223 Using interfaces (the best solution!) 224 Exercises and puzzles 230 7 Better Living in Objectville Plan your programs with the future in mind. What if you could write code that someone else could extend, easily? What if you could write code that was flexible, for those pesky last-minute spec changes? When you get on the Polymorphism Plan, you’ll learn the 5 steps to better class design, the 3 tricks to polymorphism, the 8 ways to make flexible code, and if you act now—a bonus lesson on the 4 tips for exploiting inheritance. 8 Serious Polymorphism Inheritance is just the beginning. To exploit polymorphism, we need interfaces. We need to go beyond simple inheritance to flexibility you can get only by designing and coding to interfaces. What’s an interface? A 100% abstract class. What’s an abstract class? A class that can’t be instantiated. What’s that good for? Read the chapter... Make it Stick Roses are red, violets are blue.Square IS-A Shape, the reverse isn’t true.Roses are red, violets are dear.Beer IS-A Drink, but not all drinks are beer.OK, your turn. Make one that shows the one- way-ness of the IS-A relationship. And remem- ber, if X extends Y, X IS-A Y must make sense. Object o = al.get(id); Dog d = (Dog) o; d.bark(); Object o Dog object Dog d cast the Object back to a Dog we know is there. Object Understanding inheritance (superclass and subclass relationships) 168 Designing an inheritance tree (the Animal simulation) 170 Avoiding duplicate code (using inheritance) 171 Overriding methods 172 IS-A and HAS-A (bathtub girl) 177 What do you inherit from your superclass? 180 What does inheritance really buy you? 182 Polymorphism (using a supertype reference to a subclass object) 183 Rules for overriding (don’t touch those arguments and return types!) 190 Method overloading (nothing more than method name re-use) 191 Exercises and puzzles 192
📄 Page
15
xiv 9 Life and Death of an Object Objects are born and objects die. You’re in charge. You decide when and how to construct them. You decide when to abandon them. The Garbage Collector (gc) reclaims the memory. We’ll look at how objects are created, where they live, and how to keep or abandon them efficiently. That means we’ll talk about the heap, the stack, scope, constructors, super constructors, null references, and gc eligibility. 10 Numbers Matter Do the Math. The Java API has methods for absolute value, rounding, min/max, etc. But what about formatting? You might want numbers to print exactly two decimal points, or with commas in all the right places. And you might want to print and manipulate dates, too. And what about parsing a String into a number? Or turning a number into a String? We’ll start by learning what it means for a variable or method to be static. ‘d’ is assigned a new Duck object, leaving the original (first) Duck object abandoned. That first Duck is toast.. Duck object Heap d Duck object When someone calls the go() method, this Duck is abandoned. His only reference ha s been reprogrammed for a different Duck. kid instance one kid instance two static variable: iceCream Static variables are shared by all instances of a class. instance variables: one per instance static variables: one per class The stack and the heap, where objects and variables live 236 Methods on the stack 237 Where local variables live 238 Where instance variables live 239 The miracle of object creation 240 Constructors (the code that runs when you say new) 241 Initializing the state of a new Duck 243 Overloaded constructors 247 Superclass constructors (constructor chaining) 250 Invoking overloaded constructors using this() 256 Life of an object 258 Garbage Collection (and making objects eligible) 260 Exercises and puzzles 266 Math class (do you really need an instance of it?) 274 static methods 275 static variables 277 Constants (static fi nal variables) 282 Math methods (random(), round(), abs(), etc.) 286 Wrapper classes (Integer, Boolean, Character, etc.) 287 Autoboxing 289 Number formatting 294 Date formatting and manipulation 301 Static imports 307 Exercises and puzzles 310
📄 Page
16
xv 11 Risky Behavior Stuff happens. The file isn’t there. The server is down. No matter how good a programmer you are, you can’t control everything. When you write a risky method, you need code to handle the bad things that might happen. But how do you know when a method is risky? Where do you put the code to handle the exceptional situation? In this chapter, we’re going to build a MIDI Music Player, that uses the risky JavaSound API, so we better find out. 12 A Very Graphic Story Face it, you need to make GUIs. Even if you believe that for the rest of your life you’ll write only server-side code, sooner or later you’ll need to write tools, and you’ll want a graphical interface. We’ll spend two chapters on GUIs, and learn more language features including Event Handling and Inner Classes. We’ll put a button on the screen, we’ll paint on the screen, we’ll display a jpeg image, and we’ll even do some animation. class with a risky method throws an exception back class Cow { void moo() { if (serverDown){ explode(); } } } your code class Bar { void go() { moo(); } int stuff() { x.beep(); } } calls risky method 1 2 class MyOuter { class MyInner { void go() { } } } The outer and inner objects are now intimately linked. These two objects on the heap have a speci al bond. The inner can use the outer’s variables (and vic e-versa). inner outer Your fi rst GUI 355 Getting a user event 357 Implement a listener interface 358 Getting a button’s ActionEvent 360 Putting graphics on a GUI 363 Fun with paintComponent() 365 The Graphics2D object 366 Putting more than one button on a screen 370 Inner classes to the rescue (make your listener an inner class) 376 Animation (move it, paint it, move it, paint it, move it, paint it...) 382 Code Kitchen (painting graphics with the beat of the music) 386 Exercises and puzzles 394 Making a music machine (the BeatBox) 316 What if you need to call risky code? 319 Exceptions say “something bad may have happened...” 320 The compiler guarantees (it checks) that you’re aware of the risks 321 Catching exceptions using a try/catch (skateboarder) 322 Flow control in try/catch blocks 326 The fi nally block (no matter what happens, turn off the oven!) 327 Catching multiple exceptions (the order matters) 329 Declaring an exception (just duck it) 335 Handle or declare law 337 Code Kitchen (making sounds) 339 Exercises and puzzles 348
📄 Page
17
xvi 13 Work on your Swing Swing is easy. Unless you actually care where everything goes. Swing code looks easy, but then compile it, run it, look at it and think, “hey, that’s not supposed to go there.” The thing that makes it easy to code is the thing that makes it hard to control—the Layout Manager. But with a little work, you can get layout managers to submit to your will. In this chapter, we’ll work on our Swing and learn more about widgets. 14 Saving Objects Objects can be flattened and inflated. Objects have state and behavior. Behavior lives in the class, but state lives within each individual object. If your program needs to save state, you can do it the hard way, interrogating each object, painstakingly writing the value of each instance variable. Or, you can do it the easy OO way—you simply freeze-dry the object (serialize it) and reconstitute (deserialize) it to get it back. Components in the east and west get their preferred width. Things in the north and south get their preferred height. The center gets whatever’s left. Swing Components 400 Layout Managers (they control size and placement) 401 Three Layout Managers (border, flow, box) 403 BorderLayout (cares about five regions) 404 FlowLayout (cares about the order and preferred size) 408 BoxLayout (like flow, but can stack components vertically) 411 JTextField (for single-line user input) 413 JTextArea (for multi-line, scrolling text) 414 JCheckBox (is it selected?) 416 JList (a scrollable, selectable list) 417 Code Kitchen (The Big One - building the BeatBox chat client) 418 Exercises and puzzles 424 Saving object state 431 Writing a serialized object to a file 432 Java input and output streams (connections and chains) 433 Object serialization 434 Implementing the Serializable interface 437 Using transient variables 439 Deserializing an object 441 Writing to a text file 447 java.io.File 452 Reading from a text file 454 Splitting a String into tokens with split() 458 CodeKitchen 462 Exercises and puzzles 466 serialized deserialized Any questio ns?
📄 Page
18
xvii 15 Make a Connection Connect with the outside world. It’s easy. All the low-level networking details are taken care of by classes in the java.net library. One of Java’s best features is that sending and receiving data over a network is really just I/O with a slightly different connection stream at the end of the chain. In this chapter we’ll make client sockets. We’ll make server sockets. We’ll make clients and servers. Before the chapter’s done, you’ll have a fully-functional, multithreaded chat client. Did we just say multithreaded? Socket connection to port 5000 on the server at 196.164.1.103 Socket conn ection back to the client at 196.164.1.100, port 4242 ServerClient Chat program overview 473 Connecting, sending, and receiving 474 Network sockets 475 TCP ports 476 Reading data from a socket (using BufferedReader) 478 Writing data to a socket (using PrintWriter) 479 Writing the Daily Advice Client program 480 Writing a simple server 483 Daily Advice Server code 484 Writing a chat client 486 Multiple call stacks 490 Launching a new thread (make it, start it) 492 The Runnable interface (the thread’s job) 494 Three states of a new Thread object (new, runnable, running) 495 The runnable-running loop 496 Thread scheduler (it’s his decision, not yours) 497 Putting a thread to sleep 501 Making and starting two threads 503 Concurrency issues: can this couple be saved? 505 The Ryan and Monica concurrency problem, in code 506 Locking to make things atomic 510 Every object has a lock 511 The dreaded “Lost Update” problem 512 Synchronized methods (using a lock) 514 Deadlock! 516 Multithreaded ChatClient code 518 Ready-bake SimpleChatServer 520 Exercises and puzzles 524
📄 Page
19
xviii 17 Release Your Code It’s time to let go. You wrote your code. You tested your code. You refined your code. You told everyone you know that if you never saw a line of code again, that’d be fine. But in the end, you’ve created a work of art. The thing actually runs! But now what? In these final two chapters, we’ll explore how to organize, package, and deploy your Java code. We’ll look at local, semi-local, and remote deployment options including executable jars, Java Web Start, RMI, and Servlets. Relax. Some of the coolest things in Java are easier than you think. MyApp.jar classes com foo 101101 10 110 1 0 11 0 001 10 001 01 MyApp.class JWS Web Server Lorper iure eugue tat vero conse euguero- MyApp.jnlp MyApp.jar MyApp.jar Deployment options 582 Keep your source code and class fi les separate 584 Making an executable JAR (Java ARchives) 585 Running an executable JAR 586 Put your classes in a package! 587 Packages must have a matching directory structure 589 Compiling and running with packages 590 Compiling with -d 591 Making an executable JAR (with packages) 592 Java Web Start (JWS) for deployment from the web 597 How to make and deploy a JWS application 600 Exercises and puzzles 601 16 Data Structures Sorting is a snap in Java. You have all the tools for collecting and manipulating your data without having to write your own sort algorithms The Java Collections Framework has a data structure that should work for virtually anything you’ll ever need to do. Want to keep a list that you can easily keep adding to? Want to find something by name? Want to create a list that automatically takes out all the duplicates? Sort your co- workers by the number of times they’ve stabbed you in the back? Collections 533 Sorting an ArrayList with Collections.sort() 534 Generics and type-safety 540 Sorting things that implement the Comparable interface 547 Sorting things with a custom Comparator 552 The collection API—lists, sets, and maps 557 Avoiding duplicates with HashSet 559 Overriding hashCode() and equals() 560 HashMap 567 Using wildcards for polymorphism 574 Exercises and puzzles 576 0 1 2 3List Set Map “Ball” “Fish” “Car”“ l 1 “Ball2” “Fish” “Car”
📄 Page
20
xix 18 Distributed Computing Being remote doesn’t have to be a bad thing. Sure, things are easier when all the parts of your application are in one place, in one heap, with one JVM to rule them all. But that’s not always possible. Or desirable. What if your application handles powerful computations? What if your app needs data from a secure database? In this chapter, we’ll learn to use Java’s amazingly simple Remote Method Invocation (RMI). We’ll also take a quick peek at Servlets, Enterprise Java Beans (EJB) , and Jini. Java Remote Method Invocation (RMI), hands-on, very detailed 614 Servlets (a quick look) 625 Enterprise JavaBeans (EJB), a very quick look 631 Jini, the best trick of all 632 Building the really cool universal service browser 636 The End 648 ServerClient Service object Client object Client helper Service helper RMI STUB RMI SKELETON B Appendix B The Top Ten Things that didn’t make it into the book. We can’t send you out into the world just yet. We have a few more things for you, but this is the end of the book. And this time we really mean it. Top Ten List 660 A Appendix A The final Code Kitchen project. All the code for the full client-server chat beat box. Your chance to be a rock star. Andy: groove #2 Chris: groove2 revised Nigel: dance beat dance beat BeatBoxFinal (client code) 650 MusicServer (server code) 657 i Index 677