1. Fitur baru Java JDK1.5
1. Generik:
Daftar <String> strs = ArrayList baru <string> (); // Tentukan jenis penyimpanan untuk koleksi. Saat menyimpan data dalam pengumpulan di atas, data string harus disimpan, jika tidak, kompiler akan melaporkan kesalahan
2. untuk setiap
Misalnya, kita dapat melintasi koleksi di atas melalui tindakan, yang membuatnya lebih mudah dan lebih jelas
untuk (string s: strs) {system.out.println (s);}CATATAN: Saat menggunakan untuk melintasi koleksi, koleksi untuk melintasi harus mengimplementasikan antarmuka Iterator
3. fungsi unboxing dan pengepakan otomatis
Salinan kode adalah sebagai berikut:
Apa artinya?
JDK1.5 mendefinisikan kelas enkapsulasi untuk setiap tipe data dasar. Buat tipe data dasar di java juga memiliki objek sendiri, misalnya: int -> integer,
ganda -> ganda,
panjang -> panjang,
char -> karakter,
float -> float,
Boolean -> Boolean,
pendek -> pendek,
byte -> byte
Kemasan Otomatis: Konversi tipe dasar menjadi objek, misalnya: int -> integer
Pembongkaran Otomatis: Konversi objek menjadi tipe data dasar, misalnya: Integer -> int
Masalah bahwa koleksi tidak dapat menyimpan tipe data dasar sebelum JDK1.5 sekarang dapat diselesaikan.
4. Pencacahan:
Pencacahan adalah fitur komparatif yang diperkenalkan oleh JDK1.5. Kata kunci adalah enum
Misalnya: Tentukan enumerasi yang mewakili lampu lalu lintas
publik enum myenum {merah, hijau, kuning}5. Parameter variabel
Apa artinya? Izinkan saya memberi Anda contoh: Sebelum JDK1.5, ketika kami ingin melewati beberapa parameter dari tipe yang sama ke suatu metode, kami memiliki dua metode untuk menyelesaikannya, 1. Langsung melewati array, 2. Lulus sebanyak parameter seperti yang ada.
Misalnya:
public void printColor (String Red, String Green, String Yellow) {} atau
public void printColor (string [] warna) {} Meskipun menulis parameter metode dengan cara ini dapat mencapai efek yang kita inginkan, bukankah ini sedikit merepotkan? Selain itu, apa yang harus kita lakukan jika jumlah parameter tidak pasti? Parameter variabel yang disediakan oleh Java JDK1.5 dapat dengan sempurna menyelesaikan masalah ini, misalnya:
public void printColor (String ... Colors) {}
Itu bisa didefinisikan seperti ini, apa artinya? Jika parameternya dari jenis yang sama, Anda dapat menggunakan formulir "Type + Three Points, diikuti dengan nama parameter". Keuntungan dari ini adalah bahwa selama jenis parameternya sama, tidak ada batasan jumlah parameter yang dilewati: parameter variabel harus menjadi item terakhir dalam daftar parameter (fitur ini berlaku untuk objek dan tipe data dasar)
6. Impor statis
Keuntungan: Menggunakan impor statis dapat membuat semua variabel statis dan metode statis dari kelas impor secara langsung terlihat di kelas saat ini. Menggunakan anggota statis ini tidak perlu memberikan nama kelas mereka.
Kerugian: Over use akan mengurangi keterbacaan kode
7. Perpustakaan Konkurensi Thread
Thread Concurrency Library adalah fitur canggih dari multithreading yang diusulkan oleh Java 1.5. Terletak di paket: java.util.concurrent
termasuk
1. Kelas Alat Mutex Thread Deskripsi: Kunci, Redwritelock
2. Deskripsi Komunikasi Thread: Kondisi
3. Benang
ExecutorService
3. Sinkronisasi antrian
Arrayblockingqueue
4. Koleksi Sinkronisasi
Concurrenthashmap, copyonWriteArraylist
5. Alat Sinkronisasi Thread
Tiang sinyal
Masih ada banyak konten (sangat penting) tentang perpustakaan konkurensi utas, jadi saya tidak akan mencantumkannya satu per satu di sini. Teman yang tertarik dapat memeriksa dokumen bantuan.
2. Fitur baru JDK1.6
1. Kelas Desktop dan Kelas SystemTray
Yang pertama dapat digunakan untuk membuka browser default sistem untuk menelusuri URL yang ditentukan, buka klien email default sistem untuk mengirim email ke alamat email yang ditentukan, gunakan aplikasi default untuk membuka atau mengedit file (misalnya, gunakan notepad untuk membuka file dengan txt sebagai akhiran), dan menggunakan printer default sistem untuk mencetak dokumen; Yang terakhir dapat digunakan untuk membuat program baki di area baki sistem.
2. Gunakan JAXB2 untuk mengimplementasikan pemetaan antara objek dan XML
JAXB adalah singkatan dari arsitektur Java untuk pengikatan XML, yang dapat mengubah objek Java menjadi format XML dan sebaliknya.
Kami menyebut pemetaan antara objek dan database relasional ORM, dan pada kenyataannya, pemetaan antara objek dan XML juga dapat disebut OXM (objek pemetaan XML). Ternyata JAXB adalah bagian dari Java EE. Di JDK1.6, Sun meletakkannya di Java SE, yang juga merupakan latihan Sun yang biasa. Versi JAXB yang hadir dengan JDK1.6 adalah 2.0. Dibandingkan dengan 1.0 (JSR 31), JAXB2 (JSR 222) menggunakan anotasi fitur JDK5 baru untuk mengidentifikasi kelas dan atribut yang akan terikat, yang sangat menyederhanakan beban kerja. Faktanya, di Java EE 5.0, EJB dan layanan web juga menyederhanakan pengembangan melalui anotasi. Selain itu, JAXB2 menggunakan STAX (JSR 173) untuk memproses dokumen XML di bagian bawah.
Selain JAXB, kami juga dapat mencapai fungsi yang sama melalui XMLBeans dan Castor, dll.
3. Memahami Stax
Stax (JSR 173) adalah API lain untuk memproses dokumen XML di JDK1.6.0 selain DOM dan SAX.
Asal Stax: Ada dua cara untuk memproses dokumen XML di JAXP1.3 (JSR 206): DOM (model objek dokumen) dan SAX (API sederhana untuk XML).
Karena JAXB2 (JSR 222) dan JAX-WS 2.0 (JSR 224) di JDK1.6.0 Gunakan Stax, Sun memutuskan untuk menambahkan Stax ke keluarga JAXP dan meningkatkan versi JAXP menjadi 1.4 (JAXP1.4 adalah versi pemeliharaan JAXP1.3). Versi JAXP di JDK1.6 adalah 1.4. Stax adalah API streaming untuk singkatan XML, A API yang menggunakan dokumen XML yang dibaringkan menarik. STAX menyediakan API berdasarkan Iterator Acara untuk membiarkan pemrogram mengontrol proses penguraian dokumen XML. Program ini melintasi Iterator Acara ini untuk memproses setiap acara parsing. Acara penguraian dapat dianggap ditarik keluar oleh program, yaitu, program tersebut meminta parser untuk menghasilkan acara parsing dan kemudian menangani acara tersebut, dan kemudian menyebabkan parser menghasilkan acara penguraian berikutnya. Loop ini sampai karakter akhir dokumen ditemui. SAX juga memproses dokumen XML berdasarkan peristiwa, tetapi menggunakan mode push untuk parsing. Setelah parser parsis dokumen XML lengkap, itu hanya menghasilkan peristiwa parsing, dan kemudian mendorongnya ke program untuk memproses peristiwa ini. DOM mengadopsi metode untuk memetakan seluruh dokumen XML ke pohon memori, sehingga data node induk, node anak dan node saudara dapat dengan mudah diperoleh, tetapi jika dokumennya besar, itu akan secara serius mempengaruhi kinerja.
4. Gunakan API Compiler
Sekarang kita dapat menggunakan API kompiler JDK1.6 (JSR 199) untuk secara dinamis menyusun file sumber Java. API kompiler menggabungkan fungsi refleksi untuk mencapai generasi dinamis kode Java dan mengkompilasi dan menjalankan kode -kode ini, yang merupakan sedikit fitur bahasa yang dinamis.
Fitur ini sangat berguna untuk beberapa aplikasi yang memerlukan kompilasi dinamis, seperti JSP Web Server. Ketika kami memodifikasi JSP secara manual, kami tidak ingin memulai kembali server web untuk melihat efeknya. Pada saat ini, kita dapat menggunakan API kompiler untuk mengimplementasikan kompilasi dinamis file JSP. Tentu saja, server web JSP saat ini juga mendukung penempatan panas JSP. Server Web JSP saat ini memanggil Javac melalui runtime.exec atau ProcessBuilder untuk mengkompilasi kode selama operasi. Metode ini mengharuskan kita untuk menghasilkan proses lain untuk melakukan kompilasi, yang tidak cukup elegan dan mudah untuk membuat kode bergantung pada sistem operasi tertentu. Compiler API menyediakan cara yang lebih kaya untuk melakukan kompilasi dinamis melalui serangkaian API standar yang mudah digunakan, dan itu adalah cross-platform.
5. API server http ringan
JDK1.6 menyediakan HTTP Server API sederhana. Menurut ini, kami dapat membangun server HTTP tertanam kami sendiri, yang mendukung protokol HTTP dan HTTPS dan menyediakan bagian dari implementasi HTTP1.1. Bagian yang tidak diimplementasikan dapat diimplementasikan dengan memperluas HTTP Server API yang ada. Pemrogram harus mengimplementasikan antarmuka HTTPhandler sendiri. HTTPServer akan memanggil metode panggilan balik dari kelas implementasi HTTPHANDLER untuk menangani permintaan klien. Di sini, kami memanggil permintaan HTTP dan responsnya pertukaran, yang dibungkus menjadi kelas HTTPExchange. Httpserver bertanggung jawab untuk meneruskan HTTPExchange ke metode panggilan balik dari kelas implementasi HTTPhandler.
6. Pluggable Annotation Processing API (Pluggable Annotation Processing API)
Plug-in Annotation Processing API (JSR 269) menyediakan API standar untuk menangani anotasi (JSR 175)
Faktanya, JSR 269 tidak hanya digunakan untuk berurusan dengan anotasi. Saya pikir fungsi yang lebih kuat adalah membangun model bahasa Java itu sendiri. Ini memetakan elemen bahasa Java seperti metode, paket, konstruktor, jenis, variabel, enum, anotasi menjadi jenis dan elemen (apa perbedaan antara keduanya?), Dengan demikian memetakan semantik bahasa Java menjadi objek. Kita dapat melihat kelas -kelas ini di bawah paket javax.lang.model. Jadi kita dapat menggunakan API yang disediakan oleh JSR 269 untuk membangun lingkungan metaprogram yang kaya fitur. JSR 269 menggunakan prosesor anotasi untuk memproses anotasi selama kompilasi daripada selama operasi. Prosesor anotasi setara dengan plug-in kompiler, jadi itu disebut pemrosesan anotasi penyisipan. Jika kode JAVA baru dihasilkan ketika prosesor anotasi memproses anotasi (mengeksekusi metode proses), kompiler akan menghubungi prosesor anotasi lagi. Jika kode baru dihasilkan untuk pemrosesan kedua, maka itu akan menghubungi prosesor anotasi sampai tidak ada kode baru yang dihasilkan. Setiap kali metode proses () dieksekusi, disebut "putaran", sehingga seluruh proses pemrosesan anotasi dapat dianggap sebagai urutan putaran.
JSR 269 terutama dirancang sebagai API untuk alat atau wadah. Sebagai contoh, kami ingin membuat kerangka kerja pengujian unit berbasis anotasi (seperti testng) untuk menggunakan anotasi untuk mengidentifikasi metode pengujian yang perlu dieksekusi selama pengujian.
7. Gunakan konsol untuk mengembangkan program konsol
JDK1.6 menyediakan kelas java.io.console yang secara khusus digunakan untuk mengakses perangkat konsol berbasis karakter. Jika program Anda ingin berinteraksi dengan CMD di bawah Windows atau Terminal di bawah Linux, Anda dapat menggunakan kelas konsol untuk melakukannya. Tetapi kami tidak selalu mendapatkan konsol yang tersedia, apakah JVM memiliki konsol yang tersedia tergantung pada platform yang mendasarinya dan bagaimana JVM disebut. Jika JVM dimulai pada baris perintah interaktif (seperti Windows CMD) dan input dan output tidak dialihkan di tempat lain, maka Anda bisa mendapatkan instance konsol yang tersedia.
8. Dukungan untuk bahasa skrip
Seperti: ruby, groovy, javascript.
9. Anotasi umum
Anotasi umum pada awalnya adalah bagian dari spesifikasi Java EE 5.0 (JSR 244), dan sekarang Sun menempatkan sebagian dari Java SE 6.0.
Dengan penambahan fungsi anotasi metadata (JSR 175) ke Java SE 5.0, banyak teknologi Java (seperti EJB dan Web Services) akan menggunakan bagian anotasi untuk mengganti file XML untuk mengonfigurasi parameter yang berjalan (atau mendukung pemrograman deklaratif, seperti transaksi deklaratif EJB). Jika teknologi ini menentukan otasi mereka sendiri secara terpisah untuk tujuan umum, itu jelas merupakan konstruksi duplikat. Oleh karena itu, sangat berharga untuk mendefinisikan serangkaian anotasi publik untuk teknologi Java terkait lainnya. Ini dapat menghindari konstruksi duplikat sambil juga memastikan konsistensi berbagai teknologi Java SE dan Java EE.
Daftar berikut 10 Anotasi Anotasi Umum Anotasi Target Retensi Deskripsi DESKRIPSI yang dihasilkan SourceanNotation_Type, konstruktor, bidang, lokal_variabel, metode, paket, parameter, ketik. Kode sumber yang dihasilkan oleh anotasi digunakan untuk memberi label sumber daya yang dihasilkan. Wadah menyuntikkan dependensi sumber daya eksternal menurut ini. Ada dua metode: injeksi berbasis lapangan dan injeksi berbasis setter. Runtime sumber daya. Ketik label beberapa dependensi eksternal pada saat yang sama. Wadah akan menyuntikkan semua dependensi eksternal ini ke dalam metode postconstructruntime. Metode ini berjalan setelah wadah menyuntikkan semua dependensi untuk melakukan pekerjaan inisialisasi setelah injeksi ketergantungan. Hanya satu metode yang dapat diberi label metode runtime Postconstroy PrePROY. Sebelum instance objek akan dihapus dari wadah, metode callback yang akan dieksekusi harus diberi label sebagai tipe runtime Runas Predestroy digunakan untuk memberi label peran keamanan apa untuk melaksanakan metode kelas berlabel. Peran keamanan ini harus konsisten dengan peran keamanan wadah. Peran tipe runtime, metode digunakan untuk memberi label peran keamanan yang memungkinkan pelaksanaan kelas atau metode berlabel. Peran keamanan ini harus konsisten dengan peran keamanan kontainer. Metode memungkinkan semua peran untuk menjalankan kelas atau metode berlabel. Denyall Jenis Runtime. Metode tidak mengizinkan peran apa pun untuk menjalankan kelas atau metode berlabel, menunjukkan bahwa kelas atau metode tidak dapat berjalan dalam wadah Java EE. Jenis runtime deklarerol digunakan untuk menentukan peran keamanan yang dapat diuji dengan aplikasi. Biasanya digunakan untuk menggunakan isuserinrole untuk memverifikasi peran keamanan.
Melihat:
1. Peran yang Dialihkan, Permitall, dan Denyall tidak dapat diterapkan pada peran kelas atau metode yang dialihkan, permitall, dan Denyall berlabel di kelas akan menimpa peran yang dialihkan, izin, Denyallrunas, roles yang dapat ditangani, di atasnya, Delyall dan Declarerole yang tidak ditambahkan ke Java Se 6.0 untuk ditangani di atas. Java SE6.0 hanya berisi kelas definisi dari lima anotasi pertama dalam tabel di atas, dan tidak berisi mesin untuk menangani anotasi ini. Pekerjaan ini dapat dilakukan oleh API pemrosesan anotasi pluggable (JSR 269).
Dibandingkan dengan fitur baru 1,6, fitur baru 1.7 membuat kami lebih bersemangat karena itu adalah sesuatu yang telah kami nantikan dan terlihat dan nyata.
3. Fitur baru JDK1.7
1. Nilai Wajah biner
Di Java7, nilai jenis pembentukan (byte, pendek, int, panjang) dapat diwakili oleh tipe biner. Saat menggunakan nilai biner, OB atau OB perlu ditambahkan di depannya, misalnya:
int a = 0B01111_00000_11111_00000_10101_01010_10; pendek b = (pendek) 0B01100_00000_111111_0; byte c = (byte) 0B00000_0001;
2. Dukungan variabel digital untuk garis geser
JDK1.7 dapat menambahkan garis slide ke variabel tipe numerik.
Tetapi ada beberapa tempat yang tidak dapat ditambahkan
1. Awal dan akhir dari angka
2. Sebelum dan sesudah titik desimal
3. Sebelum F atau L, misalnya:
int num = 1234_5678_9;
float num2 = 222_33f;
long num3 = 123_000_111l;
3. Dukungan Switch untuk String
Apakah Anda selalu memiliki tanda tanya sebelumnya? Mengapa C# tersedia di Java tetapi tidak? Ha, tapi Java juga baik -baik saja setelah JDK1.7, misalnya:
Status String = "Orderstate"; switch (status) {case "ordercancel": System.out.println ("Pesanan Pembatalan"); merusak; kasus "pesanan": System.out.println ("Langganan Sukses"); merusak; default: system.out.println ("status tidak diketahui"); }4. Try-dengan-sumber daya
Cobalah dengan sumber daya adalah deklarasi mencoba yang mendefinisikan satu atau lebih sumber daya. Sumber daya ini mengacu pada objek yang perlu ditutup oleh program setelah diproses. Cobalah dengan sumber daya memastikan bahwa setiap sumber ditutup setelah pemrosesan selesai.
Sumber daya yang dapat menggunakan Sumber-Sumber Tersedia adalah:
Objek apa pun yang mengimplementasikan antarmuka java.lang.Autoclosable Java.io.Closable Interface.
Misalnya:
String statis public ReadFirStLinefromFile (string path) melempar IOException {try (bufferedReader br = new bufferedReader (filereader baru (path))) {return br.readline (); }}
Dalam versi Java 7 dan yang lebih baru, BufferedReader mengimplementasikan antarmuka Java.lang.Autoclosable.
Karena penyangga didefinisikan dalam deklarasi percobaan-dengan-sumber daya, itu akan secara otomatis dimatikan terlepas dari apakah pernyataan coba itu normal atau abnormal. Sebelum Java7, Anda perlu menggunakan blok akhirnya untuk menutup objek ini.
5. Tangkap beberapa pengecualian dan lemparkan kembali pengecualian dengan pengecekan jenis yang lebih baik
Misalnya:
public static void first () {coba {bufferedReader reader = new buferedReader (new filereader ("")); Koneksi con = null; Pernyataan stmt = con.createStatement (); } catch (IoException | SQLException e) {// Tangkap beberapa pengecualian, E adalah tipe akhir E.PrintStackTrace (); }}Keuntungan: Menggunakan satu tangkapan untuk menangani beberapa pengecualian lebih kecil dan lebih efisien daripada menggunakan beberapa tangkapan untuk menangani satu pengecualian pada bytecode yang dihasilkan dengan memproses satu pengecualian.
6. Jenis inferensi saat membuat obat generik
Selama kompiler dapat menyimpulkan parameter jenis dari konteks, Anda dapat mengganti parameter generik dengan sepasang braket sudut kosong <>. Sepasang kurung ini secara pribadi disebut berlian. Sebelum Java SE 7, Anda harus melakukan ini saat mendeklarasikan objek generik
Daftar <String> Daftar = ArrayList baru <string> ();
Dan setelah Java Se7, Anda bisa melakukan ini
Daftar <String> Daftar = ArrayList baru <> ();
Karena kompiler dapat menyimpulkan parameter jenis dari sebelumnya (daftar), Anda tidak dapat lagi menulis parameter generik setelah daftar array berikutnya, cukup gunakan sepasang kurung sudut kosong. Tentu saja, Anda harus membawa "berlian" <>, jika tidak, akan ada peringatan.
Java SE7 hanya mendukung inferensi tipe terbatas: Anda hanya dapat menggunakan inferensi tipe jika tipe parameter konstruktor secara signifikan dinyatakan dalam konteks, jika tidak itu tidak akan berhasil.
Daftar <String> Daftar = ArrayList baru <> (); list.add ("a"); // ini tidak berfungsi daftar.addall (arraylist baru <> ()); // ini bisa daftar <? Extends String> list2 = new ArrayList <> (); list.addall (list2);
7. (tidak ada)
8. Tambahkan beberapa alat dan metode baru untuk mendapatkan informasi lingkungan
Misalnya:
File system.getUserhomedir () // direktori pengguna saat ini System.getUserdir () // direktori di mana Anda berada saat memulai proses java 5 file system.getjavaiotempdir () // io direktori file folder sementara.getjavahomedir () // JRE Direktori instalasi JRE
9. Penambahan yang aman, pengurangan, perkalian dan divisi
Misalnya:
int math.safetoint (nilai panjang) int math.safenegate (nilai int) matematika panjang. Math.safenegate (nilai panjang) int math.safeadd (int value1, int value2) long math.safeadd (nilai panjang1, value2 value2) matematika panjang.safeadd (nilai panjang1, nilai panjang2) int math.safeSubtract (int value1, value2)
Nah, sejauh ini telah diselesaikan sejauh ini. Saya akan menambahkannya nanti.
Perlu dicatat bahwa jika Anda tidak yakin tentang versi JDK Anda sebelumnya, jangan gunakan fitur baru, jika tidak mungkin ada masalah ini atau itu.