Эванс Б., Вербург М. - java. Новое поколение разработки - 2014

560

Upload: knyazev-vasil

Post on 20-Oct-2015

525 views

Category:

Documents


10 download

TRANSCRIPT

  • 32.973.2-018.1

    004.4314

    ., .14 Java. . .: , 2014. 560 .: .

    ISBN 978-5-496-00544-9 Java 7 -

    Java (JVM), , Java- .

    Java 7, try ( try-with-resources) - (NIO.2). -- Java Groovy, Scala Clojure. , . , , , .

    : Java 7; Groovy, Scala Clojure; ; JVM; , .

    12+ ( 29 2010 . 436-.)

    32.973.2-018.1 004.43

    Manning Publications Co. . - .

    , , , -. , , , .

    ISBN 978-1617290060 . 2013 by Manning Publications Co. All rights reserved.

    ISBN 978-5-496-00544-9 , 2014

    , , 2014

  • . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

    1. Java 7

    1. Java 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

    2. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    2.

    3. . . . . . . . . . . . . . . . . . . . . . . . 98

    4. . . . . . . . . . . . . 124

    5. - . . . . . . . . . . . . . . . . . . . . . 173

    6. . . . . . . . . 209

  • 6

    3. Java

    7. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262

    8. Groovy Java . . . . . . . . . . . . 285

    9. Scala . . . . . . . . . . . . . 316

    10. Clojure: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

    4.

    11. . . . . . . . . . . . . . . . . 397

    12. . . . . . . . . . . . . . . 431

    13. - . . . . . . . . . . . . . . . . . . . . . . 474

    14. . . . . . . . . . . . . . . . . 509

    A. java7developer . . . . 528

    B. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537

    C. Java . . . . . . . . . . . . . . . . . . . . . . 539

    D. Jenkins . . . . . . . . . . . 547

    E. java7developer Maven POM . . . . . . . . . . . . . 550

  • . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Java- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

    www.coderanch.com . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    Manning publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

    . . . . . . . . . . . . . . . . . . . 34

    . . . . . . . . . . . . . . . . . . . . . . . 35

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

  • 8

    1. Java 7

    1. Java 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    1.2. Java, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

    1.3. . . . . . . . . . . . . . . . . . . . . . . 47

    1.3.1. switch . . . . . . . . . . . . . . . . . . . . . . . . 48

    1.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    1.3.3. . . . . . . . . . . . 51

    1.3.4. try (try-with-resources) . . . . 53

    1.3.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    1.3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

    1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

    2. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602.1. - Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    2.1.1. Java 1.01.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

    2.1.2. Java 1.4 - . . . . . . . . . . . . . . . . 63

    2.1.3. NIO.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    2.2. Path - . . . . . . . . . . . . . . . . . . . . . 64

    2.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

    2.2.2. . . . . . . . . . . . . . . . . . . . . . . 68

    2.2.3. . . . . . . . . . . . . . . . . . . . . . . . . 69

    2.2.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

    2.2.5. NIO.2 File, Java . . . . . . . . . . . 71

    2.3. . . . . . . . . . . . . . . . . . . 71

    2.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

    2.3.2. . . . . . . . . . . . . . . . . . . . . . . 72

  • 9

    2.4. - NIO.2 . . . . . . . . . . . . . 74

    2.4.1. . . . . . . . . . . . . . . . . . . . . . . . . 75

    2.4.2. . . . . . . . . . . . . . . . . . 76

    2.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

    2.4.4. . . . . . . . . . . . . . . . . . 82

    2.4.5. . . . . . . . . . . . . . . . . . . . 83

    2.4.6. SeekableByteChannel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    2.5. - . . . . . . . . . . . . . . . . . . . . . . . 85

    2.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

    2.5.2. . . . . . . . . . . . . . . . 89

    2.6. . . . . . . . . . . . . 91

    2.6.1. NetworkChannel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92

    2.6.2. MulticastChannel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    2.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

    2.

    3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983.1. : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

    3.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99

    3.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . 100

    3.1.3. . . . . . . . . . . . . . . . . . 102

    3.2. Java . . . . . . . . . . 107

    3.2.1. @Inject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

    3.2.2. @Qualifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    3.2.3. @Named . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

    3.2.4. @Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

    3.2.5. @Singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

    3.2.6. Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

  • 10

    3.3. Guice 3 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    3.3.1. Guice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    3.3.2. Guice . . . . . . . . . . . . . 118

    3.3.3. Guice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

    3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

    4. . . . . . . . . . . . . . . . 124

    4.1. . . . . . . . . . . . . . . . . . . . 125

    4.1.1. Java . . . . . . . . . . . . . . . . . 125

    4.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . 127

    4.1.3. . . . . . . . . . . . . 128

    4.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

    4.1.5. . . . . . . . . . . . . . . . . . . . . 130

    4.2. ( Java 5) . . . . . . 131

    4.2.1. . . . . . . . . . . . . . . . . . . . . . . 132

    4.2.2. . . . . . . . . . . . . . . . . . . . . . . 133

    4.2.3. . . . . . . . . . . . . . 134

    4.2.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

    4.2.5. synchronized? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

    4.2.6. volatile . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

    4.2.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

    4.3. . . . 142

    4.3.1. java.util.concurrent.atomic . . . . . . . . . 142

    4.3.2. java.util.concurrent.locks . . . . . . . . . . . . . . . . 143

    4.3.3. CountDownLatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

    4.3.4. ConcurrentHashMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

    4.3.5. CopyOnWriteArrayList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

    4.3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

  • 11

    4.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

    4.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

    4.4.2. ScheduledThreadPoolExecutor . . . . . . . . . . . . . . . . . . . . . . . 163

    4.5. fork/join (/) . . . . . . . . . . . . . . . . . . . . 164

    4.5.1. fork/join . . . . . . . . . . . . . . . . . . . . . . . . . . 165

    4.5.2. ForkJoinTask . . . . . . . . . . . . . . . . . . . . . . . 168

    4.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . 168

    4.6. Java (JMM) . . . . . . . . . . . . . . . . . . . . . . . . . . 169

    4.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

    5. - . . . . . . . . . . . . . . . . . . . . . . . . . . 1735.1. . . . . . . . . . . . . . . . . . . . . . . . 174

    5.1.1. . . . . . . . . . . . . . . . . . . . . . 174

    5.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

    5.1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

    5.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

    5.2. . . . . . . . . . . . . . . . . . . . . . . 181

    5.2.1. MethodHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

    5.2.2. MethodType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

    5.2.3. . . . . . . . . . . . . . . . . . . . . . . . 183

    5.2.4. : , . . . . . . . . . . . . . . . . . . . . . 184

    5.2.5. . . . . . . . . . . 187

    5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

    5.3.1. javap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

    5.3.2. . . . . . . . . . . . . . . . . . 189

    5.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

    5.4. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

    5.4.1. : . . . . . . . . . . . . . . . . . 194

    5.4.2. . . . . . . . . . . . . . . . . . . . . . . . . 196

  • 12

    5.4.3. . . . . . . . . . . . . . . . . . . . . . . . . 197

    5.4.4. . . . . . . . . . . . . 198

    5.4.5. . . . . . . . . . . . . . . . . . . . . 199

    5.4.6. . . . . . . . . . . . . . 200

    5.4.7. . . . . . . . . . . . . . . . . . . . . 201

    5.4.8. . . . . . . . . . . . . . 201

    5.4.9. . . . . . . . . . . 202

    5.4.10. : () . . . . . . . . . . . . 202

    5.5. invokedynamic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

    5.5.1. invokedynamic . . . . . . . . . . . . . . . . . . . . . . . . 205

    5.5.2. : invokedynamic- . . . . . 206

    5.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

    6. . . . . . . . . . . 209

    6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

    6.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

    6.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . 212

    6.1.3. . . . . . . . . . . . . . . . . . . . . . . . 212

    6.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

    6.1.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

    6.1.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

    6.1.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

    6.2. . . . . . . . . . 214

    6.2.1. , . . . . . . . . . . . . . . . . . . . 215

    6.2.2. . . . . . . . . . . . . . . . . . . . . . . 216

    6.2.3. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

    6.2.4. , . . . . . . . . 218

  • 13

    6.2.5. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218

    6.2.6. . . . . . . . . . . 219

    6.3. ? ? . . . . . . . . 220

    6.3.1. : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

    6.3.2. . . . . . . . . . . . . . 222

    6.3.3. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

    6.4. . . . . . . . . . . . . . . . . . . . . . . 225

    6.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

    6.4.2. nanoTime() . . . . . . . . . . . . . . . . . . . . . . . . . . . 226

    6.4.3. . . . . . . 229

    6.4.4. : - . . . . . . . . . 230

    6.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232

    6.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

    6.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . 234

    6.5.3. jmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

    6.5.4. Java . . . . . 241

    6.5.5. . . . . . . . . . . . . . . . . . . 242

    6.5.6. VisualVM . 243

    6.5.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

    6.5.8. . . . . . . . . . . . . . . . 248

    6.5.9. G1 Java . . . . . . . . . . . . . . . . 249

    6.6. HotSpot . . . . . . . . . . . . 250

    6.6.1. HotSpot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

    6.6.2. . . . . . . . . . . . . . . . . . . 254

    6.6.3. . . . . . . 255

    6.6.4. . . . . . . . . . . . . . . . . . . . . . . 255

    6.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

  • 14

    3. Java

    7. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2627.1. Java ? ! . . . . . . . . . . . . . . 263

    7.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

    7.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

    7.1.3. . . . . . . . . . . . . . . . . . . . . . . . . 266

    7.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

    7.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269

    7.2.2. . . . . . . 269

    7.2.3. . . . . . 270

    7.2.4. . . . . . . . . . 271

    7.3. Java . . . 272

    7.3.1. Java . . . . . . . . . . . 274

    7.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . 275

    7.4. Java . . . . . . . . . . . 276

    7.4.1. . . . . . . . . . . . . . . . . . . 277

    7.4.2. Java . . . . . . . . . 278

    7.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . 278

    7.4.4. . . . . . . . . . . . . . . 279

    7.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

    7.5. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280

    7.5.1. Java- . . . . . . . . . 281

    7.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

    7.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

  • 15

    8. Groovy Java . . . . . . . . . . . . . . 2858.1. Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

    8.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

    8.1.2. Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

    8.2. Groovy 101 . . . . . . . . . . . . . . . . . . . . . . . 290

    8.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291

    8.2.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

    8.2.3. , , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

    8.2.4. . . . . . . . . . . . . . . . . . . . . . . 295

    8.3. Java . . . . . . . . . . . . . . . . . . . 296

    8.3.1. . . . . 297

    8.3.2. . . . . . . . . . 297

    8.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

    8.3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

    8.3.5. Groovy . . . . . . . . . . . . . . . . . . . . . . 299

    8.3.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

    8.4. Groovy, Java . . . . . . . . . . . . . . . . . 300

    8.4.1. GroovyBeans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

    8.4.2. . . . . . . . . . . . . . . . 301

    8.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

    8.4.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303

    8.4.5. . . . . . . . . . . . . . . . . . . . . . . . . 304

    8.4.6. . . 305

    8.4.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

    8.4.8. XML- . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

    8.5. Groovy Java . . . . . . . . . . . . . . . . . . . . . . . 310

    8.5.1. Java Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

    8.5.2. Groovy Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311

    8.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

  • 16

    9. Scala . . . . . . . . . . . . . . . . 3169.1. Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

    9.1.1. Scala . . . . . . . . . . . . . . . . . . . . . . . . . 317

    9.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . 320

    9.1.3. Case- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

    9.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324

    9.2. Scala ? . . . . . . . . . . . . . . . . . . . . . . 325

    9.2.1. Scala Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

    9.2.2. Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

    9.2.3. , , Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

    9.3. Scala . . . . . . . . . . . . . 327

    9.3.1. REPL . . . . . . . . . . . . . . . . . . 328

    9.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329

    9.3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

    9.3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

    9.3.5. . . . . . . . . . . . . . . . . . . . 332

    9.3.6. Scala . . . . . . . . . . . 333

    9.4. Scala , . . . . . . . . . 334

    9.4.1. . . . . . . . . . . . . . . . . . . . . . . 335

    9.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336

    9.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337

    9.4.4. - . . . . . . . . . . . . . . . . . . . . . . . . 339

    9.4.5. Case- . . . . . . . . . . . . . . 342

    9.4.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

    9.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

    9.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346

    9.5.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

    9.5.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351

  • 17

    9.6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354

    9.6.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

    9.6.2. . . . 356

    9.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358

    10. Clojure: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

    10.1. Clojure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

    10.1.1. Hello World Clojure . . . . . . . . . . . . . . . . . . . . . . . 361

    10.1.2. REPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

    10.1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

    10.1.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

    10.2. Clojure . . . . . . . . . . . . . . . . . . . . 364

    10.2.1. . . . . . 365

    10.2.2. , , . . . . . . . . . . . . . . 366

    10.2.3. , . 369

    10.3. Clojure . . . . . . . . . . . . . . . . . . . 370

    10.3.1. Clojure . . . . . . . . . . . . . . . . . . . . . . . . . 370

    10.3.2. . . . . . . . . . . . . . . . . . 373

    10.3.3. . . . . . . 375

    10.4. Clojure . . . . . . . . . . . . . . . . . . . . 377

    10.4.1. . . . . . . . . . . . . . . . . . . . . . 379

    10.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

    10.5. Clojure Java . . . . . . . . . . . . . . . . . . . . . . 382

    10.5.1. Java Clojure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

    10.5.2. Java Clojure . . . . . . . . . . . . . . . . . . . . . . . 383

    10.5.3. Clojure . . . . . . . . . . . . . . . . . 384

    10.5.4. REPL . . . . 385

    10.5.5. Clojure Java . . . . . . . . . . . . . . . . . . . . . 386

  • 18

    10.6. Clojure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

    10.6.1. future pcall . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

    10.6.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

    10.6.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

    10.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

    4.

    11. . . . . . . . . . . . . . . . . . . . . 39711.1. . . . . . . . . . . . . . . . . . . . . . . 399

    11.1.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

    11.1.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405

    11.1.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408

    11.1.4. JUnit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410

    11.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

    11.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413

    11.2.2. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415

    11.2.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419

    11.2.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

    11.3. ScalaTest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

    11.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429

    12. . . . . . . . . . . . . . . . . . 43112.1. Maven 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434

    12.2. - Maven 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435

    12.3. Maven 3 java7developer . . . . . . . . . . . . . . . . . . . . . . . . . 438

    12.3.1. POM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

    12.3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445

  • 19

    12.4. Jenkins . . . . . . . . . . . . . 448

    12.4.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 450

    12.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

    12.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

    12.5. Maven Jenkins . . . . . . . . . . . . . . . . . . . . . . . . 457

    12.5.1. Jenkins . . . . . . . . . . . . . . . . . . . . . . . 458

    12.5.2. Checkstyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459

    12.5.3. FindBugs . . . . . . . 461

    12.6. Leiningen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464

    12.6.1. Leiningen . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

    12.6.2. Leiningen . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

    12.6.3. : Hello Lein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466

    12.6.4. REPL- Leiningen . . . . . . . . . . . . . . . . . . . . 469

    12.6.5. Leiningen . . . 471

    12.7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472

    13. - . . . . . . . . . . . . . . . . . . . . . . . . . . 47413.1. - Java . . . . . . . . . . . . . . . 475

    13.1.1. Java - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476

    13.1.2. - . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

    13.2. - . . . . . . . . . . . . . . . . . . . . 478

    13.3. Grails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480

    13.4. - Grails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481

    13.4.1. . . . . . . . . . . . . . . 483

    13.4.2. . . . . . . . . . . . . . . . . . . . . 483

    13.4.3. . . . . . . . . . 486

    13.4.4. . . . . . . . . . . . . . . . . . . . . . . . 487

    13.4.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

  • 20

    13.4.6. GSP/JSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489

    13.4.7. . . . . . . . . . . . . . . . . . . . . . . . . . . 491

    13.4.8. . . . . . . . . . . . . . . . . . . . 492

    13.5. Grails . . . . . . . . . . . . . . . . . . . . . . . . . 492

    13.5.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493

    13.5.2. GORM - . . . . . . . . . 493

    13.5.3. Grails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494

    13.6. Compojure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495

    13.6.1. Hello World Compojure . . . . . . . . . . . . . . . . . . . . . . . . . . 496

    13.6.2. Ring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

    13.6.3. Hiccup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500

    13.7. Compojure: ? . . . . . . . . . . . . 500

    13.7.1. ? . . . . . . . . . . . . 502

    13.7.2. ? . . . . 504

    13.8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507

    14. . . . . . . . . . . . . . . . . . . . . 509

    14.1. Java 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

    14.1.1. - () . . . . . . . . . . . . . . . . . . . 510

    14.1.2. ( Jigsaw) . . . . . . . . . . . . . . . . . . . . 512

    14.2. . . . . . . . . . . . . . . . . . . . . . . . . 514

    14.2.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

    14.2.2. . . . . . . . . . . . . . . . . . . . . . 516

    14.3. . . . . . . . . . . . . . . . . . . . . . . . . 517

    14.3.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517

    14.3.2. , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518

  • 21

    14.4. Java . . . . . . 519

    14.4.1. . . . . . . . . . . . . . . . . . . 520

    14.4.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521

    14.4.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522

    14.5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525

    A. java7developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528

    .1. java7developer . . . . . . . . . . . . . . . . . . . . 528

    .2. Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . 530

    .3. java7developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532

    .3.1. . . . . . . . . . . . . . . . . . . . . 532

    .3.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533

    .3.3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534

    .3.4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535

    .4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536

    B. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537

    B.1. . . . . . . . . . . . . . . . . . . . . . . . . . 537

    B.2. . . . . . . . . . . . . . . . . . . . . . . . . . . 537

    C. Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 539

    C.1. Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539

    C.1.1. Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539

    C.1.2. Groovy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540

  • 22

    C.2. Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542

    C.3. Clojure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

    C.4. Grails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

    C.4.1. Grails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

    C.4.2. Grails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544

    D. Jenkins . . . . . . . . . . . . . 547D.1. Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

    D.2. Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547

    D.2.1. WAR- . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548

    D.2.2. WAR- . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548

    D.2.3. . . . . . . . . . . . . . . 548

    D.2.4. Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548

    E. java7developer Maven POM . . . . . . . . . . . . . . . . 550E.1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550

    E.2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554

  • , , (Ben Evans). , Open Spaces Java. , , , . . , .

    , . Java. 15 Java, , Java. , , Java. , , . , , , . , Java. , . Arrays.sort() TimSort, MergeSort, . , , . . , JCP. , Java 7. , . , , switch , /, Java NIO.2.

    ? Thread synchronized, ? , . , . , , , . . , , .

    , , . , . ! javap , , Java. , invokedynamic , .

  • 24

    6 . (Jack Shirazi) Java Performance Tuning ( Java), , . : , . . , . , . , , . , 6, CacheTester, .

    Java (JVM). Java . , . . , . (, Jython JRuby) , Java. (Groovy) (Java Scala). , JVM Java, . , , . , .

    : Groovy, Scala Clojure. , . , Java, . , Groovy, Scala Clojure, , , , . , Groovy; , .

    , . , Hudson Jenkins. , Checkstyle Findbugs.

    , Java. , , . Java . , . , , . , , . : , !

    , . , , . , .

    (Heinz Kabutz). Java

  • , , IT . (), , , Java. .

    IT , Devoxx , . IBM ( (Rob Nicholson), (Zoe Slattery) (Holly Cummins)), Java (LJC London Java User Group).

    , LJC. LJC, (Martijn Verburg). , , Java. .

    , . , , , . , , .

    , . , , . , . . , .

    . ( ), Java, : ? ? .

    Java 7, , . ,

  • 26

    Java. , , , . , , Java, Java (JVM). (polyglot programming). , .

    , . . , Java, . , Java , .

    , , , . , , .

  • , 1. . , , , . . , .

    , . http://www.java7developer.com , . . .

    (, ) , ! , .

    Java- Java, www.meetup.com/londonjavacommunity, , , , . , : (Peter Budo), (Nick Harkin), (Jodev Devassy), (Craig Silk), . (N. Vanderwildt), (Adam J. Markham), (Rozallin), (Daniel Lemon), (Frank Appiah), . (P. Franc), (Sebkom Praveen), (Dinuk Weerasinghe), (Tim Murray Brown), (Luis Murbina), (Richard Doherty), (Rashul Hussain), (John Stevenson), (Gemma Silvers), (Kevin Wright), (Amanda Waite), (Joel Gluth), (Richard Paul), (Colin Vipurs), (Antony Stubbs), (Michael Joyce), (Mark Hindess), (Nuno), (Jon Poulton), (Adrian Smith), (Ioannis Mavroukakis), (Chris Reed), (Martin Skurla), (Sandro Mancuso) (Arul Dhesiaseelan).

    1 (Hillary Clinton) (It Takes A Village). . .

  • 28

    (James Cook), (Alex Anderson), (Leonard Axelsson), (Colin Howe), (Bruce Durling) (Dr. Russel Winder). .

    , Java LJC (Mike Barker), (Trisha Gee), (Jim Gough), (Richard Warburton), (Simon Maple), (Somay Nakhal) (David Illsley).

    , (Barry Cranford), LJC, . . LJC . . LJC .

    www.coderanch.com (Maneesh Godbole), (Ulf Ditmer), (David OMeara), (Devaka Cooray), (Greg Charles), (Deepak Balu), (Fred Rosenberger), (Jesper De Jong), (Wouter Oet), (Mark Spritzler) (Roel De Nijs) .

    Manning publications (Marjan Bace) Manning , , . . (Renae Gregoire), . (Karen G. Miller), (Andy Carroll), (Elizabeth Martin), (Mary Piergies), (Dennis Dalinnik), (Janet Vail) , , , . !

    (Candace Gillhoolley) , (Christina Rudloff) (Maureen Spencer) .

    III (John Ryan III), .

    , . (Aziz Rahman), (Bert Bates), (Chad Davis), (Cheryl Jerozal), (Christopher Haupt), (David

  • 29

    Strong), (Deepak Vohra), (Federico Tomassetti), (Franco Lombardo), (Jeff Schmidt), (Jeremy Anderson), (John Griffin), (Maciej Kreft), (Patrick Steger), (Paul Benedict), (Rick Wagner), (Robert Wenner), (Rodney Bollinger), (Santosh Shanbhag), (Antti Koivisto) (Stephen Harrison).

    (Andy Burgess) www.java7develo-per.com, (Dragos Dogaru), , , .

    (Matt Raible) , . 13.

    (Alan Bateman), NIO.2 Java 7. API , Java.

    (Jeanne Boyarsky), , , , . , !

    (Martin Ling) . 4.

    (Jason Van Zyl) , Maven: The Complete Reference ( Sonatype). 12.

    (Kirk Pepperdine) 6, .

    . (Dr. Heinz M. Kabutz) , , Java Specialists Newsletter (www.javaspecialists.eu/).

    , , , , . :

    (Bert Bates) Manning , , ;

    , , , , , ;

  • 30

    , (John Hinton) (John Evans), ;

    , (EJ) ( ), , , . .

    . , Commodore 64, . 1, , . , , , , . , .

    , . , ( 2) ! , ( , , , !). . , ?

    , . ! ; Java , . , LJC, ( , , ). .

    , , , , , , . , , !

    1 , ! , , !

    2 , .

  • Java. . Java, . Java 7, ( ) , , , JVM, Java .

    Java, (James Iry) , 1:

    1996 Java. , - , , , - , . Sun Java.

    Java , C# ( ), . , .

    . , 16 ? , . ?

    , . Java, , :

    (, , );

    ;

    ; ; .

    1 http://habrahabr.ru/post/165093/. . .

  • 32

    Java . , , .

    Java Java , . Java 7. , Java 7. , 7. , . , Java 7 . Java 7 , Java 8, Oracle B.

    , Java, Java (JVM). Java JVM. ( ), JVM Java .

    , , , , Groovy, Scala Clojure, Java. .

    , . , , .

    , , , . , , .

    Java. :

    Java 7; ; Java; . Java 7.

    Java 7, 1 . 2 , , .

    (36), , : , , / .

  • 33

    ( 710) Java. 7 , JVM. Groovy (, Java), Scala, , , , (Clojure). , , , , .

    ( ) , , , , . , , / .

    , 1 . 7 3. . , , .

    Java, , . , Java 7, .

    , , () , .

    , , , , . , , ( Java Clojure) .

    . Java 7 , . ( ). 2 API , , .

    2 . , 3 ,

  • 34

    . Java Guice 3. 4 , Java . , . 5 Java. , , , Java , . 6 Java. , .

    3 Java . 7 , , . 8 Groovy , Java. Groovy , , Java, Java. 9 Scala , . Scala . 10 Lisp. Clojure Lisp . Java.

    4 , , . 11 (mock objects), . 12 , (Maven 3) (Jenkins/Hudson). 13 , Java . (Grails Compojure). 14 Java. , Java. , . , , Java 8.

    , Java 7. ( , ). Oracle, Java (Java SE): www.oracle.com/technetwork/java/javase/downloads/index.html.

    , , .

  • 35

    . . , . , . , . . .

    www.manning.com/TheWell-GroundedJavaDeveloper. . ; .

    Java 7 . , :

    MS Windows XP ; *nix; Mac OS X 10.6 . , , IDE

    ( ). Java 7 Groovy, Scala Clojure IDE:

    Eclipse 3.7.1 ; NetBeans 7.0.1 ; IntelliJ 10.5.2 . NetBeans 7.1 Eclipse 3.7.1.

  • LJC ( Java, Java) Java Community Process Executive Committee. Java. , CEO ( ) , Java . , Java, .

    (CTO, jClarity) 10 CTO, jClarity) 10 , jClarity) 10 jClarity) 10 ) 10 . Java. Java. . Java, Java, , JSR ( Java), JSR, OpenJDK ( OpenJDK).

    , (JavaOne, Devoxx, OSCON, FOSDEM . .). , .

  • . XIX (Sylvain Marechal). . . , 200 . , , . , , . .

    . , , . , . , , , .

    , , , . .

  • , [email protected] ( , ).

    ! http://www.piter.com

    .

  • 1

    Java 7

    1. Java 7

    2. -

  • 40 1. Java 7

    , , Java 7. , . : , . Java, .

    Java, , Java, , , , , . Java 7 , . , , . , , . Java 7 : (Project Coin) NIO.2.

    . , . :

    try-with-resources ( ); switch; ; catch ( catch); ( ).

    . , , , Java Java.

    API (NIO.2). API (NIO.2). (NIO.2). NIO.2). .2). Java, Java, , . :

    Path ; Files, , , ;

    ; , future; .

    , Java 7. , Java 7. , 7. , Java 7 .

  • 1 Java 7 :

    Java ; , ; try-with-resources; . Java 7.

    . , Java 7 . , , , , Java (JVM).

    Java 7, . , : .

    , , Java 7. , , Java. , , .

    , ( catch), try-with-resources ( try). , . , Java , .

    , , Java. , Java. , . , , .

  • 42 1. Java 7

    1.1. , , Java Java. , Java Java. , Java. , Java. , . , , . , , , , .

    , . , .

    Java , . , . Java , (, , !).

    Java , . Java (JVM), , . , . , Java, .

    Java Java . , Java , , Java , , , , . , . , , .

    , Java. Java (JLS) Java (JLS) (JLS) JLS) ) Java (VMSpec). Java 7 ; VMSpec JLS. , Java 7 , Java, , . .

    : ? Java 7 , Java?

    ( .class). . , , Java Java . . 1.1 Java.

  • 1. Java 7 43

    . 1.1. Java .class, ,

    , Java , . javac .class. Java. , . ( , Enterprise) .

    JAVA ?

    Java , .class , JVM. , , - - JVM, (JIT). , , -, , .

    - Java , , . - (intermediate language), . , Java - - , C ++. , javac , gcc. , Java. Java (JIT) (. . 1.1).

    Java . , , .

    Java ? : .

  • 44 1. Java 7

    , , , Java 7. , .

    1.2. Java,

    (Project Coin) , Project Coin) , Coin) , Coin) , ) , Java 7 ( 8) 2009 . , Java 7 ( 8) 2009 . , 7 ( 8) 2009 . , , . (case study).

    Java . , coin , to coin . , . , .

    , . , , .

    , , , , . Java 7 . , , . , , . , Java, 1.3 .

    Java . Java . . , . . 1.2 , . .

    , . , , . , . .

  • 1. Java 7 45

    (syntactic sugar). , , , .

    , , , . - .

    , . ( Java javac).

    . 1.2.

    ( Java 7), :

    (Java 7); try-with-resources (Java 7); (Java 5); Java invokedynamic (Java 7).

    ( ) , .

    2009 . 70 , , . , , . http://icanhascheezburger.com/.

  • 46 1. Java 7

    . :

    , ( Java, Java);

    ;

    (), .

    , : , , .

    : ? , , String 14.11 JLS. , .

    JAVA 7 ,

    Java . , JavaOne 2006 , Java GPLv2 ( , Sun ). Java 6, Java 7 , - (OSS). Java OpenJDK.

    , coin-dev, lambda-dev mlvm-dev, , . , Java 7. Adopt OpenJDK, - , OpenJDK, Java. http://java.net/projects/jugs/pages/AdoptOpenJDK, , .

    , .

    , ( ) :

    JLS; ; , ; ; .

  • 1. Java 7 47

    , , :

    VMSpec; ; ; (reflection); ; , , Java (JNI).

    , , , !

    , . , Java . , . .

    : . , , .

    , , , .

    1.3.

    Java 7 Java 7 7 . (String) switch, , , try ( try-with-resources), , .

    , . . , , , , . , coindev. , , .

    , Java 7 String switch.

  • 48 1. Java 7

    1.3.1. switch switch Java if :

    public void printDay(int dayOfWeek) { switch (dayOfWeek) { case 0: System.out.println("Sunday"); break; case 1: System.out.println("Monday"); break; case 2: System.out.println("Tuesday"); break; case 3: System.out.println("Wednesday"); break; case 4: System.out.println("Thursday"); break; case 5: System.out.println("Friday"); break; case 6: System.out.println("Saturday"); break; default: System.err.println("Error!"); break; }}

    Java 6 byte, char, short, int ( Byte, Character, Short, Integer) enum. Java 7 Java 7 7 String. , .

    public void printDay(String dayOfWeek) { switch (dayOfWeek) { case "Sunday": System.out.println("Dimanche"); break; case "Monday": System.out.println("Lundi"); break; case "Tuesday": System.out.println("Mardi"); break; case "Wednesday": System.out.println("Mercredi"); break; case "Thursday": System.out.println("Jeudi"); break; case "Friday": System.out.println("Vendredi"); break; case "Saturday": System.out.println("Samedi"); break; default: System.out.println("Error: '"+ dayOfWeek +"' is not a day of the week"); break; }}

    switch . , , , , Java.

    1.3.2.

    , . :

    ( ) ;

  • 1. Java 7 49

    .

    . Java.

    , , , . , .

    Java 7, , Java 7, , 7, , ( ) (base conversion), parseX. , , int x 102, :

    int x = Integer.parseInt("1100110", 2);

    , , x . , .

    . . parseInt(). parseInt() . . , , . , switch.

    RuntimeException ( ), .

    , Java 7 :

    int x = 0b1100110;

    , . .

    , . , switch.

    , .

  • 50 1. Java 7

    , , , . , . , . , , , , , .

    , 1c372ba3, 00011100001101110010101110100011, . , , . , : 4045550122.

    , - 555, : 555-01xx - , , .

    , :

    $100,000,000 ( ); 089296 ( ). ,

    . . Ruby Ruby (_). : , . .

    , 100_000_000 , , 10_000_000, 100000000 10000000 . , :

    long anotherLong = 2_147_483_648L;int bitPattern = 0b0001_1100__0011_0111__0010_1011__1010_0011;

    , , anotherLong.

    Java - l long. , 1010100l. L , , , l 1. 1010100L .

  • 1. Java 7 51

    , . Java 7.

    1.3.3.

    : catch (multicatch) (final rethrow). , , Java 6, , , ( 1.1).

    1.1. Java 6public Configuration getConfig(String fileName) { Configuration cfg = null; try { String fileText = getFile(fileName); cfg = verifyConfig(parseConfig(fileText)); } catch (FileNotFoundException fnfx) { System.err.println("Config file '" + fileName + "' is missing"); } catch (IOException e) { System.err.println("Error while processing file '" + fileName + "'"); } catch (ConfigurationException e) { System.err.println("Config file '" + fileName + "' is not consistent"); } catch (ParseException e) { System.err.println("Config file '" + fileName + "' is malformed"); }

    return cfg;}

    , :

    , ; , , ;

    ; .

    : , , (, ).

    catch ( 1.2). Java 7 .

  • 52 1. Java 7

    1.2. Java 7public Configuration getConfig(String fileName) { Configuration cfg = null; try { String fileText = getFile(fileName); cfg = verifyConfig(parseConfig(fileText)); } catch (FileNotFoundException|ParseException|ConfigurationException e) { System.err.println("Config file '" + fileName + "' is missing or malformed"); } catch (IOException iox) { System.err.println("Error while processing file '" + fileName + "'");}return cfg;}

    e , . , catch , , ( Exception Throwable).

    . . , Java :

    try { doSomethingWhichMightThrowIOException(); doSomethingElseWhichMightThrowSQLException();} catch (Exception e) { ... throw e;}

    , Exception .

    , IOException SQLException, , . Java 7 :

    try { doSomethingWhichMightThrowIOException(); doSomethingElseWhichMightThrowSQLException();} catch (final Exception e) { ... throw e;}

    final, ,

  • 1. Java 7 53

    IOException SQLException. (final rethrow). , , catch.

    final . , catch rethrow.

    Java 7 . .

    1.3.4. try (try-with-resources)

    , , , , . , (, ) , .

    , 100 % . Sun . Sun . . , , : close() JDK !

    , , . .

    , . , , , Java 6 , , URL (url), (out). ( 1.3).

    1.3. Java 6

  • 54 1. Java 7

    ? , : :

    InputStream, , URL ;

    File, OutputStream, ( ) ;

    , . , ,

    .

    . , , .

    Java 7, , Java 7, , 7, , 1.3. , url URL ( ), , ; file File, . Java 7( 1.4).

    1.4. Java 7

    try (OutputStream out = new FileOutputStream(file); InputStream is = url.openStream() ) { byte[] buf = new byte[4096]; int len; while ((len = is.read(buf)) > 0) { out.write(buf, 0, len); }}

  • 1. Java 7 55

    try . , C#, using. . , .

    try-with-resources , . , FileInputStream , ObjectInputStream (someFile.bin).

    try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("someFile.bin")) ) { ...}

    , (someFile.bin) , , , ObjectInput. . , ObjectInputStream , FileInputStream !

    try-with-resources .

    try (FileInputStream fin = new FileInputStream("someFile.bin"); ObjectInputStream in = new ObjectInputStream(fin) ) { ...}

    TWR . Java 7 . TWR, . , .

    , , InputStream :

    try(InputStream i = getNullStream()) { i.available();}

    , NullPointerException ( NPE):

    Exception in thread "main" java.lang.NullPointerException at wgjd.ch01.ScratchSuprExcep.run(ScratchSuprExcep.java:23) at wgjd.ch01.ScratchSuprExcep.main(ScratchSuprExcep.java:39) Suppressed: java.lang.NullPointerException at wgjd.ch01.ScratchSuprExcep.run(ScratchSuprExcep.java:24) 1 more

  • 56 1. Java 7

    TWR , AutoCloseable. , try TWR . Java 7 , AutoCloseable ( , AutoCloseable Closeable). , . , , JDBC 4.1.

    TWR , . .

    TWR AUTOCLOSEABLE

    try-with-resources, . .

    1.3.5. Java 7 , (). , . , , userid ( ). , . ?

    Map usersLists = new HashMap();

    , , . , :

    Map usersLists = new HashMap();

    . . Java 7 . , . , , . .

    , . , , .

  • 1. Java 7 57

    , . , , (Improved Type Inference for Generic Instance Creation). , ITIGIC. , - .

    , . , , . , .

    1.3.6.

    . , . , .

    , , T, , , . , .

    public static Collection doSomething(T... entries) { ...}

    , ? . , ., , ,

    , ( ) . , , , vararg. , ( ) .

    , , , Java , . , :

    HashMap[] arrayHm = new HashMap[2];

  • 58 1. Java 7

    . :

    HashMap[] warnHm = new HashMap[2];

    , . : warnHm HashMap . ( ) ( HashMap) warnHm.

    , , , , , , , , . :

    HashMap hm1 = new HashMap();HashMap hm2 = new HashMap();Collection coll = doSomething(hm1, hm2);

    , hm1, hm2, . , . , , .

    . , API, API, , .

    Java 7? Java 7 . , , - . , API, . doSomething() , . API .

    , doSomething(), API, . . , API, , API .

    , API. , API, . , API, .

    API, Java 7 : java.lang.SafeVarargs.

  • 1. Java 7 59

    API ( ), . @SafeVarargs, , , , . , .

    , ! , , , . . , , . , , , . , . , , , , , .

    , . , . , , . , , .

    1.4. . ( , , ). , , , .

    , . , Java 7. , . , Java, Java 7 ( NIO.2) .

    TWR , .

  • 2 - :

    API Java 7 ( NIO.2); Path ; Files ; ; . API Java

    API . NIO.2 ( JSR203). . NIO.2 , java.nio.

    java.io.File. , .

    , . , .

    , Network-Channel.

    . , Java, , / . Java 6 ( ) :

    ;

    ; ( readable, writable executable).

    API Java 7 NIO.2 , (Files.

  • 2. - 61

    walkFileTree(), . 2.3.1), 1 (Files.isSymbolicLink(), . 2.4), (Files.readAttributes(), . 2.4.3).

    , , , . , 1 ; ! Java 5/6 java.util.concurrent , . 4, Java , . Java 7 API NIO.2 , , AsynchronousFileChannel (. 2.5). !

    API ( ), , , .

    , , . , (, ). NIO.2 , .

    , ( , ) . , 2, NIO.2 , . , IDE, .

    , , NIO.2. , NIO.2 , , , ! , , Java.

    Java 7, NIO.2 API. , . , Java 7 !

    1 , . .

    2 4 , .

  • 62 1. Java 7

    try-with-resources (. 1) API NIO.2 - - , Java!

    , , , . . Path, , . Path, , , .

    , , . , Socket Channel, . , NIO.2.

    2.1. - Java API NIO.2 ( , ), Java Java. , ! 2.2.

    API , , , , NIO.2 API. Java. , , NIO.2, Java.

    Java . API, . Java , , Java . API (I/O).

    2.1.1. Java 1.01.3 Java (1.03.0) . , , . . . , . . .

  • 2. - 63

    Perl . , ( Java) Perl. , http://www.perl.org/.

    , ., Java .

    . , , Java Java 1.4.

    2.1.2. Java 1.4 - , Java , , . : Java 1.4 ; Java 7 . JSR51

    (NIO) Java 2002 , 1.4. , Java : ( ) ; ; , , ; , Perl.

    PERL

    , Java . , . java.io.File : 1;

    1 Java , Java , .

  • 64 1. Java 7

    (, / );

    ; , 1;

    2.

    2.1.3. NIO.2 JSR203 ( ) , , , . JSR203 , API NIO.2 Java 7. , JSR203, 2.1 (http://jcp.org/en/jsr/detail?id=203).

    , API, , .

    API (, , ) , .

    , JSR51, , .

    Path .

    2.2. Path -

    Path , , NIO.2. Path , C:\workspace\java7developer ( Microsoft Windows) /usr/bin/zip ( ZIP *nix). , , , , ZIP.

    1 Linux/UNIX.

    2 Java 1.4 .

  • 2. - 65

    . 2.1 ( ) : ; ; ; .

    . 2.1. , ,

  • 66 1. Java 7

    , , , . , /java7developer/src/test , /java7developer/src/main. /java7developer/src/main, ../main.

    , /java7developer/src/test/java/com/java7developer? ../main ( /java7developer/src/test/java/com/main). , , /java7developer/src/main.

    : (, . 2.1). (, /java7developer D:\workspace\j7d). , .

    (Path) NIO.2 . Path , . , . , , , . , Files.createFile(Path target)1. , Path, , , IOException. , Path , , Files.readAllBytes(Path). , Java Path .

    , . Path C:\workspace\java7developer, , , - C:\workspace\java7developer. , - , , . - - , - - !2

    , NIO.2 ( Path) (, ). Files.

    1 , 2.4.1, .2 ,

    .

  • 2. - 67

    Path . 2.1 ( , ).

    2.1. -

    Path Path , - , , . , -

    Paths , - , get(String first, String... more) get(URI uri)

    FileSystem , . - , , , (URI)

    FileSystems , , FileSystems.getDefault(), ,

    , Path . Path Files, , . , .

    Path , , ZIP JAR.

    Path, : Path; Path; Path; Path, Path, Path, Path. Path

    .

    2.2.1. . Paths.get(String first, String... more). , , Path.

    , API NIO.2 , - Path Paths, IOException. , , , . , - , () IOException.

  • 68 1. Java 7

    Paths.get(String first) Path ZIP, /usr/bin/:

    Path listing = Paths.get("/usr/bin/zip");

    Paths.get("/usr/bin/zip") :

    Path listing = FileSystems.getDefault().getPath("/usr/bin/zip");

    Path . , /opt, , Path /usr/bin/zip, ../usr/bin/zip. , /opt ( /), /usr/bin/zip. , toAbsolutePath(). , : listing.toAbsolutePath().

    Path : Path, ( , ) .

    2.2.2. Path , , . Path ZIP, /usr/bin, : Path Path. , ZIP /usr/bin, :

    File Name [zip]Number of Name Elements in the Path [3]Parent Path [/usr/bin]Root of Path [/]Subpath from Root, 2 elements deep [usr/bin]

    , . , ( 2.1).

    2.1.

  • 2. - 69

    Path /usr/bin/zip , Path ( ) . , Path Path . , , . , (0) Path (2) .

    API NIO.2, .

    2.2.3. (, ) , , Path, :

    . ; .. ., /java7developer/src/main/

    java/com/java7developer/chapter2/ (. . 2.1). , Listing_2_1.java. , Path ./Listing_2.1.java, ./ ( , ) . Listing_2_1.java.

    , ( 2.4.3). , *nix ( ), log1.txt /usr/logs. /usr/logs /application/logs, , . , .

    , Path , , , .

    Java 7 , , Path. , Path , normalize() .

  • 70 1. Java 7

    Path Listing_2_1.java, , ( ./).

    Path normalizedPath = Paths.get("./Listing_2_1.java").normalize();

    toRealPath(), toAbsolutePath() normalize(). .

    , *nix log1.txt, /usr/logs. /application/logs. toRealPath() Path /application/logs/log1.txt.

    Path realPath = Paths.get("/usr/logs/log1.txt").toRealPath();

    API Path, , Path. , . .

    2.2.4. . , , , , . Path, , . Path. NIO.2 , .

    : uat conf/application.properties. resolve. /uat/conf/application.properties.

    Path prefix = Paths.get("/uat/");Path completePath = prefix.resolve("conf/application.properties");

    , relativize(Path). .

    String logging = args[0];String configuration = args[1];Path logDir = Paths.get(logging);Path confDir = Paths.get(configuration);Path pathToConfDir = logDir.relativize(confDir);

    , startsWith(Path prefix) endsWith(Path suffix), equals(Path path) .

    , Path, , Java 7?

  • 2. - 71

    NIO.2 API, Path Java.

    2.2.5. NIO.2 File, Java

    API API, java.io.File. , , java.io.File. Java 7 , .

    toPath() java.io.File, File Path.

    toFile() Path, Path File.

    .

    File file = new File("../Listing_2_1.java");Path listing = file.toPath();listing.toAbsolutePath();file = listing.toFile();

    Path. , Java 7 , .

    2.3.

    , , , 2.2, Path . Java 7 , . java.nio.file.DirectoryStream :

    , ; , (, *Foobar*) MIME (, text/xml);

    , walkFileTree.

    . , . .

  • 72 1. Java 7

    2.3.1. , (pattern matching) (.properties) java7developer. ( 2.2).

    2.2.

    Paths.get(String) . Files.newDirectoryStream(Path directory, String patternMatch) , DirectoryStream, , .properties. , .

    - (glob pattern match). , Perl, . B.

    2.2 . , ?

    2.3.2. Java 7 . , ( ), . , , .class /opt/workspace/java . (cleanup step) .

    Java 7. . , :

    Files.walkFileTree(Path startingDir, FileVisitor

  • 2. - 73

    startingDir , FileVisitor ( FileVisitor

  • 74 1. Java 7

    Files.walkFileTree . , , , FindJavaVisitor, SimpleFileVisitor . , SimpleFileVisitor . . , , visitFile(Path, BasicFileAttributes) . Java, , .java. , 1.

    , , . SimpleFileVisitor, API FileVisitor, .

    walkFileTree . , , . - , ( , , 2.4.3) .

    , . . Files .

    2.4. - NIO.2

    , , NIO.2 . , , Files.

    Files . 2.2 , (WatchService).

    2.2.

    Files , , , ,

    WatchService , ,

    1 BasicFileAttributes 2.4, .

  • 2. - 75

    , :

    ; , , ; ; ; ; WatchService ; SeekableByteChannel , .

    , API , .

    API NIO.2 , - - . , , - ( ), shutdown now UNIX. API - RuntimeException , , Files.exists(Path).

    API . , .

    2.4.1. Files , . , , . . , / .

    , , !

    Files.createFile(Path target). , D:\\Backup. MyStuff.txt.

    Path target = Paths.get("D:\\Backup\\MyStuff.txt");Path file = Files.createFile(target);

  • 76 1. Java 7

    FileAttributes . , , , , . , .

    / , POSIX1 . , , D:\\Backup\\MyStuff.txt . .

    Path target = Paths.get("D:\\Backup\\MyStuff.txt");Set perms = PosixFilePermissions.fromString("rw-rw-rw-");FileAttribute attr = PosixFilePermissions.asFileAttribute(perms);Files.createFile(target, attr);

    java.nio.file.attribute java.nio.file.attribute. , 2.4.3.

    umask , . , -, , rw-rw-rw, rw-r--r-- - .

    , Files.delete(Path). D:\\Backup\\MyStuff.txt. , , Java, !

    Path target = Paths.get("D:\\Backup\\MyStuff.txt");Files.delete(target);

    .

    2.4.2. Files .

    Files.copy(Path source, Path target).

    Path source = Paths.get("C:\\My Documents\\Stuff.txt");Path target = Paths.get("D:\\Backup\\MyStuff.txt");Files.copy(source, target);

    1 UNIX , .

  • 2. - 77

    . , , .

    import static java.nio.file.StandardCopyOption.*;Path source = Paths.get("C:\\My Documents\\Stuff.txt");Path target = Paths.get("D:\\Backup\\MyStuff.txt");Files.copy(source, target, REPLACE_EXISTING);

    COPY_ATTRIBUTES ( ) ATOMIC_MOVE ( ).

    Files.move(Path source, Path target). , , . Files.move(Path source, Path target, CopyOptions...) ( , ).

    , ( ).

    import static java.nio.file.StandardCopyOption.*;

    Path source = Paths.get("C:\\My Documents\\Stuff.txt");Path target = Paths.get("D:\\Backup\\MyStuff.txt");

    Files.move(source, target, REPLACE_EXISTING, COPY_ATTRIBUTES);

    , , . , Java 7 .

    2.4.3. , . , : , . , , .

    , , , , . . . , .

    , , .

  • 78 1. Java 7

    BasicFileAttributes , Files , .

    ? ? ? ? 2.4 Files,

    . /usr/bin/zip, :

    /usr/bin/zip2011-07-20T16:50:18Z351872falsefalse{lastModifiedTime=2011-07-20T16:50:18Z,fileKey=(dev=e000002,ino=30871217), isDirectory=false,lastAccessTime=2011-06-13T23:31:11Z, isOther=false,isSymbolicLink=false, isRegularFile=true,creationTime=2011-07-20T16:50:18Z, size=351872}

    , Files.readAttributes(Path path, Stringattributes, LinkOption... options).

    2.4.

    , Files. , , , , , .

    Java (Javadoc) Files, .

    Java 7 .

  • 2. - 79

    Java 7, FileAttribute PosixFilePermissions, 2.4.1. , , Java FileAttributeView BasicFileAttributes.

    , : , . , , .

    . , Java 7 . . 2.2 , Admin. .profile, , Admin ( ). .

    2.5 .profile . 2.2. (Admin) , Admin. POSIX, PosixFilePermission PosixFileAttributes, (rw-r--r--).

    . 2.2. Admin. .profile

    2.5. Java 7

  • 80 1. Java 7

    PosixFilePermission ( , ), Path .profile. Files , , , PosixFileAttributes . PosixFilePermission . Files .

    , , , PosixFilePermission enum FileAttributeView. , PosixFileAttributeView? ! Files , ( readAttributes) ( setPosixFilePermissions).

    , Java 7 . , , Java 7.

    . . , , , . , ,

  • 2. - 81

    , . NIO.2 .

    2.2.3. , *nix (), log1.txt /usr/logs. /usr/logs () /application/logs. .

    , ( ) UNIX, Linux, Windows 7 Mac OS X. Java 7 , UNIX.

    2.6 , Path Java, /opt/platform, . . , .

    2.6.

    Files isSymbolicLink(Path) . Path, . .

    API NIO.2 . , LinkOption.NOFOLLOW_LINKS. . , , :

    Files.readAttributes(target,BasicFileAttributes.class,LinkOption.NOFOLLOW_LINKS);

    , Java 7 . API ,

  • 82 1. Java 7

    ( , ).

    , , .

    2.4.4. Java 7 . , Path, java.io. , , ( ) , .

    ( ), , . , .

    Java 7 ( Java ) . , Java 7 ( Files.newBufferedReader) .

    Path logFile = Paths.get("/tmp/app.log");try (BufferedReader reader = Files.newBufferedReader(logFile, StandardCharsets.UTF_8)) { String line; while ((line = reader.readLine()) != null) { ... }}

    :

    Path logFile = Paths.get("/tmp/app.log");try (BufferedWriter writer = Files.newBufferedWrite(logFile, StandardCharsets.UTF_8, StandardOpenOption.WRITE)) { writer.write("Hello World!"); ...}

    StandardOpenOption.WRITE. OpenOption, . , . , , READ APPEND.

  • 2. - 83

    InputStream OutputStream Files.newInputStream(Path, OpenOption...) Files.newOutputStream(Path, OpenOption...). , java.io, , java.nio.

    , String . ( StandardCharsets, , : new String(byte[], StandardCharsets .UTF_8)), , .

    . Java 6 . , Java 7 , .

    Files , . , , while. , .

    Path logFile = Paths.get("/tmp/app.log");List lines = Files.readAllLines(logFile, StandardCharsets.UTF_8);byte[] bytes = Files.readAllBytes(logFile);

    , . (). .

    2.4.5. Java 7 . java.nio.file.WatchService. . . , , . , .

    2.7 WatchService karianna . ,

  • 84 1. Java 7

    , .

    2.7. WatchService

    WatchService, karianna . ( , shutdown) WatchService take(), , WatchKey. WatchKey , WatchKey WatchEvents . WatchEvent Kind ENTRY_MODIFY , . , , .

    , ENTRY_CREATE, ENTRY_DELETE OVERFLOW ( , ).

    API , . SeekableByteChannel.

  • 2. - 85

    2.4.6. SeekableByteChannel Java 7 SeekableByteChannel. , . , . , . .

    java.nio.channels.SeekableByteChannel JDK java.nio.channels.FileChannel. , . , , 1000 . , , .

    , FileChannel, ( seekable) 1000 .

    Path logFile = Paths.get("c:\\temp.log");ByteBuffer buffer = ByteBuffer.allocate(1024);FileChannel channel = FileChannel.open(logFile, StandardOpenOption.READ);channel.read(buffer, channel.size() - 1000);

    , FileChannel, , . , , . , , .

    , API NIO.2 , , , .

    2.5. - NIO.2 , . , . , . , , . , .

  • 86 1. Java 7

    , . , Java .

    . 100 . Java ( java.util.concurrent). . , . , , . , , , .

    -, - . . (Ron Hitchens) Java NIO ( O'Reilly, 2002).

    Java 7 , :

    AsynchronousFileChannel ; AsynchronousSocketChannel , ;

    AsynchronousServerSocketChannel , .

    () API : Future ( ) Callback ( ). , API , 4. , !

    Future , . , , . , .

    2.5.1. (Future style) , API NIO.2. java.util.concurrent.Future. ,

  • 2. - 87

    , , , .

    java.util.concurrent. Future, . , . , . . , . , . . 2.3 , ( 2.8 , ).

    . 2.3.

    , Future get() ( ) . , 100 000 ( ) . Java ,

  • 88 1. Java 7

    (, java.util.concurrent, ). Java 7 . 2.8.

    2.8. -

    AsynchronousFileChannel foobar.txt. . , . , AsynchronousFileChannel. Future . , (, ) . , .

    , ( isDone()). ( ), , .

    , , . , API/JVM . . ,

  • 2. - 89

    . Javadoc AsynchronousFileChannel.

    AsynchronousFileChannel , - (- -). -, , - , .

    AsynchronousFileChannel , (, , - ). , AsynchronousChannelGroup.

    , Callback ( ). , , , , , Swing, , API Java.

    2.5.2. , . Swing. , ( CompletionHandler) , . , completed failed ( ). .

    , . , , , . . .

    . java.nio.channels.CompletionHandler ( V , A , ) , , . completed(V, A) failed(V, A) , . . 2.4 ( 2.9 , ).

  • 90 1. Java 7

    . 2.4.

    100 000 foobar.txt. CompletionHandler.

    2.9. -

  • 2. - 91

    , , , AsynchronousServerSocketChannel AsynchronousSocketChannel. , , (, IP) .

    , API .

    2.6.

    . , ( , !). Java Socket Channel . Java 7 , NetworkChannel, Socket Channel.

    . , . , .

    , Java. Javadoc.

    java.nio.channels. , , - -, , ; - -.

    java.net.Socket. ( ). .

    Java Socket, ,

  • 92 1. Java 7

    TCP. Channel Socket .

    Java API, .

    Java .

    ,