Java 2: the Complete Reference, Third Edition
Total Page:16
File Type:pdf, Size:1020Kb
• ™ 41 Java 2: The Complete Reference, Third Edition Patrick Naughton Herbert Schildt Osborne / McGraw-Hill Berkeley New York St. Louis San Francisco Auckland Bogota Hamburg London Madrid Mexico City Milan Montreal New Delhi Panama City Paris Säo Paulo Singapore Sydney Tokyo Toronto Contents Preface xxv Acknowledgments xxvii The Java Language 1 The Genesis of Java 3 Java's Lineage 4 The Birth of Modern Programming: C 4 The Need for C++ 6 The Stage Is Set for Java 7 The Creation of Java 7 Why Java Is Important to the Internet 9 Java Applets and Applications 10 Security 10 Portability 10 Java's Magic: The Bytecode 11 The Java Buzzwords 12 Simple 12 vii » viii Java™ 2: The Complete Reference Object-Oriented 13 Robust 13 Multithreaded 14 Architecrure-Neutral 14 Interpreted and High Performance 14 Distributed 14 Dynamic 15 The Continuing Revolution 15 Features Added by 1.1 15 Features Deprecated by 1.1 16 Features Added by 2 16 Features Deprecated by 2 17 Java Is Not an Enhanced HTML 17 2 An Overview of Java 19 Object-Oriented Programming 20 Two Paradigms 20 Abstraction 20 The Three OOP Principles 21 A First Simple Program 27 Entering the Program 27 Compiling the Program 28 A Closer Look at the First Sample Program 29 A Second Short Program 31 Two Control Statements 33 The if Statement 33 The for Loop 35 Using Blocks of Code 37 Lexical Issues 39 Whitespace 39 Identifiers 39 Literais 39 Comments 40 Separators 40 The Java Keywords 40 The Java Class Libraries 41 Uli 3 Data Types, Variables, and Arrays 43 Java Is a Strongly Typed Language 44 The Simple Types 44 Integers 45 byte 46 short 46 int 46 long 47 Floating-Point Types 47 float 48 double 48 Contents ix Characters 49 Booleans 50 A Closer Look at Literais 52 Integer Literais 52 Floating-Point Literais 52 Boolean Literais 53 Character Literais 53 String Literais 54 Variables 54 Declaring a Variable 54 Dynamic Initialization 55 The Scope and Lifetime of Variables 56 Type Conversion and Casting 59 Java's Automatic Conversions 59 Casting Incompatible Types 59 Automatic Type Promotion in Expressions 61 The Type Promotion Rules 62 Arrays 63 One-Dimensional Arrays 63 Multidimensional Arrays 66 Alternative Array Declaration Syntax 72 A Few Words About Strings 72 A Note to C/C++ Programmers About Pointers 73 4 Operators 75 Arithmetic Operators 76 The Basic Arithmetic Operators 76 The Modulus Operator 78 Arithmetic Assignment Operators 78 Increment and Decrement 80 The Bitwise Operators 82 The Bitwise Logical Operators 84 The Left Shirt 86 The Right Shift 88 The Unsigned Right Shift 89 Bitwise Operator Assignments 91 Relational Operators 92 Boolean Logical Operators 94 Short-Circuit Logical Operators 95 The Assignment Operator 96 The ? Operator 97 Operator Precedence 98 Using Parentheses 98 5 Control Statements 101 Java's Selection Statements 102 if 102 switch 106 * 2: The Complete Reference Iteration Statements 111 while 111 do-while 113 for 116 Some for Loop Variations 119 Nested Loops 121 Jump Statements 121 Using break 122 Using continue 126 return 128 6 Introducing Classes 131 Class Fundamentals 132 The General Form of a Class 132 A Simple Class 133 Declaring Objects 136 A Closer Look at new 138 Assigning Object Reference Variables 139 Introducing Methods 140 Adding a Method to the Box Class 140 Returning a Value 142 Adding a Method That Takes Parameters 144 Constructors 147 Parameterized Constructors 149 The this Keyword 151 Instance Variable Hiding 151 Garbage Collection 152 The finalize() Method 152 A Stack Class 153 7 A Closer Look at Methods and Classes 157 Overloading Methods 158 Overloading Constructors 161 Using Objects as Parameters 164 A Closer Look at Argument Passing 167 Returning Objects 170 Recursion 171 Introducing Access Control 174 Understanding stark 178 Introducing final 180 Arrays Revisited 181 Introducing Nested and Inner Classes 183 Exploring the String Class 187 Using Command-Line Arguments 190 8 Inheritance 191 Inheritance Basics 192 Member Access and Inheritance 194 A More Practical Example 195 A Superclass Variable Can Reference a Subclass Object 198 Contents Using super 199 Using super to Call Superclass Constructors 199 A Second Use for super 204 Creating a Multilevel Hierarchy 205 When Constructors Are Called 209 Method Overriding 210 Dynamic Method Dispatch 213 Why Overridden Methods? 215 Applying Method Overriding 216 Using Abstract Classes 218 Using final with Inheritance 221 Using final to Prevent Overriding 221 Using final to Prevent Inheritance 222 The Object Class 222 9 Packages and Interfaces 225 Packages 226 Defining a Package 227 Understanding CLASSPATH 228 A Short Package Example 229 Access Protection 230 An Access Example 231 Importing Packages 235 Interfaces 238 Defining an Interface 238 Implementing Interfaces 239 Applying Interfaces 243 Variables in Interfaces 247 Interfaces Can Be Extended 249 10 Exception Handling 251 Exception-Handling Fundamentals 252 Exception Types 253 Uncaught Exceptions 253 Using try and catch 255 Displaying a Description of an Exception 256 Multiple catch Clauses 257 Nested try Statements 259 throw 262 throws 263 finally 265 Java's Built-in Exceptions 267 Creating Your Own Exception Subclasses 269 Using Exceptions 271 11 Multithreaded Programming 273 The Java Thread Model 275 Thread Priorities 275 Synchronization 276 Messaging 276 The Thread Class and the Runnable Interface 277 2: The Complete Reference The Main Thread 277 Creating a Thread 280 Implementing Runnable 280 Extending Thread 282 Choosing an Approach 284 Creating Multiple Threads 284 Using isAlive() and join() 286 Thread Priorities 289 Synchronization 292 Using Synchronized Methods 293 The synchronized Statement 295 Interthread Communication 297 Deadlock 303 Suspending, Resuming, and Stopping Threads 305 Suspending, Resuming, and Stopping Threads Using Java 1.1 and Earlier 306 Suspending, Resuming, and Stopping Threads Using Java 2 308 Using Multithreading 312 12 I/O, Applets, and Other Topics 313 I/O Basics 314 Streams 314 Byte Streams and Character Streams 315 The Predefined Streams 318 Reading Console Input 318 Reading Characters 319 Reading Strings 320 Writing Console Output 322 The PrintWriter Class 323 Reading and Writing Files 324 Applet Fundamentals 328 The transient and volatile Modifiers 332 Using instanceof 332 strictfp 335 Native Methods 336 Problems with Native Methods 340 The Java Library 13 String Handling 343 The String Constructors 344 String Length 347 Special String Operations 347 String Literais 347 String Concatenation 348 String Concatenation with Other Data Types 348 String Conversion and toString() 349 Contents xtii Character Extraction 351 charAt() 351 getChars() 351 getBytes() 352 toCharArray() 352 String Comparison 352 equals() and equalsIgnoreCase() 353 regionMatches() 354 StartsWith() and endsWith() 354 equals() Versus == 355 compareTo() 355 Searching Strings 357 Modifying a String 359 substring() 359 concat() 360 replace() 361 trim() 361 Data Conversion Using valueOf() 362 Changing the Case of Characters Within a String 363 StringBuffer 364 StringBuffer Constructors 364 length() and capacity() 364 ensureCapacity() 365 setLength() 365 charAt() and setCharAt() 366 getChars() 366 append() 367 insert() 368 reverse() 368 delete() and deleteCharAt() 369 replace() 370 substring() 370 14 Exploring java.lang 371 Simple Type Wrappers 372 Number 373 Double and Float 373 Byte, Short, Integer, and Long 379 Character 389 Boolean 393 Void 394 Process 394 Runtime 395 Memory Management 397 Executing Other Programs 398 System 399 Using currentTimeMillis() to Time Program Execution 402 Using arraycopy() 403 Environment Properties 404 » Java™ 2: The Complete Reference Object 404 Using clone() and the Cloneable Interface 404 Class 408 ClassLoader 411 Math 412 Transcendental Functions 412 Exponential Functions 412 Rounding Functions 413 Miscellaneous Math Methods 414 Compiler 414 Thread, ThreadGroup, and Runnable 415 The Runnable Interface 415 Thread 415 ThreadGroup 418 ThreadLocal and InheritableThreadLocal 424 Package 424 RuntimePermission 426 Throwable 426 SecurityManager 426 The Comparable Interface 427 The java.lang.ref and java.lang.reflect Packages 427 java.lang.ref 427 java.lang.reflect 428 15 java.util Part 1: The CoUections Framework 429 CoUections Overview 431 The Collection Interfaces 432 The Collection Interface 433 The List Interface 435 The Set Interface 437 The SortedSet Interface 437 The Collection Classes 438 The ArrayList Class 439 The LinkedList Class 443 The HashSet Class 445 The TreeSet Class 446 Accessing a Collection via an Iterator 447 Using an Iterator 449 Storing User-Defined Classes in CoUections 450 Working with Maps 452 The Map Interfaces 452 The Map Classes 456 Comparators 460 Using a Comparator 461 The Collection Algorithms 465 Arrays 469 The Legacy Classes and Interfaces 473 The Enumeration Interface 473 Vector 474 Contents XV Stack 479 Dictionary 481 Hashtable 482 Properties 487 Using store() and load() 491 Collections Summary 493 16 java.util Part 2: More Utility Classes 495 StringTokenizer 496 BitSet 498 Date 501 Date Comparison 503 Calendar 503 GregorianCalendar 508 TimeZone 510 SimpleTimeZone 511 Locale 512 Random 513 Observable 516 The Observer Interface 517 An Observer Example 517 The java.util.zip Package 520 The java.util.jar Package 520 17 Input/Output: Exploring java.io 521 The Java I/O Classes and Interfaces 522 File 523 Directories 526 Using FilenameFilter 527 The listFiles() Alternative 528 Creating Directories 529 The Stream Classes 529 The Byte Streams 530 InputStream 530 OutputStream 531 FilelnputStream