1. String dapat ditambahkan ke pernyataan kondisional switch. Metodenya adalah dengan menggunakan nilai hashcode() dari string untuk mendapatkan nilai sebenarnya.
2. Menambahkan sistem dasar yang dapat digunakan secara literal, biner, dengan menambahkan "0b" atau "0B" di depan bilangan.
3. Gunakan garis bawah dalam literal numerik untuk memisahkan angka agar lebih mudah dibaca tanpa mempengaruhi ukuran nilainya. Prinsip dasarnya adalah garis bawah hanya bisa muncul jika ada angka sebelum dan sesudahnya.
4.java7 telah membuat dua perubahan pada pengecualian:
4.1. Mendukung penangkapan beberapa pengecualian secara bersamaan dalam klausa catch, dan yang lainnya adalah membuat jenis pengecualian lebih tepat saat menangkap dan menampilkan kembali pengecualian. Metode addSuppressed telah ditambahkan ke kelas Throwable di Java 7. Saat pengecualian dilempar, pengecualian lain mungkin disembunyikan karena pengecualian tersebut, dan karenanya tidak dapat dilempar secara normal. Saat ini, Anda dapat mencatat metode yang disembunyikan ini melalui metode addSuppressed. Pengecualian yang disembunyikan akan muncul di informasi tumpukan pengecualian yang dilempar. Keuntungannya adalah tidak ada pengecualian yang hilang, sehingga memudahkan pengembang untuk mengujinya.
Java7 meningkatkan sintaks klausa catch, memungkinkan beberapa pengecualian ditentukan di dalamnya. Setiap jenis pengecualian dipisahkan oleh "|". Perlu dicatat bahwa pengecualian yang ditangkap dalam klausa catch tidak boleh memiliki tipe berulang, dan salah satu pengecualian tidak boleh menjadi subkelas dari parameter pengecualian lain, jika tidak, kesalahan kompilasi akan terjadi (dari huruf kecil ke huruf besar, tidak ada masalah ). Jika beberapa pengecualian dideklarasikan dalam klausa catch, tipe spesifik dari parameter pengecualian adalah batas atas minimum dari semua tipe pengecualian ini.
4.2 Gunakan try (aplikasi sumber daya) {pemrosesan bisnis} untuk melepaskan sumber daya secara otomatis. Sumber daya yang dapat dikelola dengan pernyataan try harus memenuhi satu syarat, yaitu kelas java mereka harus mengimplementasikan antarmuka java.lang.AutoCloseable, jika tidak maka akan terjadi kesalahan kompilasi. akan terjadi. Metode close antarmuka ini akan dipanggil secara otomatis ketika sumber daya perlu dilepaskan.
5. Optimalkan pemanggilan metode dengan parameter panjang variabel:
Fitur baru yang diperkenalkan di j2se5.0 adalah mengizinkan penggunaan parameter panjang variabel dalam deklarasi metode. Parameter formal terakhir dari suatu metode dapat ditentukan untuk mewakili sejumlah parameter bertipe sama. Saat dipanggil, parameter ini diteruskan dalam bentuk array. Parameter ini juga dapat direferensikan sebagai array di badan metode.
6. Java 7 memperkenalkan anotasi baru @SafeVarargs. Jika pengembang yakin bahwa metode yang menggunakan parameter panjang variabel tidak akan menyebabkan situasi serupa saat digunakan dengan kelas generik, metode tersebut dapat dideklarasikan dengan anotasi ini. Anotasi @SafeVarargs hanya dapat digunakan pada metode atau konstruktor dengan panjang parameter variabel, dan metode tersebut harus dinyatakan statis atau final, jika tidak, kesalahan kompilasi akan terjadi. Premis metode yang akan dianotasi dengan @SafeVarargs adalah bahwa pengembang harus memastikan bahwa pemrosesan parameter tipe generik dalam implementasi metode ini tidak menyebabkan masalah keamanan tipe.
7.Java mendukung beberapa bahasa scripting di mesin virtual Java melalui mesin skrip. Faktanya, pengelola mesin skrip mendukung tiga metode mesin pencari, yang dilengkapi dengan nama, ekstensi file, dan jenis MIME. menyukai
7.1 Pengikatan bahasa:
Keuntungan besar dari dukungan bahasa skrip API adalah standarisasi interaksi antara bahasa Java dan bahasa skrip, sehingga program yang ditulis dalam bahasa Java dapat melakukan pemanggilan metode dua arah dan transfer data dengan skrip. Transfer data dilakukan melalui objek pengikatan bahasa. Objek pengikatan bahasa disebut adalah tabel hash sederhana yang digunakan untuk menyimpan dan memperoleh data yang perlu dibagikan. Semua data sesuai dengan entri dalam tabel hash ini dan merupakan pasangan nama-nilai sederhana. Antarmuka javax.script.Bingings mendefinisikan antarmuka objek pengikat bahasa, yang mewarisi antarmuka java.util.Map. Mesin skrip dapat menggunakan objek pengikatan beberapa bahasa selama eksekusi. Bahasa yang berbeda memiliki cakupan yang berbeda untuk mengikat objek. Secara default, mesin skrip akan menyediakan objek pengikatan beberapa bahasa untuk menyimpan objek global yang dihasilkan selama eksekusi. Kelas ScriptEnging menyediakan metode put dan get untuk beroperasi pada objek pengikatan bahasa default yang digunakan secara khusus di mesin skrip. Program dapat langsung menggunakan objek pengikatan bahasa default ini, atau program dapat menggunakan objek pengikatan bahasanya sendiri. Selama eksekusi skrip, objek pengikatan bahasa dapat dianggap sebagai tabel pemetaan variabel tambahan. Nama dalam objek yang mengikat bahasa juga diperhitungkan saat mengurai nilai variabel. Variabel global dan konten lain yang dihasilkan selama eksekusi skrip akan muncul di objek pengikatan bahasa. Dengan cara ini, transfer data dua arah antara Java dan bahasa skrip selesai.
Misalnya, string bernama "nama" ditambahkan ke objek pengikatan bahasa default mesin skrip melalui metode put ScriptEngine, dan kemudian objek tersebut langsung direferensikan berdasarkan nama dalam skrip. Demikian pula, variabel global "pesan" yang dibuat dalam skrip juga dapat diperoleh melalui metode get dari ScriptEnging. Hal ini mencapai transfer data dua arah antara program dan skrip Java. Konversi jenis selama transfer data diselesaikan oleh mesin skrip, dan aturan konversi bergantung pada tata bahasa bahasa tertentu.
Dalam kebanyakan kasus, menggunakan metode put dan get ScriptEnging sudah cukup. Jika hanya metode put dan get yang digunakan, objek pengikatan bahasa itu sendiri transparan bagi pengembang. Dalam beberapa kasus, perlu menggunakan objek pengikatan bahasa milik program. Misalnya, objek pengikatan bahasa berisi data unik milik program. Jika Anda ingin menggunakan objek pengikatan bahasa Anda sendiri, Anda dapat memanggil metode creatBingings mesin skrip atau membuat objek javax.script.SimpleBingings dan meneruskannya ke metode eval mesin skrip, seperti:
Objek pengikatan bahasa yang diteruskan melalui metode eval hanya berlaku pada panggilan eval saat ini dan tidak mengubah objek pengikatan bahasa default mesin.
7.2 Konteks eksekusi skrip Antarmuka penting lainnya yang terkait dengan eksekusi mesin skrip adalah javax.script.ScriptContext, yang berisi informasi konteks yang relevan selama eksekusi mesin skrip. Ini dapat dibandingkan dengan antarmuka javax.servlet.ServletContext dalam spesifikasi servlet di JavaEE . Mesin skrip memperoleh informasi terkait eksekusi skrip dengan mereferensikan objek konteks, dan juga memungkinkan pengembang untuk mengonfigurasi perilaku mesin skrip melalui objek ini. Objek atas dan bawah sebagian besar berisi tiga jenis informasi berikut.
7.2.1 Input dan Output Pertama, informasi konfigurasi yang terkait dengan input dan output skrip diperkenalkan, termasuk objek java.io.Reader yang digunakan oleh skrip untuk membaca input data selama eksekusi dan java.io.Writer yang menghasilkan konten dan output yang benar informasi kesalahan. Secara default, input dan output skrip terjadi di konsol standar. Jika Anda ingin menulis output skrip ke file, Anda dapat menggunakan kode berikut. Redirect output skrip ke file melalui metode setWriter. Melalui metode setReader dan setErrorWriter dari ScriptContext, Anda masing-masing dapat mengatur sumber masukan data saat skrip dijalankan dan tujuan keluaran pesan kesalahan saat terjadi kesalahan.
7.2.2 Properti khusus
ScriptContext juga memiliki metode untuk mendapatkan dan mengatur atribut yang mirip dengan yang ada di ServletContext, yaitu setAttribute dan getAttribute. Bedanya, atribut di ScriptContext memiliki cakupan. Perbedaan antara cakupan yang berbeda adalah urutan pencariannya. Setiap cakupan menggunakan bilangan bulat yang sesuai untuk mewakili urutan pencariannya. Semakin kecil nilai integer maka semakin tinggi prioritas dalam urutan pencarian. Properti dalam cakupan dengan prioritas lebih tinggi akan menyembunyikan properti dengan nama yang sama dalam cakupan dengan prioritas lebih rendah. Oleh karena itu, Anda perlu menentukan cakupan secara eksplisit saat mengatur properti. Saat memperoleh atribut, Anda dapat memilih untuk mencari dalam cakupan tertentu, atau Anda dapat memilih untuk mencari secara otomatis berdasarkan prioritas cakupan.
Namun, cakupan yang disertakan dalam implementasi konteks eksekusi skrip sudah diperbaiki. Pengembang tidak bebas menentukan ruang lingkupnya sendiri. Daftar semua cakupan yang tersedia dapat diperoleh melalui metode getScopes dari ScriptContext. Ada dua cakupan yang telah ditentukan sebelumnya di SciptContext: cakupan yang diwakili oleh konstanta ScriptContext.ENGINE_SCOPE sesuai dengan mesin skrip saat ini, dan cakupan yang diwakili oleh ScriptContext.GLOBAL_SCOPE sesuai dengan semua objek mesin skrip yang dibuat dari pabrik mesin yang sama. Yang pertama mempunyai prioritas lebih tinggi. Misalnya:
7.2.3 Objek yang mengikat bahasa
Jenis informasi terakhir dalam konteks eksekusi skrip adalah objek pengikatan bahasa. Objek yang mengikat bahasa juga sesuai dengan cakupan. Urutan prioritas cakupan yang sama berlaku untuk objek yang terikat bahasa. Urutan prioritas ini akan berdampak pada resolusi variabel selama eksekusi skrip. Misalnya:
bindings.put("nama","Dunia")
engine.eval("println(nama);");
7.3 Penyusunan naskah:
Bahasa skrip umumnya ditafsirkan dan dieksekusi. Mesin skrip perlu mengurai skrip sebelum menjalankannya saat runtime. Secara umum, menjalankan skrip melalui interpretasi akan lebih lambat dibandingkan menjalankannya setelah kompilasi. Ketika sebuah skrip perlu dijalankan beberapa kali, skrip tersebut dapat dikompilasi terlebih dahulu. Skrip yang dikompilasi tidak perlu diurai berulang kali saat dijalankan, sehingga dapat meningkatkan efisiensi eksekusi. Tidak semua mesin skrip mendukung kompilasi skrip. Jika mesin skrip mendukung fitur ini, ia akan mengimplementasikan antarmuka javax.script.Compilable untuk mendeklarasikannya. Pengguna mesin skrip dapat memanfaatkan kemampuan ini untuk meningkatkan efisiensi skrip yang perlu dijalankan berkali-kali. Mesin skrip JavaScript yang disertakan dengan Java SE mendukung kompilasi skrip.
Pada kode berikut, metode kompilasi antarmuka Compilable digunakan untuk mengkompilasi kode skrip, dan hasil kompilasi diwakili oleh javax.script.CompiledScript. Karena tidak semua mesin skrip mendukung antarmuka Compilable, instanceof perlu digunakan untuk penilaian di sini. Dalam metode run, skrip dapat dieksekusi melalui metode eval CompiledScript. Dalam kodenya, skrip dieksekusi berulang kali sebanyak 100 kali untuk menggambarkan keunggulan kinerja skrip yang dikompilasi ketika dijalankan berulang kali.
public void run(String scriptText) melempar ScriptException {
Skrip CompiledScript = kompilasi(scriptText);
jika (skrip == nol) {
kembali;
}
untuk (int saya = 0; saya < 100; saya++) {
skrip.eval();
}
}
7.4 Pemanggilan metode dalam skrip Dalam skrip, yang paling umum dan praktis adalah metode. Beberapa mesin skrip memungkinkan pengguna memanggil metode dalam skrip satu per satu. Mesin skrip yang mendukung pemanggilan metode ini dapat mengimplementasikan antarmuka javax.script.Invocable. Melalui antarmuka Invocable, Anda dapat memanggil metode tingkat atas dalam skrip dan metode anggota dalam objek. Jika metode tingkat atas dalam skrip atau metode anggota dalam objek mengimplementasikan antarmuka di Java, Anda bisa mendapatkan objek implementasi antarmuka Java yang sesuai dalam skrip melalui metode di antarmuka Invocable. Dengan cara ini, antarmuka dapat didefinisikan dalam bahasa Java dan diimplementasikan dalam skrip. Bagian lain dari program yang menggunakan antarmuka tidak mengetahui bahwa antarmuka tersebut diimplementasikan oleh skrip. Seperti antarmuka Compilable, implementasi antarmuka Invocable ScriptEngine juga bersifat opsional.
Kode berikut memanggil metode tingkat atas dalam skrip melalui invokeFunction dari antarmuka Invocable. Parameter selama panggilan akan diteruskan ke metode dalam skrip. Karena mesin skrip JavaScript yang disertakan dengan JavaSE mengimplementasikan antarmuka Invocable, penilaian apakah mesin tersebut mengimplementasikan antarmuka Invocalbe dihilangkan di sini. Contoh pemanggilan metode tingkat atas skrip di Java:
//Contoh pemanggilan metode anggota objek skrip di Java
7.5 Mengimplementasikan antarmuka Java dalam skrip
Di beberapa mesin skrip, antarmuka dapat didefinisikan dalam bahasa Java dan implementasi antarmuka dapat ditulis dalam skrip. Dengan cara ini, bagian lain dari program hanya dapat berinteraksi dengan antarmuka Java dan tidak perlu dipedulikan bagaimana antarmuka diimplementasikan. Dalam kode berikut, Greet adalah antarmuka yang didefinisikan dalam Java, yang berisi metode getGreeting. Implementasikan antarmuka ini dalam skrip. Melalui metode getInterface, Anda bisa mendapatkan objek antarmuka yang diimplementasikan oleh skrip dan memanggil metode di dalamnya.
Karena sintaks bahasa skrip sederhana dan fleksibel, sangat cocok untuk pengguna yang tidak memiliki atau hanya memiliki sedikit latar belakang pemrograman. Pengguna ini dapat menggunakan bahasa skrip untuk menyesuaikan logika bisnis dan antarmuka pengguna program bahasa dapat meningkatkan kemudahan penggunaan program. Keseimbangan yang lebih baik dicapai antara fleksibilitas dan fleksibilitas. Misalnya, bahasa skrip Lua banyak digunakan dalam pengembangan game untuk menyesuaikan perilaku internal dan antarmuka pengguna game.
8. Meskipun API refleksi memberikan fleksibilitas pada program Java, API refleksi juga menimbulkan biaya kinerja tambahan. Karena mekanisme implementasi API refleksi, untuk operasi yang sama, seperti memanggil suatu metode, menggunakan API refleksi untuk mengimplementasikannya secara dinamis akan lebih cepat. daripada langsung mengeksekusinya di sumbernya. Cara penulisan kode mungkin satu hingga dua kali lipat lebih lambat. Dengan peningkatan implementasi mesin virtual Java, kinerja API refleksi telah meningkat pesat. Namun, kesenjangan kinerja ini ada secara obyektif. Oleh karena itu, dalam beberapa aplikasi yang memiliki persyaratan kinerja yang relatif tinggi, API refleksi harus digunakan dengan hati-hati.