SlideShare ist ein Scribd-Unternehmen logo
1 von 103
Downloaden Sie, um offline zu lesen
千呼萬喚始出來的
     Java SE 7
●   林信良
●   caterpillar@openhome.cc
●   http://openhome.cc
議程
•   Java 進化史
•   JSR334 / Coin 專案
•   Unicode 6.0.0、JDBC 4.1
•   JSR203 / NIO.2
•   JSR166y / Concurrency Updates
•   JSR292 / Da Vinci Machine 專案
Java 進化史


    2002/02/13
Java 進化史



    2004/09/29
Java 進化史



    ?
    2006/12/11
Java 進化史
    2011/07/28



    ?
A / B 計畫
• JDK 7 Features updated ! Plan B has
  apparently been approved
  – http://www.baptiste-wicht.com/2010/09/jdk-7-
    features-updated-plan-b-is-apparently-here/
JDK7 ...



  λ                  Jigsaw

Language support for collections

           Annotations on Java types
JDK7 有...
• JDK 7 Features
  – http://openjdk.java.net/projects/jdk7/features/

                            Concurrency
                              Updates
Coin                   Invoke
                      Dynamic
        NIO.2
JSR334 / Coin 專案
Small language enhancements
• Strings in switch
• Binary integral literals and underscores in
  numeric literals
• Multi-catch and more precise rethrow
• Improved Type Inference for Generic
  Instance Creation (diamond)
• try-with-resources statement
• Simplified Varargs Method Invocation
Strings in if-else
Strings in switch
反組譯...

   先用 hashCode()


再用 equals()
Binary integral literals and
underscores in numeric literals
 • Binary literal

 • With underscores for clarity
Multi-catch
略...




                  都作一樣的事



           略...
Multi-catch



• It is a compile-time error if a disjunctive
  type contains two alternatives Di, Dj where
  Di is a subtype of Dj.
Multi-catch
• An exception parameter whose type is a
  disjunctive type is implicitly considered to
  be final.




  try { /* throws some ReflectiveOperationException */ }
  catch (final ClassNotFoundException ex1) { /* body */ }
  catch (final IllegalAccessException ex2) { /* body */ }
More precise rethrow
• JDK6...

      ...         沒有宣告 Exception

            ...




 // 作一些事
More precise rethrow
• JDK7...

      ...

            ...
Inferring Types with <>
• 沒有 Generics 前

• 有了 Generics 後

• 有了 Inferring Types 後
Inferring Types with <>
• 僅使用 <> 表示推斷類型




• 不過別什麼都交給編譯器判斷....
Inferring Types with <>
• 如果...



• 推斷出來是 Integer 或 Number?
Inferring Types with <>
• 這有什麼問題?
Try-with-resources
• 讓這段程式碼更耐用一些...
Try-with-resources
• 讓這段程式碼更簡潔一些...
Try-with-resources
• 讓這段程式碼更簡潔一些...
Try-with-resources
try ResourceSpecification
  Block
⇒
{
  final VariableModifiers_minus_final R #resource = Expression;
  Throwable #primaryException = null;
    try ResourceSpecificationtail
      Block
    catch (Throwable #t) {
      #primaryException = t;
      throw #t;
    } finally {
      if (#resource != null) {
        if (#primaryException != null) {
          try {
            #resource.close();
          } catch(Throwable #suppressedException) {
            #primaryException.addSuppressed(#suppressedException);
          }
        } else {
          #resource.close();
        }
      }
    }
}
Try-with-resources
• 如果要處理例外...
Try-with-resources
• 如果要處理例外...
               try-with-resources
Try-with-resources
• API 支援
 – java.lang.AutoClosable




 – java.io.Closeable 繼承 AutoCloseable
Try-with-resources
• API 支援
  –   java.beans.XMLDecoder
  –   java.beans.XMLEncoder
  –   java.io.Closeable
  –   java.io.ObjectInput
  –   java.io.ObjectOutput
  –   java.sql.Connection
  –   java.sql.ResultSet
  –   java.sql.Statement
  –   java.nio.channels.FileLock
  –   javax.sound.midi.MidiDevice
  –   javax.sound.midi.Receiver
  –   javax.sound.midi.Transmitter
  –   javax.sound.sampled.Line
Try-with-resources
• a 與 b 關閉的順序?
Heap pollution
• JDK6....


          要求編譯器檢查傳入引數是不是都是 T 型態


• OK...
Heap pollution
 • 希望編譯器檢查都是 List<String>....




.....: warning: [unchecked] unchecked generic array creation of type java
.util.List<java.lang.String>[] for varargs parameter
            Util.doSome(Arrays.asList("three", "four"), Arrays.asList(“five", “six"));
                   ^
1 warning

 • 編譯器提醒 doSome() 內部實作可能對每個引數,
   只當作 List ...
Heap pollution

• 執行時期無法具體確認(reified)引數或變
  數型態
 – http://en.wikipedia.org/wiki/Heap_pollution
• Java 的 Generics 是編譯時期檢查
• Generics 的物件相等性?
 – http://caterpillar.onlyfun.net/JavaEssence/Gen
   ericEquals.html
Simplified Varargs Method
               Invocation
    • JDK7...




 提醒設計 doSome() 保證不會發生 Heap Pollution
....: warning: [unchecked] Possible heap pollution from parameterized var
arg type T
    public static <T> List<T> doSome(T... t) {
                            ^
  where T is a type-variable:
    T extends Object declared in method <T>doSome(T...)
1 warning
Simplified Varargs Method
          Invocation
• @SuppressWarnings(“unchecked”)?
   – 連同其它的警訊也抑制了...
   – 對 API 使用者也是有警訊...




• @SafeVarargs




• javac -Xlint:varargs;
Simplified Varargs Method
         Invocation
• JDK7...
Unicode 6.0.0
• 2010-10-11 正式發佈




       繪文字(emoji)
Unicode 6.0.0
• 2010-10-11 正式發佈




       繪文字(emoji)
Unicode 6.0.0
• Java SE 7
  – Unicode 5.1.0  Unicode 6.0.0
• Java Tutorial
  – http://download.oracle.com/javase/tutorial/i18
    n/text/unicode.html
• Internationalization Enhancements in Java
  SE 7
  – http://download.java.net/jdk7/docs/technotes/
    guides/intl/enhancements.7.html
JDBC 4.1
• 繼承 AutoCloseable
 – Connection
 – ResultSet
 – Statement
JDBC 4.1
JDBC 4.1
JDBC 4.1
• RowSetProvider


java -Djavax.sql.rowset.RowSetFactory=com.sun.rowset.RowSetFactoryImpl


• RowSetFactory
JSR203 / NIO.2
NIO2
                    NIO
• File System API
• Channels API
  – Updates to socket channel API
  – Asynchronous I/O

• java.nio
  – Buffer
  – Channel
  – Selector
  – Charset
File System API
• java.io.File 怎麼了?
 – Not initially written to be extended
 – Many of the methods without exceptions
 – Methods behaved inconsistently across volumes and
   file systems
 – Methods for gaining simultaneous metadata about
   files were inefficient
 – Developers also requested the ability to develop their
   own file system implementations, for examples, zip
   files
 – ...
File System API
• 新套件
  – java.nio.file
  – java.nio.file.attribute




• Java Tutorials: File I/O (Featuring NIO.2)
  – http://download.oracle.com/javase/tutorial/essential/io
    /fileio.html
關於 Path
•   Methods to access components
•   Methods to test and compare
•   Methods to combine paths
•   File operations
•   All methods that access file system throw
    IOException
• No other checked exceptions in API
關於 Path
• 建立 Path



• 囉嗦點的話...
關於 Path
• Path 操作
                       同一階層




• 實作 equals()
 path.equals(otherPath)

• 實作 Iterable
 Path path = ...;
 for (Path name: path) {
     System.out.println(name);
 }
檔案移動與複製
• 支援選項設定
 – copyTo(target, option...)
 – moveTo(target, option...)
檔案屬性(Metadata)
• BasicFileAttributes
檔案屬性(Metadata)
• DosFileAttributes




• PosixFileAttributes
檔案屬性(Metadata)
• 設定群組、擁有者...
• 建立 Symbolic link、Hard link...
• 尋找 Link 的 Target...
檔案讀寫
• 針對 java.io 的 API
檔案讀寫
• 針對 Channels 與 ByteBuffers
目錄讀取
• 使用 Glob 過濾目錄




• What is Glob
  – http://download.oracle.com/javase/tutorial/essential/io
    /fileOps.html#glob
FileVisitor
FileVisitor
                        啟始目錄

preVisitDirectory                    postVisitDirectory




       檔案                目錄               鏈結

   visitFile                          visitFile
  preVisitDirectory              postVisitDirectory



                    檔案         檔案

            visitFile         visitFile
監看目錄修改
• WatchService
新舊之間
• Legacy File I/O Code
  – http://download.oracle.com/javase/tutorial/
    essential/io/legacy.html
Asynchronous Channel API
• java.nio.channels
 – AsynchronousSocketChannel
 – AsynchronousServerSocketChannel
 – AsynchronousFileChannel
 – AsynchronousDatagramChannel
Asynchronous Channel API
• 建立AsychronousServerSocketChannel
  – 類似建立ServerSocketChannel並綁定位址



• 接受連結
Asynchronous Channel API
• Future 模式
Asynchronous Channel API
• Future 模式
Asynchronous Channel API
• 客戶端建立AsynchronousSocketChannel

• 開啟連結

      Future<Void>
Asynchronous Channel API

• 客戶端傳送訊息



• 伺服端讀取訊息
Asynchronous Channel API

• The asynchronous channel APIs
  – http://www.ibm.com/developerworks/java/libra
    ry/j-nio2-1/index.html
JSR166y / Concurrency Updates
Concurrency Updates
• JDK5
  – JSR 166: Concurrency Utilities
• JDK7
  – JSR166y: Concurrency and collections updates
  – java.util.concurrent
     • ForkJoinPool
     • Phaser
     • TransferQueue
     • ConcurrentLinkedDeque
     • ThreadLocalRandom
     • ...
Divide and conquer
Fork / Join 模式
• Divide and conquer 的一種實現策略
• 著重在如何切割任務與組合子任務結果
Fork / Join 框架




不需傳回值的子動作 透過泛型傳回值的子任務
Fork / Join 框架
• ForkJoinTask:類似執行緒的輕量級實體
• 有別於 ExecutorService 的 ForkJoinPool
  – 採用 Work-stealing 演算,讓空閒的執行緒從執行
    較慢的執行緒中偷取任務
  – 建構與處理器數量相當執行緒,減少頻繁切換負擔
Fibonacci
Fibonacci


結果 1134903170
耗時 24608
Fibonacci
Fibonacci


結果 1134903170
耗時 199604
Fibonacci


     結果 1134903170
     耗時 pick some
.... you'd 199604 minimum granularity
size for which you always sequentially
solve rather than subdividing.
搜尋檔案
搜尋檔案


結果 665
耗時 12813
搜尋檔案
搜尋檔案


結果 665
耗時 7596
JSR292 / Da Vinci Machine 專案
靜態定型語言
• 根據資料的型態資訊,將變數及運算式進
  行分類,型態資訊是在宣告變數上
• 在執行時期變數的型態資訊無法改變,資
  料只能被指定至同一種型態的變數
靜態定型語言
靜態定型語言

2: invokestatic #3     // Method doSome:(Ljava/lang/String;)Ljava/lang/Integer;




17: invokevirtual #7   // Method Other.doOther:(Ljava/lang/String;)Ljava/lang/Integer;




32: invokeinterface #9, 2 // InterfaceMethod Another.doAnother:(Ljava/lang/String;)Ljava/lang/Integer;
動態定型語言
• 型態資訊在資料本身而不是變數
• 變數本身的型態是在執行時期運算得知,
  也同一變數可以參考至各種型態的資料
function max(m, n) {
    if(n.lessThan(m)) {
        return m;
    }
                           JavaScript
    return n;
}


def max(m, n):
    return m if n.lessThan(m) else n   Python
動態定型語言的挑戰
•   參數與傳回值都沒有型態
•   執行時才提供型態資訊
•   無法提前得知呼叫的方法相關型態資訊
•   如何成功編譯為位元碼(Byte code)?
          function max(m, n) {
              if(n.lessThan(m)) {
                  return m;
              }
              return n;
          }
動態定型語言的挑戰
• 為參數與傳回值建立合成(synthetic)類型
    – 可符合位元碼對型態的要求
    – 需要為各種語言建立特定實作(Implementer),
      以產生對應類型
    – JVM 本身的類型(String、Integer...)通常也
      無法直接對應
     MyObject max(MyObject x, MyObject y) {
           if(n.lessThan(m)) {
                return n;
invokevirtual #9 // Method MyObject.lessThan:(Ljava/lang/MyObject;)Ljava/lang/Boolean;
           }
           return m;
     }
動態定型語言的挑戰
• 運用反射呼叫(reflected invocation)
 – java.lang.reflect.Method 提供某類別
   或介面的方法直接呼叫(正是特定語言實作器
   所要求的)
 – 這些方法仍是執行時期從特定類別上取得
 – 執行時期的效能非常不彰
動態定型語言的挑戰
• 在 JVM 上執行特定語言直譯器(Interpreter)
 – 非常非常....慢...
JSR 292
• 為JVM與位元碼中新增invokedynamic指令
 invokedynamic <method-specification> <n>



• 新的方法連結機制
 – java.lang.invoke
    • CallSite
    • MethodHandle
    • ...
a = 40;
  • 考慮有個語言...                        b = a + 2;

  • 為這段程式碼產生位元碼...
bipush      40           the invokedynamic call site is +
istore_1
iload_1
invokestatic Method java/lang/Integer.valueOf:"(I)Ljava/lang/Integer;";
bipush      2
invokestatic Method java/lang/Integer.valueOf:"(I)Ljava/lang/Integer;";
invokedynamic InvokeDynamic
  REF_invokeStatic:
   Example.mybsm: method implementation currently                         unknown
    "(Ljava/lang/invoke/MethodHandles/Lookup;
      Ljava/lang/String;
      Ljava/lang/invoke/MethodType;)
    Ljava/lang/invoke/CallSite;":
   +:
    "(Ljava/lang/Integer; bootstrap method
      Ljava/lang/Integer;)
    Ljava/lang/Integer;";
JSR 292
• + 對整數的方法實作
• An invokedynamic call site is linked to a
  method by means of a bootstrap method




                   類似 Reflection?
JSR 292
• java.lang.reflect.Method
 – 非方法呼叫專用,執行時期有許多不必要資訊
 – 重量級,速度慢
• java.lang.invoke.MethodHandle
 – 主要目的就是在方法呼叫
 – 輕量級,速度快
JSR 292
• Java Virtual Machine Support for Non-
  Java Languages
  – http://download.java.net/jdk7/docs/technotes/
    guides/vm/multiple-language-support.html
JSR 292
• If a programming language was a
  boat…
  – http://compsci.ca/blog/if-a-programming-
    language-was-a-boat/
感謝 Orz...
●   林信良
●   caterpillar@openhome.cc
●   http://openhome.cc




                              Recently rediscovered diagrams prove
                              Leonardo invented the first JVM?
                              . http://openjdk.java.net/projects/mlvm/

Weitere ähnliche Inhalte

Was ist angesagt?

Ecmascript
EcmascriptEcmascript
Ecmascriptjay li
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)Kris Mok
 
Javascript share
Javascript shareJavascript share
Javascript shareXu Mac
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascriptjay li
 
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJustin Lin
 
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘Liu Allen
 
Java8 lambda
Java8 lambdaJava8 lambda
Java8 lambdakoji lin
 
ES5 introduction
ES5 introductionES5 introduction
ES5 introductionotakustay
 
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Justin Lin
 
Introduction to Basic Haskell Components (In Chinese)
Introduction to Basic Haskell Components (In Chinese)Introduction to Basic Haskell Components (In Chinese)
Introduction to Basic Haskell Components (In Chinese)ChengHui Weng
 
Reactive X 响应式编程
Reactive X 响应式编程Reactive X 响应式编程
Reactive X 响应式编程Jun Liu
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)jeffz
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式勇浩 赖
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享zenyuhao
 
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。勇浩 赖
 
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)Kris Mok
 

Was ist angesagt? (20)

Ecmascript
EcmascriptEcmascript
Ecmascript
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
Javascript share
Javascript shareJavascript share
Javascript share
 
Execution
ExecutionExecution
Execution
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
 
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
 
Java8 lambda
Java8 lambdaJava8 lambda
Java8 lambda
 
ES5 introduction
ES5 introductionES5 introduction
ES5 introduction
 
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
 
Introduction to Basic Haskell Components (In Chinese)
Introduction to Basic Haskell Components (In Chinese)Introduction to Basic Haskell Components (In Chinese)
Introduction to Basic Haskell Components (In Chinese)
 
Reactive X 响应式编程
Reactive X 响应式编程Reactive X 响应式编程
Reactive X 响应式编程
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)
 
Scala
ScalaScala
Scala
 
Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
 
页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式页游开发中的 Python 组件与模式
页游开发中的 Python 组件与模式
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享
 
论 Python 与设计模式。
论 Python 与设计模式。论 Python 与设计模式。
论 Python 与设计模式。
 
Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)Nashorn on JDK 8 (ADC2013)
Nashorn on JDK 8 (ADC2013)
 

Ähnlich wie 千呼萬喚始出來的 Java SE 7

千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)ykdsg
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
Node js实践
Node js实践Node js实践
Node js实践myzykj
 
ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1medcl
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]yiditushe
 
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Justin Lin
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践Jackson Tian
 
Jvm memory
Jvm memoryJvm memory
Jvm memorybenewu
 
[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3ArBing Xie
 
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇OpenEJB - 另一個選擇
OpenEJB - 另一個選擇Justin Lin
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CDChen-Tien Tsai
 
Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Wen-Tien Chang
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发mysqlops
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Justin Lin
 

Ähnlich wie 千呼萬喚始出來的 Java SE 7 (20)

千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
Node js实践
Node js实践Node js实践
Node js实践
 
ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1ElasticSearch Training#2 (advanced concepts)-ESCC#1
ElasticSearch Training#2 (advanced concepts)-ESCC#1
 
Node分享 展烨
Node分享 展烨Node分享 展烨
Node分享 展烨
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
 
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
Jvm memory
Jvm memoryJvm memory
Jvm memory
 
[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3
 
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 
Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛Ruby Rails 老司機帶飛
Ruby Rails 老司機帶飛
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 
Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫Java SE 8 技術手冊第 16 章 - 整合資料庫
Java SE 8 技術手冊第 16 章 - 整合資料庫
 

Mehr von Justin Lin

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring BootJustin Lin
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityJustin Lin
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走Justin Lin
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMailJustin Lin
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫Justin Lin
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤Justin Lin
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTLJustin Lin
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSPJustin Lin
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Justin Lin
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理Justin Lin
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應Justin Lin
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletJustin Lin
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式Justin Lin
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題Justin Lin
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步Justin Lin
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能Justin Lin
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組Justin Lin
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換Justin Lin
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構Justin Lin
 

Mehr von Justin Lin (20)

Ch14 簡介 Spring Boot
Ch14 簡介 Spring BootCh14 簡介 Spring Boot
Ch14 簡介 Spring Boot
 
Ch13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/SecurityCh13 整合 Spring MVC/Security
Ch13 整合 Spring MVC/Security
 
Ch12 Spring 起步走
Ch12 Spring 起步走Ch12 Spring 起步走
Ch12 Spring 起步走
 
Ch11 簡介 JavaMail
Ch11 簡介 JavaMailCh11 簡介 JavaMail
Ch11 簡介 JavaMail
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Ch09 整合資料庫
Ch09 整合資料庫Ch09 整合資料庫
Ch09 整合資料庫
 
Ch08 自訂標籤
Ch08 自訂標籤Ch08 自訂標籤
Ch08 自訂標籤
 
Ch07 使用 JSTL
Ch07 使用 JSTLCh07 使用 JSTL
Ch07 使用 JSTL
 
Ch06 使用 JSP
Ch06 使用 JSPCh06 使用 JSP
Ch06 使用 JSP
 
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
 
Ch04 會話管理
Ch04 會話管理Ch04 會話管理
Ch04 會話管理
 
Ch03 請求與回應
Ch03 請求與回應Ch03 請求與回應
Ch03 請求與回應
 
Ch02 撰寫與設定 Servlet
Ch02 撰寫與設定 ServletCh02 撰寫與設定 Servlet
Ch02 撰寫與設定 Servlet
 
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
 
14. 進階主題
14. 進階主題14. 進階主題
14. 進階主題
 
13.並行、平行與非同步
13.並行、平行與非同步13.並行、平行與非同步
13.並行、平行與非同步
 
12. 除錯、測試與效能
12. 除錯、測試與效能12. 除錯、測試與效能
12. 除錯、測試與效能
 
11. 常用內建模組
11. 常用內建模組11. 常用內建模組
11. 常用內建模組
 
10. 資料永續與交換
10. 資料永續與交換10. 資料永續與交換
10. 資料永續與交換
 
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
 

千呼萬喚始出來的 Java SE 7