คุณสมบัติใหม่ใน java 7


คำตอบ:


212

คุณลักษณะและการปรับปรุง Java SE 7 จากบันทึกประจำรุ่น JDK 7

นี่คือสรุปคุณสมบัติใหม่ของ Java 7 จากหน้าคุณสมบัติ OpenJDK 7 :

vm JSR 292: รองรับภาษาที่พิมพ์แบบไดนามิก (InvokeDynamic)
        การตรวจสอบไฟล์คลาสอย่างเข้มงวด
lang JSR 334: การปรับปรุงภาษาขนาดเล็ก (Project Coin)
สถาปัตยกรรมตัวโหลดคลาสอัพเกรดหลัก
        วิธีปิด URLClassLoader
        การอัปเดตพร้อมกันและคอลเลกชัน (jsr166y)
i18n Unicode 6.0
        การปรับปรุงสถานที่
        แยกตำแหน่งที่ตั้งของผู้ใช้และโลแคลส่วนติดต่อผู้ใช้
ionet JSR 203: I / O API ใหม่เพิ่มเติมสำหรับแพลตฟอร์ม Java (NIO.2)
        ผู้ให้บริการระบบไฟล์ NIO.2 สำหรับไฟล์เก็บถาวร zip / jar
        SCTP (โปรโตคอลการควบคุมการส่งกระแสข้อมูล)
        SDP (Sockets Direct Protocol)
        ใช้สแต็ก Windows Vista IPv6
        TLS 1.2
วินาที Elliptic-curve cryptography (ECC)
jdbc JDBC 4.1
ไปป์ไลน์ไคลเอนต์ XRender สำหรับ Java 2D
        สร้างแพลตฟอร์ม API ใหม่สำหรับคุณสมบัติกราฟิก 6u10
        รูปลักษณ์และความรู้สึกของ Nimbus สำหรับ Swing
        ส่วนประกอบ Swing JLayer
        เครื่องสังเคราะห์เสียง Gervill [ใหม่]
เว็บอัปเดตกอง XML
mgmt Enhanced MBeans [อัพเดท]

ตัวอย่างโค้ดสำหรับคุณสมบัติใหม่ใน Java 1.7

คำสั่งทดลองใช้กับทรัพยากร

นี้:

BufferedReader br = new BufferedReader(new FileReader(path));
try {
   return br.readLine();
} finally {
   br.close();
}

กลายเป็น:

try (BufferedReader br = new BufferedReader(new FileReader(path)) {
   return br.readLine();
}

คุณสามารถประกาศปิดทรัพยากรได้มากกว่าหนึ่งรายการ:

try (
   InputStream in = new FileInputStream(src);
   OutputStream out = new FileOutputStream(dest))
{
 // code
}

ขีดล่างในตัวอักษรตัวเลข

int one_million = 1_000_000;

สตริงในสวิตช์

String s = ...
switch(s) {
 case "quux":
    processQuux(s);
    // fall-through

  case "foo":
  case "bar":
    processFooOrBar(s);
    break;

  case "baz":
     processBaz(s);
    // fall-through

  default:
    processDefault(s);
    break;
}

ตัวอักษรไบนารี

int binary = 0b1001_1001;

ปรับปรุงการอนุมานประเภทสำหรับการสร้างอินสแตนซ์ทั่วไป

Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

กลายเป็น:

Map<String, List<String>> anagrams = new HashMap<>();

การจับข้อยกเว้นหลายครั้ง

นี้:

} catch (FirstException ex) {
     logger.error(ex);
     throw ex;
} catch (SecondException ex) {
     logger.error(ex);
     throw ex;
}

กลายเป็น:

} catch (FirstException | SecondException ex) {
     logger.error(ex);
    throw ex;
}

SafeVarargs

นี้:

@SuppressWarnings({"unchecked", "varargs"})
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}

กลายเป็น:

@SafeVarargs
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}

4
+1 รหัสสำหรับตัวอย่างโค้ดที่หาดูได้ยาก ขอเพิ่มได้ไหม
Zasz

3
การอนุมานประเภทที่ได้รับการปรับปรุงดูเหมือนจะเป็นสำเนาที่น่าเศร้าจาก C # ที่มีการเปลี่ยนแปลงแปลก ๆ ที่มีการพิมพ์การอ้างอิง แต่วัตถุไม่ใช่ ?? ตลกอะไร!
Zasz

1
@Zasz ใช่แน่นอนมันอยู่ในการปรับปรุงอย่างต่อเนื่อง
didxga

คำถามคือ OP คุณมีความคิดเห็นอย่างไร? การปรับปรุงเหล่านี้เป็นเพียงด้านการเพิ่มผลผลิตหรือสามารถปรับปรุงประสิทธิภาพของโปรแกรมได้จริงหรือ? หากไม่มีการเปลี่ยนแปลง bytecode จะสามารถใช้การปรับปรุงภาษาใหม่โดยมี bytecode เป็น 1.5 ได้หรือไม่
Dmitriy R

แม้ว่าจะไม่ใช่การปรับปรุงภาษา แต่ก็มีObjectsคลาสใหม่ที่มีวิธีการคงที่เพื่อหลีกเลี่ยงการตรวจสอบการอ้างอิงว่าง ตัวอย่าง: if (obj != null && obj.equals(anotherObj))กลายเป็นif (Objects.equals(obj, anotherObj))
Carcamano

13

คุณลักษณะใหม่ของ Java Standard Edition (JSE 7)

  1. ตกแต่งส่วนประกอบด้วยคลาส JLayer:

    คลาส JLayer เป็นมัณฑนากรที่ยืดหยุ่นและทรงพลังสำหรับส่วนประกอบ Swing คลาส JLayer ใน Java SE 7 นั้นมีความคล้ายคลึงกับโครงการโปรเจ็กต์ JxLayer ที่ java.net คลาส JLayer นั้นเริ่มต้นจากโครงการ JXLayer แต่ API ของมันพัฒนาแยกกัน

  2. สตริงในคำสั่งสวิตช์ :

    ใน JDK 7 เราสามารถใช้อ็อบเจกต์ String ในนิพจน์ของคำสั่ง switch คอมไพเลอร์ Java สร้าง bytecode ที่มีประสิทธิภาพมากขึ้นโดยทั่วไปจากคำสั่ง switch ที่ใช้อ็อบเจ็กต์ String มากกว่าจากคำสั่ง chained if-then-else

  3. ประเภทการอนุมานสำหรับอินสแตนซ์ทั่วไป:

    เราสามารถแทนที่อาร์กิวเมนต์ประเภทที่ต้องการเพื่อเรียกใช้ตัวสร้างของคลาสทั่วไปด้วยชุดพารามิเตอร์ชนิดว่าง (<>) ตราบใดที่คอมไพลเลอร์สามารถอนุมานอาร์กิวเมนต์ประเภทจากบริบทได้ คู่ของวงเล็บเหลี่ยมนี้เรียกอย่างไม่เป็นทางการว่าเพชร Java SE 7 รองรับการอนุมานแบบ จำกัด สำหรับการสร้างอินสแตนซ์ทั่วไป คุณสามารถใช้การอนุมานประเภทได้หากประเภทที่กำหนดพารามิเตอร์ของตัวสร้างชัดเจนจากบริบท ตัวอย่างเช่นตัวอย่างต่อไปนี้ไม่รวบรวม:

    List<String> l = new ArrayList<>();
    l.add("A");
    l.addAll(new ArrayList<>());
    

    ในการเปรียบเทียบตัวอย่างต่อไปนี้คอมไพล์:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
    
  4. การจับข้อยกเว้นหลายประเภทและการเปลี่ยนข้อยกเว้นด้วยการตรวจสอบประเภทที่ปรับปรุงใหม่:

    ใน Java SE 7 และใหม่กว่าบล็อกจับเดียวสามารถจัดการข้อยกเว้นได้มากกว่าหนึ่งประเภท คุณสมบัตินี้สามารถลดความซ้ำซ้อนของรหัส พิจารณารหัสต่อไปนี้ซึ่งมีรหัสซ้ำกันในแต่ละบล็อกจับ:

    catch (IOException e) {
        logger.log(e);
        throw e;
    }
    catch (SQLException e) {
        logger.log(e);
        throw e;
    }
    

    ในรีลีสก่อน Java SE 7 เป็นการยากที่จะสร้างเมธอดทั่วไปในการกำจัดโค้ดที่ซ้ำกันเนื่องจากตัวแปร e มีประเภทที่แตกต่างกัน ตัวอย่างต่อไปนี้ซึ่งใช้ได้ใน Java SE 7 และใหม่กว่ากำจัดรหัสที่ซ้ำกัน:

    catch (IOException|SQLException e) {
        logger.log(e);
        throw e;
    }
    

    ประโยคจับจะระบุประเภทของข้อยกเว้นที่บล็อกสามารถจัดการได้และข้อยกเว้นแต่ละประเภทจะถูกคั่นด้วยแถบแนวตั้ง (|)

  5. แพ็กเกจ java.nio.file

    java.nio.fileแพคเกจและแพคเกจที่เกี่ยวข้องกัน java.nio.file.attribute ให้การสนับสนุนที่ครอบคลุมสำหรับไฟล์ I / O และการเข้าถึงระบบไฟล์ ผู้ให้บริการระบบไฟล์ zip ยังมีอยู่ใน JDK 7

ที่มา: http://ohmjavaclasses.blogspot.com/


6

ตรงประเด็น! ผลการค้นหา " คุณลักษณะ Java " ของ Google 10 อันดับแรกส่งกลับรายการ (ไร้ประโยชน์):Simple, Object-Oriented, Portable, Platform independent, Secured...
Marinos An

3

นอกเหนือไปจากสิ่งที่จอห์นเป้าบินกล่าวว่านี่เป็นภาพรวมของโครงการ Java 7 ประกอบด้วยรายการและรายละเอียดของคุณสมบัติ

หมายเหตุ: JDK 7 ได้รับการปล่อยตัวเมื่อวันที่ 28 กรกฎาคม 2011 เพื่อให้คุณในขณะนี้ควรจะไปที่อย่างเป็นทางการJava SE เว็บไซต์


FYI นี่เป็นการนำเสนอที่ดี แต่ค่อนข้างเก่าและค่อนข้างล้าสมัย
Alex Miller

ฉันได้รับหน้าแสดงข้อผิดพลาดเป็นภาษาฮีบรูเมื่อลองใช้ลิงก์นี้ - มีสำเนาที่เป็นปัจจุบันมากกว่านี้หรือไม่
Simon Nickerson

1

การเปลี่ยนแปลงภาษา :

-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator

การเปลี่ยนแปลงห้องสมุด :

-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades

การเปลี่ยนแปลงแพลตฟอร์ม :

-support for dynamic languages

ด้านล่างนี้เป็นลิงค์ที่อธิบายคุณสมบัติที่เพิ่มเข้ามาใหม่ของ JAVA 7 คำอธิบายนั้นชัดเจนพร้อมตัวอย่างเล็ก ๆ ที่เป็นไปได้สำหรับแต่ละคุณสมบัติ:

http://radar.oreilly.com/2011/09/java7-features.html


0

การใช้ตัวดำเนินการ Diamond (<>) สำหรับการสร้างอินสแตนซ์ทั่วไป

Map<String, List<Trade>> trades = new TreeMap <> ();

การใช้สตริงในคำสั่งสวิตช์

String status=  “something”;
   switch(statue){
     case1: 
     case2: 
     default:
    }

ขีดเส้นใต้ตัวอักษรตัวเลข

int val 12_15; โทรศัพท์ยาว No = 01917_999_720L;

การใช้คำสั่ง catch เพียงครั้งเดียวสำหรับการทิ้งข้อยกเว้นหลายรายการโดยใช้“ |” ตัวดำเนินการ

catch(IOException | NullPointerException ex){
          ex.printStackTrace();   
    }

ไม่จำเป็นต้องปิด () รีซอร์สเนื่องจาก Java 7 มีคำสั่ง try-with-resources

try(FileOutputStream fos = new FileOutputStream("movies.txt");
      DataOutputStream dos = new DataOutputStream(fos)) {
              dos.writeUTF("Java 7 Block Buster");
  } catch(IOException e) {
        // log the exception
  }

ลิเทอรัลไบนารีที่มีคำนำหน้า“ 0b” หรือ“ 0B”



-2

รายการต่อไปนี้มีลิงก์ไปยังเพจการปรับปรุงใน Java SE 7

Swing
IO and New IO
Networking
Security
Concurrency Utilities
Rich Internet Applications (RIA)/Deployment
    Requesting and Customizing Applet Decoration in Dragg able Applets
    Embedding JNLP File in Applet Tag
    Deploying without Codebase
    Handling Applet Initialization Status with Event Handlers
Java 2D
Java XML – JAXP, JAXB, and JAX-WS
Internationalization
java.lang Package
    Multithreaded Custom Class Loaders in Java SE 7
Java Programming Language
    Binary Literals
    Strings in switch Statements
    The try-with-resources Statement
    Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking
    Underscores in Numeric Literals
    Type Inference for Generic Instance Creation
    Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods
Java Virtual Machine (JVM)
    Java Virtual Machine Support for Non-Java Languages
    Garbage-First Collector
    Java HotSpot Virtual Machine Performance Enhancements
JDBC

เอกสารอ้างอิง 1 อ้างอิง 2


1
คุณควรให้คำอธิบายสั้น ๆ หรือตัวอย่างแทนรายการสิ่งที่เราสามารถค้นหาได้ในหน้าทางการของ Java
Ken Block
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.