Sample code with comments:
/* ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ°ΠΊΠ΅Ρ java.lang.ref ΠΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±ΡΠΊΠ½ΠΎΠ²Π΅Π½Π½ΡΡ
ΡΡΡΠ»ΠΎΠΊ, ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ
ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Strong References (ΡΠΈΠ»ΡΠ½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ), Π² Java ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ java.lang.ref, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Soft (ΠΌΡΠ³ΠΊΠΈΡ
), Week (ΡΠ»Π°Π±ΡΡ
) ΠΈ Phantom (ΡΠ°Π½ΡΠΎΠΌΠ½ΡΡ
) ΡΡΡΠ»ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ. */ package regObjClass; import java.lang.ref.PhantomReference; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; /** * * @author vvm */ public class RefObjClassString { public static void main(String[] args) throws ClassNotFoundException { Class c = Class.forName("java.lang.String"); //Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° //ΠΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΠΈΠΏ ΡΠΎ Class strClass = String.class; /* ΠΌΡΠ³ΠΊΠΈΠ΅ ΠΈ ΡΠ°Π½ΡΠΎΠΌΠ½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ*/ /* ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΡΠ³ΠΊΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ */ SoftReference<String> softRefStr = new SoftReference<String>(new String("SoftRef")); ReferenceQueue<String> queue = new ReferenceQueue<String>(); //ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ /*ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°Π½ΡΠΎΠΌΠ½ΠΎΠΉ ΡΡΡΠ»ΠΊΠΈ*/ PhantomReference<String> ref = new PhantomReference<String>(new String("Π€Π°Π½ΡΠΎΠΌ"), queue); } }
new String.getClass()does not even compile. Maybe there still was anew String().getClass()? - Regent