Apa .class
artinya di Jawa? Misalnya, jika saya membuat kelas bernama Print
. Apa yang Print.class
kembali?
.class
sintaks yang hanya terkait dengan .class
ekstensi nama file.
Apa .class
artinya di Jawa? Misalnya, jika saya membuat kelas bernama Print
. Apa yang Print.class
kembali?
.class
sintaks yang hanya terkait dengan .class
ekstensi nama file.
Jawaban:
Ketika Anda menulis .class
setelah nama kelas, itu referensi kelas literal -
java.lang.Class
objek yang mewakili informasi tentang kelas yang diberikan.
Misalnya, jika kelas Anda Print
, maka Print.class
adalah objek yang mewakili kelas Print
saat runtime. Ini adalah objek yang sama yang dikembalikan oleh getClass()
metode setiap instance (langsung) dari Print
.
Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
Writer.class.getDeclaredField("writeBuffer")
.
Print.class
?
new Intent(this, Activity.class
? Apakah akan mencoba mencari tahu class Activity
dengan membandingkan setiap kelas?
.class
digunakan ketika tidak ada instance kelas yang tersedia.
.getClass()
digunakan ketika ada instance kelas yang tersedia.
object.getClass()
mengembalikan kelas dari objek yang diberikan.
Sebagai contoh:
String string = "hello";
System.out.println(string.getClass().toString());
Ini akan menampilkan:
class java.lang.String
Ini adalah kelas dari objek string :)
getClass()
hanya berguna jika Anda memiliki referensi yang menunjuk ke objek kelas. ClassName.class
dapat digunakan bahkan jika kelas tidak memiliki instance. Sebagai contoh, pertimbangkan Math.class
. Masing-masing tepat untuk situasi tertentu.
.class
dan.getClass().
Jika instance objek tersedia, maka cara paling sederhana untuk mendapatkan Kelasnya adalah dengan memanggil Object.getClass()
The .class
Sintaks
Jika tipe tersedia tetapi tidak ada instance maka dimungkinkan untuk mendapatkan Kelas dengan menambahkan .class
nama tipe tersebut. Ini juga cara termudah untuk mendapatkan Kelas untuk tipe primitif.
boolean b;
Class c = b.getClass(); // compile-time error
Class c = boolean.class; // correct
Hanya untuk memperjelas, metode '.class' ini tidak mengacu pada file bytecode yang Anda lihat setelah kompilasi kode java atau kebingungan antara konsep Class vs. Object dalam teori OOP.
Metode '.class' ini digunakan di Java untuk refleksi kode. Secara umum Anda dapat mengumpulkan data meta untuk kelas Anda seperti nama kelas yang memenuhi syarat, daftar konstanta, daftar bidang publik, dll, dll.
Periksa tautan ini (telah disebutkan di atas) untuk mendapatkan semua detail:
https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.oracle.com/javase/8/docs /api/java/lang/Class.html
Biasanya Anda tidak berencana menggunakan Refleksi segera ketika Anda mulai membangun proyek Anda. Ini adalah sesuatu yang Anda tahu Anda butuhkan setelah mencoba mengelola kode yang sudah berfungsi. Sering kali Anda membutuhkannya untuk mengelola beberapa instance program Anda. Mungkin Anda ingin mengidentifikasi setiap 'klon' tertentu untuk menentukan apakah ada sesuatu yang sudah ditentukan, atau menghitung jumlah fungsi, atau hanya cukup mencatat rincian dari instance tertentu dari kelas Anda.
Jika tidak ada instance yang tersedia maka .class
sintaks digunakan untuk mendapatkan objek Class yang sesuai untuk sebuah kelas, jika tidak, Anda dapat menggunakan metode getClass () untuk mendapatkan objek Class. Karena, tidak ada contoh tipe data primitif, kita harus menggunakan .class
sintaks untuk tipe data primitif.
package test;
public class Test {
public static void main(String[] args)
{
//there is no instance available for class Test, so use Test.class
System.out.println("Test.class.getName() ::: " + Test.class.getName());
// Now create an instance of class Test use getClass()
Test testObj = new Test();
System.out.println("testObj.getClass().getName() ::: " + testObj.getClass().getName());
//For primitive type
System.out.println("boolean.class.getName() ::: " + boolean.class.getName());
System.out.println("int.class.getName() ::: " + int.class.getName());
System.out.println("char.class.getName() ::: " + char.class.getName());
System.out.println("long.class.getName() ::: " + long.class.getName());
}
}
Saya pikir kuncinya di sini adalah memahami perbedaan antara Kelas dan Obyek. Obyek adalah turunan dari Kelas. Tetapi dalam bahasa yang sepenuhnya berorientasi objek, Kelas juga merupakan Obyek . Jadi panggilan .class
mendapat referensi ke objek Kelas dari Kelas itu, yang kemudian dapat dimanipulasi.
in a fully object-oriented language, a Class is also an Object
? <rujukan?>
Literal kelas adalah ekspresi yang terdiri dari nama kelas, antarmuka, array, atau tipe primitif, atau kekosongan tipe pseudo, diikuti oleh '.' dan kelas token. Salah satu perubahan di JDK 5.0 adalah bahwa kelas java.lang.Class adalah generik java.lang.Class Class<T>
, oleh karena itu:
Class<Print> p = Print.class;
Referensi di sini:
https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
http://docs.oracle.com/javase/tutorial/extra/generics/literals.html
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.2