1. ภาพสะท้อนคืออะไร?
คลาสมีหลายองค์ประกอบเช่นตัวแปรสมาชิกวิธีการสร้าง ฯลฯ
การสะท้อนคือการโหลดคลาสและแยกส่วนประกอบต่าง ๆ ของชั้นเรียน
2. กำลังโหลดคลาส
มีคลาสคลาสใน Java ที่แสดงถึง bytecode ของคลาสที่แน่นอน
เนื่องจากคลาสคลาสแสดงถึงรหัสของคลาสที่แน่นอนจึงต้องให้การโหลดของคลาสที่แน่นอน
วิธีการของ Bytecode: forname ()
ลงในหน่วยความจำและห่อหุ้มโดยใช้วัตถุคลาส
อีกสองวิธีในการรับวัตถุในชั้นเรียน:
ชื่อคลาส
Object.getClass ()
สร้างคลาสบุคคลที่เรียบง่ายก่อน
การคัดลอกรหัสมีดังนี้:
ชั้นเรียนสาธารณะ recheldemo {
โมฆะคงที่สาธารณะหลัก (String args []) โยนข้อยกเว้น
{// 1
class clazz = class.forname ("dsa.person");
// 2.
Class Clazz1 = คนใหม่ (). getClass ();
// 3.
classclazz2 = person.class;
-
-
3. วิธีการก่อสร้างสะท้อน
ในชั้นเรียนบุคคล:
การคัดลอกรหัสมีดังนี้:
-
*วิธีการก่อสร้าง
-
publicperson () {
System.out.println ("null");
-
PublicPerson (StringName) {
System.out.println (ชื่อ);
-
PublicPerson (StringName, intpwd) {
System.out.println (ชื่อ+"+"+pwd);
-
PrivatePerson (ListList) {
System.out.println ("รายการ");
-
ในคลาสทดสอบ:
การคัดลอกรหัสมีดังนี้:
// Reflection Publicperson ()
@ทดสอบ
PublicVoidTest1 () ThrowSexception {
classclazz = class.forname ("rflectordemo.person");
constructorcr = clazz.getConstructor (null); // รับวัตถุตัวสร้าง
personp = (บุคคล) cr.newinstance (null); // อินสแตนซ์วัตถุผ่านตัวสร้าง
//system.out.println(p.name);
-
// Reflection PublicPerson (StringName)
@ทดสอบ
PublicVoidTest2 () ThrowSexception {
classclazz = class.forname ("rflectordemo.person");
constructorcr = clazz.getConstructor (string.class);
personp = (บุคคล) cr.newinstance ("ฮ่าฮ่า");
System.out.println (P.Name);
-
// Reflection PublicPerson (StringName, Intpwd)
@ทดสอบ
PublicVoidTest3 () ThrowSexception {
classclazz = class.forname ("rflectordemo.person");
constructorcr = clazz.getConstructor (string.class, int.class);
personp = (บุคคล) cr.newinstance ("ฮ่าฮ่า", 1);
//system.out.println(p.name);
-
// Reflection Publicperson (ListList)
@ทดสอบ
PublicVoidTest4 () ThrowSexception {
classclazz = class.forname ("rflectordemo.person");
constructorcr = clazz.getDeclaredConstructor (list.class);
cr.setaccessible (true); // Brute Force Cracking
personp = (บุคคล) cr.newinstance (Newarraylist ());
System.out.println (P.Name);
-
// วิธีอื่นในการสร้างวัตถุนั้นใช้ได้เฉพาะกับการสร้างวิธีการโดยไม่ต้องพารามิเตอร์
@ทดสอบ
PublicVoidTest5 () ThrowSexception {
classclazz = class.forname ("rflectordemo.person");
personp = (บุคคล) clazz.newinstance ();
System.out.println (P.Name);
-
เมื่อวิธีการก่อสร้างเป็นส่วนตัวเราจะแตกกำลังเดรัจฉาน! - -
4. วิธีการสะท้อนแสงทั่วไป
ในชั้นเรียนบุคคล:
การคัดลอกรหัสมีดังนี้:
-
*วิธี
-
publicvoidjf ()
-
-
publicvoidjf (StringName, Intpwd)
-
-
Publicclass [] JF (StringName, int [] PWD)
-
returnNewClass [] {string.class, int.class};
-
privatevoidjf (inputstreamin)
-
System.out.println (in);
-
PublicStaticVoidjf (intnum)
-
System.out.println (NUM);
-
PublicStaticVoidMain (StringArgs [])
-
System.out.println ("Main !!!");
-
ในคลาสทดสอบ:
การคัดลอกรหัสมีดังนี้:
-
*วิธีการสะท้อนแสง
-
*@authortanlvxu
-
-
publicclassDemo2 {
// วิธีการสะท้อนแสง: publicvoidjf ()
@ทดสอบ
PublicVoidTest1 () ThrowSexception {
personp = newPerson ();
classclazz = class.forname ("rflectordemo.person");
MethodMethod = clazz.getMethod ("jf", null);
method.invoke (p, null);
-
// วิธีการสะท้อนแสง: publicvoidjf (stringname, intpwd)
@ทดสอบ
PublicVoidTest2 () ThrowSexception {
personp = newPerson ();
classclazz = class.forname ("rflectordemo.person");
MethodMethod = clazz.getMethod ("jf", string.class, int.class);
Method.invoke (P, "DSA", 30);
-
// วิธีการสะท้อนแสง: publicclass [] jf (stringname, int [] pwd)
@ทดสอบ
PublicVoidTest3 () ThrowSexception {
personp = newPerson ();
classclazz = class.forname ("rflectordemo.person");
MethodMethod = clazz.getMethod ("jf", string.class, int []. class);
classcs [] = (class []) method.invoke (p, "aads", newint [] {1,2,3});
System.out.println (CS [0]);
-
// วิธีการสะท้อนแสง: privatevoidjf (inputstreamin)
@ทดสอบ
PublicVoidTest4 () ThrowSexception {
personp = newPerson ();
classclazz = class.forname ("rflectordemo.person");
MethodMethod = clazz.getDeclaredMethod ("JF", inputStream.class);
method.setAccessible (จริง);
method.invoke (p, newfileinputstream ("d: //qqclient.txt"));
-
// วิธีการสะท้อนแสง: publicstaticvoidjf (intnum)
@ทดสอบ
PublicVoidTest5 () ThrowSexception {
classclazz = class.forname ("rflectordemo.person");
MethodMethod = clazz.getMethod ("JF", int.class);
Method.invoke (Null, 30);
-
// วิธีการสะท้อนแสง: PublicStaticVoidM (intnum)
@ทดสอบ
PublicVoidTest6 () ThrowSexception {
classclazz = class.forname ("rflectordemo.person");
MethodMethod = clazz.getMethod ("หลัก", สตริง []. คลาส);
//method.invoke(null,(Object)NewString ’INTENY {"DS","DAS "});
method.invoke (null, newobject [] {newstring [] {"ds", "das"}});
-
5. สนามสะท้อนแสง
ในชั้นเรียนบุคคล:
การคัดลอกรหัสมีดังนี้:
-
*สนาม
-
PublicStringName = "SWR";
PrivateIntPassword = 45;
PrivatestaticIntage = 35;
ในคลาสทดสอบ:
รหัส Java
-
*ฟิลด์คลาสไตร่ตรอง
*@authortanlvxu
-
-
publicclassdemo3 {
-
*Field Field PublicStringName = "SWR";
*@ThrowSexception
-
@ทดสอบ
PublicVoidTest1 () Throwsexception
-
personp = newPerson ();
classclazz = class.forname ("rflectordemo.person");
fieldf = clazz.getfield ("ชื่อ");
// รับค่าของฟิลด์
ObjectValue = f.get (p);
// รับประเภทฟิลด์
classtype = f.getType ();
if (type.equals (string.class)) {
stringName = (สตริง) f.get (p);
System.out.println (ชื่อ);
-
// ตั้งค่าของฟิลด์
f.set (p, "dfafa");
System.out.println (P.Name);
-
-
*Field Field PrivateIntPassword;
*@ThrowSexception
-
@ทดสอบ
PublicVoidTest2 () Throwsexception
-
personp = newPerson ();
classclazz = class.forname ("rflectordemo.person");
fieldf = clazz.getDeclaredField ("รหัสผ่าน");
f.setAccessible (จริง);
f.set (p, 36);
System.out.println (f.get (p));
-
-
*Field Field PrivatestaticIntage = 35;
*@ThrowSexception
-
@ทดสอบ
PublicVoidTest3 () Throwsexception
-
classclazz = class.forname ("rflectordemo.person");
Fieldf = clazz.getDeclaredField ("อายุ");
f.setAccessible (จริง);
f.set (null, 24);
System.out.println (f.get (null));
-
ในความเป็นจริงไม่ว่าวิธีการก่อสร้างสะท้อนหรือทุ่งนาเราสามารถเรียนรู้จากมันทีละคน!