Fitur baru di java 7


Jawaban:


211

Fitur dan Peningkatan Java SE 7 dari Catatan Rilis JDK 7

Ini adalah ringkasan fitur baru Java 7 dari halaman fitur OpenJDK 7 :

vm JSR 292: Dukungan untuk bahasa yang diketik secara dinamis (InvokeDynamic)
        Pemeriksaan file kelas yang ketat
lang JSR 334: Peningkatan bahasa kecil (Project Coin)
core Upgrade arsitektur class-loader
        Metode untuk menutup URLClassLoader
        Pembaruan konkurensi dan koleksi (jsr166y)
i18n Unicode 6.0
        Peningkatan lokal
        Pisahkan lokal pengguna dan lokal antarmuka pengguna
ionet JSR 203: Lebih banyak I / O API baru untuk platform Java (NIO.2)
        Penyedia sistem file NIO.2 untuk arsip zip / jar
        SCTP (Protokol Transmisi Kontrol Aliran)
        SDP (Sockets Direct Protocol)
        Gunakan tumpukan Windows Vista IPv6
        TLS 1.2
sec Kriptografi kurva eliptik (ECC)
jdbc JDBC 4.1.0
pipeline klien XRender untuk Java 2D
        Buat API platform baru untuk fitur grafis 6u10
        Tampilan dan nuansa Nimbus untuk Swing
        Mengayunkan komponen JLayer
        Synthesizer suara Gervill [BARU]
web Perbarui tumpukan XML
mgmt Enhanced MBeans [DIPERBARUI]

Contoh kode untuk fitur baru di Java 1.7

Pernyataan coba-dengan-sumber daya

ini:

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

menjadi:

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

Anda dapat mendeklarasikan lebih dari satu sumber daya untuk ditutup:

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

Garis bawah dalam literal numerik

int one_million = 1_000_000;

String di sakelar

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

Literal biner

int binary = 0b1001_1001;

Inferensi Jenis yang Ditingkatkan untuk Pembuatan Instans Generik

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

menjadi:

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

Penangkapan beberapa pengecualian

ini:

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

menjadi:

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

SafeVarargs

ini:

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

menjadi:

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

4
+1 Kode untuk contoh kode yang sulit ditemukan. Bisakah Anda menambahkan lebih banyak?
Zasz

3
Jenis inferensi yang ditingkatkan tampaknya merupakan salinan sedih dari C # dengan perubahan aneh di mana referensi diketik, tetapi objeknya bukan ?? Komedi yang luar biasa!
Zasz

1
@Zasz, ya tentu, itu dalam peningkatan berkelanjutan
didxga

Jadi pertanyaannya adalah OP, apa pendapat Anda? Apakah peningkatan ini hanya pada sisi produktivitas, atau mereka benar-benar dapat meningkatkan kinerja program? Jika tidak ada perubahan bytecode, dapatkah peningkatan bahasa baru digunakan dengan bytecode yang ditandai sebagai 1,5?
Dmitriy R

Meskipun bukan peningkatan bahasa, ada Objectskelas baru , dengan metode statis untuk menghindari keharusan memeriksa referensi null. Contoh: if (obj != null && obj.equals(anotherObj))menjadiif (Objects.equals(obj, anotherObj))
Carcamano

13

Fitur Baru Java Standard Edition (BEJ 7)

  1. Hiasi Komponen dengan JLayer Class:

    Kelas JLayer adalah dekorator yang fleksibel dan kuat untuk komponen Ayunan. Kelas JLayer di Java SE 7 memiliki semangat yang mirip dengan proyek proyek JxLayer di java.net. Kelas JLayer awalnya didasarkan pada proyek JXLayer, tetapi API-nya berkembang secara terpisah.

  2. Pernyataan string dalam switch :

    Di JDK 7, kita bisa menggunakan objek String dalam ekspresi pernyataan switch. Kompiler Java menghasilkan bytecode yang umumnya lebih efisien dari pernyataan switch yang menggunakan objek String daripada dari pernyataan if-then-else yang dirantai.

  3. Ketik Inferensi untuk Instans Generik:

    Kita bisa mengganti argumen tipe yang diperlukan untuk memanggil konstruktor kelas generik dengan seperangkat parameter tipe kosong (<>) selama kompilator bisa menyimpulkan argumen tipe dari konteks. Sepasang tanda kurung sudut ini secara informal disebut berlian. Java SE 7 mendukung inferensi tipe terbatas untuk pembuatan instance generik; Anda hanya dapat menggunakan inferensi tipe jika tipe parameter dari konstruktor jelas dari konteksnya. Misalnya, contoh berikut tidak dapat dikompilasi:

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

    Sebagai perbandingan, contoh berikut mengkompilasi:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
  4. Penangkapan Beberapa Jenis Pengecualian dan Pelacakan Ulang Pengecualian dengan Pemeriksaan Jenis yang Ditingkatkan:

    Di Java SE 7 dan yang lebih baru, satu blok tangkapan dapat menangani lebih dari satu jenis pengecualian. Fitur ini dapat mengurangi duplikasi kode. Pertimbangkan kode berikut, yang berisi kode duplikat di setiap blok tangkapan:

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

    Dalam rilis sebelum Java SE 7, sulit untuk membuat metode umum untuk menghilangkan kode duplikat karena variabel e memiliki tipe yang berbeda. Contoh berikut, yang berlaku di Java SE 7 dan yang lebih baru, menghilangkan kode duplikat:

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

    Klausa catch menentukan jenis pengecualian yang dapat ditangani blok, dan setiap jenis pengecualian dipisahkan dengan bilah vertikal (|).

  5. Paket java.nio.file

    The java.nio.filepaket dan paket terkait, java.nio.file.attribute, memberikan dukungan yang komprehensif untuk file I / O dan untuk mengakses sistem file. Penyedia sistem file zip juga tersedia di JDK 7.

Sumber: http://ohmjavaclasses.blogspot.com/


6

3

Selain apa yang dikatakan John Skeet, berikut ini gambaran umum proyek Java 7 . Ini termasuk daftar dan deskripsi fitur.

Catatan: JDK 7 dirilis pada 28 Juli 2011, jadi Anda sekarang harus pergi ke situs resmi java SE .


FYI, ini adalah presentasi yang bagus tapi cukup tua dan ketinggalan zaman.
Alex Miller

Saya mendapat halaman kesalahan dalam bahasa Ibrani ketika saya mencoba tautan ini - apakah ada salinan yang lebih mutakhir di mana saja?
Simon Nickerson

1

Perubahan bahasa :

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

Perubahan perpustakaan :

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

Perubahan platform :

-support for dynamic languages

Di bawah ini adalah tautan yang menjelaskan fitur-fitur yang baru ditambahkan pada JAVA 7, penjelasannya sangat jelas dengan kemungkinan contoh kecil untuk setiap fitur:

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


0

Menggunakan operator Diamond (<>) untuk pembuatan instance generik

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

Menggunakan string dalam pernyataan sakelar

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

Garis bawah dalam literal numerik

int val 12_15; telepon panjangNo = 01917_999_720L;

Menggunakan pernyataan catch tunggal untuk melempar beberapa pengecualian dengan menggunakan “|” operator

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

Tidak perlu menutup () sumber daya karena Java 7 menyediakan pernyataan coba-dengan-sumber daya

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

literal biner dengan awalan "0b" atau "0B"


0

Saya pikir ForkJoinPool dan peningkatan terkait dengan Executor Framework merupakan tambahan penting di Java 7.


-2

Daftar berikut berisi link ke halaman penyempurnaan di 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

Referensi 1 Referensi 2


1
Anda harus memberikan deskripsi atau contoh yang lebih singkat daripada daftar itu yang juga dapat kami temukan di halaman resmi Java.
Ken Block
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.