Java 7'deki yeni özellikler


Yanıtlar:


212

JDK 7 Sürüm Notlarından Java SE 7 Özellikleri ve Geliştirmeleri

Bu, OpenJDK 7 özellikleri sayfasından Java 7'nin yeni özelliklerinin özetidir :

vm JSR 292: Dinamik olarak yazılmış diller için destek (InvokeDynamic)
        Katı sınıf dosyası denetimi
lang JSR 334: Küçük dil geliştirmeleri (Project Coin)
core Upgrade sınıfı yükleyici mimarisi
        URLClassLoader'ı kapatma yöntemi
        Eşzamanlılık ve koleksiyon güncellemeleri (jsr166y)
i18n Unicode 6.0
        Yerel iyileştirme
        Ayrı kullanıcı yerel ayarı ve kullanıcı arayüzü yerel ayarı
ionet JSR 203: Java platformu (NIO.2) için daha yeni G / Ç API'leri
        Zip / jar arşivleri için NIO.2 dosya sistemi sağlayıcısı
        SCTP (Akış Kontrol İletim Protokolü)
        SDP (Soketler Doğrudan Protokolü)
        Windows Vista IPv6 yığınını kullanın
        TLS 1.2
sn Eliptik eğri şifreleme (ECC)
jdbc JDBC 4.1
Java 2D için istemci XRender ardışık düzeni
        6u10 grafik özellikleri için yeni platform API'leri oluşturun
        Swing için Nimbus görünümü ve hissi
        Swing JLayer bileşeni
        Gervill ses sentezleyici [YENİ]
web XML yığınını güncelleyin
mgmt Geliştirilmiş MBean'ler [GÜNCELLENMİŞ]

Java 1.7'deki yeni özellikler için kod örnekleri

Kaynaklarla deneyin bildirimi

bu:

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

şu hale gelir:

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

Kapatmak için birden fazla kaynak bildirebilirsiniz:

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

Sayısal değişmez değerlerde alt çizgiler

int one_million = 1_000_000;

Anahtardaki dizeler

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

İkili değişmezler

int binary = 0b1001_1001;

Genel Örnek Oluşturma için Geliştirilmiş Tür Çıkarımı

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

şu hale gelir:

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

Birden çok istisna yakalama

bu:

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

şu hale gelir:

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

SafeVargs

bu:

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

şu hale gelir:

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

4
Bulması zor kod örnekleri için +1 Kodu. Daha fazlasını ekleyebilir misin?
Zasz

3
Geliştirilmiş tür çıkarımı, bir referansın yazıldığı, ancak nesnenin yazılmadığı garip bir değişiklikle C #'dan üzücü bir kopya gibi görünüyor? Ne komedi!
Zasz

1
@Zasz, evet elbette, sürekli iyileştirme içinde
didxga

Öyleyse soru OP için, fikriniz nedir? Bu iyileştirmeler sadece verimlilik tarafında mı yoksa programların performansını gerçekten artırabilirler mi? Bayt kodu değişikliği yoksa, 1.5 olarak işaretlenmiş bayt kodu ile yeni dil geliştirmeleri kullanılabilir mi?
Dmitriy R

Bir dil iyileştirmesi olmasa da, Objectsboş referansları kontrol etmek zorunda kalmamak için statik yöntemler içeren yeni bir sınıf vardır . Örnek: if (obj != null && obj.equals(anotherObj))olurif (Objects.equals(obj, anotherObj))
Carcamano

13

Java Standard Edition'ın (JSE 7) Yeni Özelliği

  1. Bileşenleri JLayer Sınıfı ile Süsleyin:

    JLayer sınıfı, Swing bileşenleri için esnek ve güçlü bir dekoratördür. Java SE 7'deki JLayer sınıfı, özünde java.net'teki JxLayer proje projesine benzer. JLayer sınıfı başlangıçta JXLayer projesine dayanıyordu, ancak API'si ayrı olarak gelişti.

  2. Switch Deyimindeki dizeler :

    JDK 7'de, bir switch ifadesinin ifadesinde bir String nesnesi kullanabiliriz. Java derleyici, String nesnelerini kullanan switch ifadelerinden zincirleme if-then-else ifadelerinden daha verimli bayt kodu üretir.

  3. Genel Örnek için Tür Çıkarımı:

    Derleyici bağlamdan tür bağımsız değişkenlerini çıkarabildiği sürece, genel bir sınıfın yapıcısını boş bir tür parametreleri kümesiyle (<>) çağırmak için gereken tür bağımsız değişkenlerini değiştirebiliriz. Bu çift açılı ayraç gayri resmi olarak elmas olarak adlandırılır. Java SE 7, genel örnek oluşturma için sınırlı tür çıkarımını destekler; tür çıkarımını yalnızca yapıcının parametreli türü bağlamdan açıksa kullanabilirsiniz. Örneğin, aşağıdaki örnek derlemez:

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

    Buna karşılık, aşağıdaki örnek derlenir:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
    
  4. Geliştirilmiş Tür Denetimi ile Birden Fazla İstisna Türünü Yakalama ve İstisnaları Yeniden Atma:

    Java SE 7 ve sonraki sürümlerde, tek bir yakalama bloğu birden fazla istisna türünü işleyebilir. Bu özellik, kod kopyalamasını azaltabilir. Yakalama bloklarının her birinde yinelenen kod içeren aşağıdaki kodu göz önünde bulundurun:

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

    Java SE 7'den önceki sürümlerde, e değişkeninin farklı türleri olduğundan, yinelenen kodu ortadan kaldırmak için ortak bir yöntem oluşturmak zordur. Java SE 7 ve sonraki sürümlerde geçerli olan aşağıdaki örnek, yinelenen kodu ortadan kaldırır:

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

    Catch cümlesi, bloğun işleyebileceği istisna türlerini belirtir ve her istisna türü bir dikey çubukla (|) ayrılır.

  5. Java.nio.file paketi

    java.nio.filePaket ve ilgili paket, java.nio.file.attribute, dosya I / O için ve dosya sistemi erişim için kapsamlı destek sağlar. Bir zip dosya sistemi sağlayıcısı da JDK 7'de mevcuttur.

Kaynak: http://ohmjavaclasses.blogspot.com/


6

3

John Skeet'in söylediklerine ek olarak , Java 7 projesine genel bir bakışı burada bulabilirsiniz . Özelliklerin bir listesini ve açıklamasını içerir.

Not: JDK 7, 28 Temmuz 2011'de piyasaya sürüldü, bu nedenle şimdi resmi java SE sitesine gitmelisiniz .


Bilginize, bu iyi bir sunum ama oldukça eski ve biraz da güncel değil.
Alex Miller

Bu bağlantıyı denediğimde İbranice bir hata sayfası aldım - herhangi bir yerde daha güncel bir kopya var mı?
Simon Nickerson

1

Dil değişiklikleri :

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

Kitaplık değişiklikleri :

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

Platform değişiklikleri :

-support for dynamic languages

Aşağıda JAVA 7'nin yeni eklenen özelliklerini açıklayan bağlantı verilmiştir, açıklama her özellik için olası küçük örneklerle çok nettir:

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


0

Genel örnek oluşturma için Diamond (<>) operatörünü kullanma

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

Anahtar deyimlerinde dizeleri kullanma

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

Sayısal değişmez değerlerde alt çizgi

int değer 12_15; uzun telefonNo = 01917_999_720L;

"|" Kullanarak birden çok istisna atmak için tek catch deyimi kullanma Şebeke

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

Kaynakları kapatmaya () gerek yok çünkü Java 7, kaynakları dene deyimi sağlıyor

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" veya "0B" önekine sahip ikili değişmezler


0

ForkJoinPool ve bununla ilgili Executor Framework geliştirmesinin Java 7'de önemli bir katkı olduğunu düşünüyorum .


-2

Aşağıdaki liste, Java SE 7'deki geliştirme sayfalarına bağlantılar içerir.

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

Referans 1 Referans 2


1
Java resmi sayfasında da bulabildiğimiz bu liste yerine daha fazla kısa açıklama veya örnek vermelisiniz.
Ken Block
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.