.class
Java'da ne anlama geliyor? Örneğin, adlı bir sınıf oluşturduysam Print
. Ne Print.class
dönüyor?
.class
sadece tesadüfen .class
dosya adı uzantısı ile ilgili olan sözdizimini soruyor .
.class
Java'da ne anlama geliyor? Örneğin, adlı bir sınıf oluşturduysam Print
. Ne Print.class
dönüyor?
.class
sadece tesadüfen .class
dosya adı uzantısı ile ilgili olan sözdizimini soruyor .
Yanıtlar:
Bir .class
sınıf adından sonra yazdığınızda , sınıf değişmezine - verilen sınıfla ilgilijava.lang.Class
bilgileri temsil eden nesneye başvurur
.
Örneğin, sınıfınız ise Print
, çalışma zamanında Print.class
sınıfı temsil eden bir nesnedir Print
. getClass()
Herhangi bir (doğrudan) örneğinin yöntemi tarafından döndürülen nesnenin aynısıdır Print
.
Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
Writer.class.getDeclaredField("writeBuffer")
.
Print.class
nedir?
new Intent(this, Activity.class
? class Activity
Her sınıfı karşılaştırarak bulmaya çalışacak mı?
.class
sınıfın bir örneği olmadığında kullanılır.
.getClass()
sınıfın bir örneği mevcut olduğunda kullanılır.
object.getClass()
verilen nesnenin sınıfını döndürür.
Örneğin:
String string = "hello";
System.out.println(string.getClass().toString());
Bu çıktı:
class java.lang.String
Bu, dize nesnesinin sınıfıdır :)
getClass()
yalnızca sınıfın bir nesnesine işaret eden bir referansınız varsa kullanışlıdır. ClassName.class
sınıfın örneği olmasa bile kullanılabilir. Örneğin, düşünün Math.class
. Her biri belirli durumlar için doğrudur.
.class
ve.getClass().
Bir nesnenin bir örneği mevcutsa, sınıfını almanın en basit yolu çağırmaktır. Object.getClass()
.class
Sözdizimi
Tür mevcutsa ancak örnek yoksa, türün .class
adına ekleyerek bir Sınıf elde etmek mümkündür . Bu aynı zamanda, ilkel bir tür için Sınıfı edinmenin en kolay yoludur.
boolean b;
Class c = b.getClass(); // compile-time error
Class c = boolean.class; // correct
Sadece açıklığa kavuşturmak için, bu '.class' yöntemi java kodunu derledikten sonra gördüğünüz bayt kodu dosyasına veya OOP teorisindeki Sınıf ve Nesne kavramları arasında bir karışıklığa atıfta bulunmuyor.
Bu '.class' yöntemi Java'da kod Yansıması için kullanılır. Genel olarak, sınıfınız için tam nitelikli sınıf adı, sabitler listesi, genel alanların listesi vb. Gibi meta verileri toplayabilirsiniz.
Tüm ayrıntıları almak için bu bağlantıları (yukarıda belirtilen) kontrol
edin : https://docs.oracle.com/javase/tutorial/reflect/class/classNew.html
https://docs.oracle.com/javase/8/docs /api/java/lang/Class.html
Normalde, projenizi oluşturmaya başladığınızda hemen Reflection'ı kullanmayı planlamazsınız. Zaten çalışan kodu yönetmeye çalıştıktan sonra ihtiyacınız olduğunu bildiğiniz bir şey. Çoğu zaman programınızın birden çok örneğini yönetmek için buna ihtiyacınız vardır. Belki bir şeyin önceden tanımlanıp tanımlanmadığını belirlemek için her bir 'klonu' tanımlamak veya işlevlerin sayısını saymak veya sadece sınıfınızın belirli bir örneğinin ayrıntılarını günlüğe kaydetmek istersiniz.
Kullanılabilir bir örnek yoksa, .class
sözdizimi bir sınıfa karşılık gelen Class nesnesini almak için kullanılır, aksi takdirde Class nesnesini almak için getClass () yöntemini kullanabilirsiniz. İlkel veri türü örneği olmadığından, .class
ilkel veri türleri için sözdizimi kullanmalıyız .
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());
}
}
Bence buradaki anahtar, Sınıf ve Nesne arasındaki farkı anlamaktır. Bir Nesne, bir Sınıfın bir örneğidir. Ancak tamamen nesne yönelimli bir dilde, Sınıf aynı zamanda bir Nesnedir . Böylece çağırma .class
, bu Sınıfın Class nesnesine başvuruyu alır ve bu daha sonra değiştirilebilir.
in a fully object-oriented language, a Class is also an Object
? <alıntı gerekli>
Bir sınıf değişmezi, bir sınıfın, arabirimin, dizinin veya ilkel türün adından veya sözde türdeki boşluktan ve ardından bir '' ifadesinden oluşan bir ifadedir. ve belirteç sınıfı. JDK 5.0'daki değişikliklerden biri, java.lang.Class sınıfının genel olmasıdır java.lang.Class Class<T>
, bu nedenle:
Class<Print> p = Print.class;
Referanslar burada:
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