Các tính năng mới trong java 7


Câu trả lời:


211

Các tính năng và cải tiến của Java SE 7 từ Ghi chú phát hành JDK 7

Đây là bản tóm tắt các tính năng mới của Java 7 từ trang tính năng của OpenJDK 7 :

vm JSR 292: Hỗ trợ cho các ngôn ngữ được nhập động (InvokeDynamic)
        Kiểm tra tệp lớp nghiêm ngặt
lang JSR 334: Cải tiến nhỏ về ngôn ngữ (Dự án Coin)
Nâng cấp lõi kiến ​​trúc trình nạp lớp
        Phương pháp đóng URLClassLoader
        Cập nhật đồng thời và bộ sưu tập (jsr166y)
i18n Unicode 6.0
        Nâng cao ngôn ngữ
        Riêng biệt ngôn ngữ người dùng và ngôn ngữ giao diện người dùng
ionet JSR 203: Thêm các API I / O mới cho nền tảng Java (NIO.2)
        Nhà cung cấp hệ thống tệp NIO.2 cho các kho lưu trữ zip / jar
        SCTP (Giao thức truyền điều khiển luồng)
        SDP (Giao thức trực tiếp ổ cắm)
        Sử dụng ngăn xếp IPv6 của Windows Vista
        TLS 1.2
giây Mật mã đường cong Elliptic (ECC)
jdbc JDBC 4.1
đường dẫn khách hàng XRender cho Java 2D
        Tạo các API nền tảng mới cho các tính năng đồ họa 6u10
        Giao diện Nimbus cho Swing
        Thành phần Swing JLayer
        Bộ tổng hợp âm thanh Gervill [MỚI]
web Cập nhật ngăn xếp XML
mgmt MBeans nâng cao [CẬP NHẬT]

Ví dụ mã cho các tính năng mới trong Java 1.7

Tuyên bố thử với tài nguyên

điều này:

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

trở thành:

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

Bạn có thể khai báo nhiều tài nguyên để đóng:

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

Dấu gạch dưới bằng chữ số

int one_million = 1_000_000;

Chuỗi trong công tắc

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;
}

Chữ nhị phân

int binary = 0b1001_1001;

Cải tiến kiểu suy luận để tạo phiên bản chung

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

trở thành:

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

Bắt nhiều ngoại lệ

điều này:

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

trở thành:

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

SafeVarargs

điều này:

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

trở thành:

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

4
Mã +1 cho các ví dụ mã khó tìm. Bạn có thể bổ sung thêm không?
Zasz

3
Suy luận kiểu được cải thiện dường như là một bản sao đáng buồn từ C # với một thay đổi kỳ lạ trong đó một tham chiếu được nhập, nhưng đối tượng thì không ?? Hài kịch gì!
Zasz

1
@Zasz, vâng chắc chắn, đó là trong cải tiến liên tục
didxga

Vậy câu hỏi đặt ra là OP, ý kiến ​​của bạn là gì? Những cải tiến này chỉ về mặt năng suất hay chúng thực sự có thể cải thiện hiệu suất của các chương trình? Nếu không có thay đổi nào về bytecode, có thể sử dụng các cải tiến ngôn ngữ mới với bytecode được đánh dấu là 1.5 không?
Dmitriy R

Mặc dù không phải là một cải tiến về ngôn ngữ, nhưng có Objectslớp mới , với các phương thức tĩnh để tránh phải kiểm tra các tham chiếu rỗng. Ví dụ: if (obj != null && obj.equals(anotherObj))trở thànhif (Objects.equals(obj, anotherObj))
Carcamano

13

Tính năng mới của Java Standard Edition (JSE 7)

  1. Trang trí các thành phần với Lớp JLayer:

    Lớp JLayer là một trình trang trí linh hoạt và mạnh mẽ cho các thành phần Swing. Lớp JLayer trong Java SE 7 có tinh thần tương tự như lớp dự án JxLayer tại java.net. Lớp JLayer ban đầu dựa trên dự án JXLayer, nhưng API của nó phát triển riêng biệt.

  2. Các chuỗi trong câu lệnh switch :

    Trong JDK 7, chúng ta có thể sử dụng một đối tượng String trong biểu thức của một câu lệnh switch. Trình biên dịch Java thường tạo ra bytecode hiệu quả hơn từ các câu lệnh switch sử dụng các đối tượng Chuỗi so với các câu lệnh if-then-else được xâu chuỗi.

  3. Nhập Suy luận cho Trường hợp Chung:

    Chúng ta có thể thay thế các đối số kiểu cần thiết để gọi phương thức khởi tạo của một lớp chung bằng một tập hợp rỗng các tham số kiểu (<>) miễn là trình biên dịch có thể suy ra các đối số kiểu từ ngữ cảnh. Cặp dấu ngoặc nhọn này được gọi chính thức là hình thoi. Java SE 7 hỗ trợ kiểu suy luận hạn chế để tạo phiên bản chung; bạn chỉ có thể sử dụng kiểu suy luận nếu kiểu tham số hóa của phương thức khởi tạo là rõ ràng trong ngữ cảnh. Ví dụ, ví dụ sau không biên dịch:

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

    Để so sánh, ví dụ sau sẽ biên dịch:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
    
  4. Bắt Nhiều Loại Ngoại lệ và Đánh lại các Ngoại lệ với Kiểm tra Loại Cải tiến:

    Trong Java SE 7 trở lên, một khối bắt duy nhất có thể xử lý nhiều loại ngoại lệ. Tính năng này có thể làm giảm sự trùng lặp mã. Hãy xem xét đoạn mã sau, mã này chứa mã trùng lặp trong mỗi khối bắt:

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

    Trong các bản phát hành trước Java SE 7, rất khó để tạo một phương pháp chung để loại bỏ mã trùng lặp vì biến e có nhiều kiểu khác nhau. Ví dụ sau, hợp lệ trong Java SE 7 trở lên, loại bỏ mã trùng lặp:

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

    Mệnh đề catch chỉ định các loại ngoại lệ mà khối có thể xử lý và mỗi loại ngoại lệ được phân tách bằng một thanh dọc (|).

  5. Gói java.nio.file

    Các java.nio.filegói và gói liên quan, java.nio.file.attribute của nó, cung cấp hỗ trợ toàn diện cho tập tin I / O và để truy cập vào hệ thống tập tin. Một nhà cung cấp hệ thống tệp zip cũng có sẵn trong JDK 7.

Nguồn: http://ohmjavaclasses.blogspot.com/


6

3

Ngoài những gì John Skeet đã nói, đây là tổng quan về dự án Java 7 . Nó bao gồm một danh sách và mô tả các tính năng.

Lưu ý: JDK 7 được phát hành vào ngày 28 tháng 7 năm 2011, vì vậy bây giờ bạn nên truy cập trang web java SE chính thức .


FYI, đây là một bản trình bày hay nhưng khá cũ và hơi lạc hậu.
Alex Miller

Tôi gặp trang lỗi bằng tiếng Do Thái khi tôi thử liên kết này - có bản sao cập nhật hơn ở bất kỳ đâu không?
Simon Nickerson

1

Thay đổi ngôn ngữ :

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

Thư viện thay đổi :

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

Thay đổi nền tảng :

-support for dynamic languages

Dưới đây là liên kết giải thích các tính năng mới được thêm vào của JAVA 7, giải thích rất rõ ràng với các ví dụ nhỏ có thể có cho từng tính năng:

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


0

Sử dụng toán tử Diamond (<>) để tạo phiên bản chung

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

Sử dụng chuỗi trong câu lệnh switch

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

Dấu gạch dưới trong các ký tự số

int val 12_15; long phoneNo = 01917_999_720L;

Sử dụng câu lệnh bắt duy nhất để ném nhiều ngoại lệ bằng cách sử dụng “|” nhà điều hành

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

Không cần đóng () tài nguyên vì Java 7 cung cấp câu lệnh 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
  }

các ký tự nhị phân có tiền tố “0b” hoặc “0B”


0

Tôi nghĩ ForkJoinPool và các cải tiến liên quan đến Executor Framework là một bổ sung quan trọng trong Java 7.


-2

Danh sách sau đây chứa các liên kết đến các trang cải tiến trong 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

Tham chiếu 1 Tham chiếu 2


1
Bạn nên đưa ra nhiều mô tả hoặc ví dụ ngắn hơn thay vì liệt kê những gì chúng ta có thể tìm hiểu trong trang chính thức của Java.
Ken Block
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.