Despre API-ul Reflect într-un limbaj accesibil. Explorarea constructorilor de clasă. Vizualizați o listă de fișiere din directoare

Manual de utilizare Macrium Reflect

Introducere.

Macrium Reflect - program gratuit pentru a crea imagini ale hard disk-urilor și partițiilor. Programul vă permite atât să creați, cât și să restaurați partițiile, este disponibilă și opțiunea de a vizualiza backup-urile create și de a le edita. Datorită unui algoritm precis de creare a imaginii, Macrium Reflect creează o copie de rezervă a aproape oricărei partiții în câteva minute, comprimând datele de mai multe ori. Deci, unitatea C:/, cu o dimensiune de 30 de gigaocteți, cu 11 gigaocteți de spațiu ocupat, a fost comprimată într-o imagine de 3,88 gigaocteți.

Aplicație.

Unul dintre principalele motive pentru a utiliza Macrium Reflect este economisirea timpului. Pentru claritate, voi da un exemplu simplu. După instalarea sistemului de operare utilizator Windowsîncepe să-l umple treptat cu software, în timp, o selecție software pe un computer se rezumă la utilizarea acelorași programe. Pentru munca de birou LibreOffice este folosit pentru a asculta muzică Winyl, sau WinAmp, același Aimp este demn de atenție, pentru a viziona videoclipuri - VLC. Pentru a efectua sarcini foarte specializate - alt software.

Deci, acum să ne imaginăm că la un moment bun este pur și simplu necesar să reinstalați sistemul, există o mulțime de motive pentru care va funcționa intermitent - fie că este vorba de efectul virușilor, de o defecțiune hardware sau pur și simplu „a venit momentul”. Se reinstalând Windows nu implică nimic supărător, partea principală a muncii constă în instalarea software-ului necesar, iar acest lucru poate să nu dureze o singură zi. Care este calea de ieșire din această situație? Așa este, folosind programe care pot crea o copie a partiției hard disk. Este programul Macrium Reflect care ne poate satisface nevoia și este, de asemenea, gratuit.

Instrucțiuni pas cu pas.

Și așadar, în primul rând, pentru ca lucrul cu programul să fie plăcut, ar trebui să muncești din greu. Pentru a face acest lucru, merită să luați timp și să reinstalați sistemul de la zero. Adică, formatați partiția pe care intenționați să plasați sistemul de operare, instalați-o, apoi instalați toate driverele și setul de programe care sunt vitale pentru Munca zilnica. Dacă în acest moment sistemul de operare funcționează ca un farmec, sfatul anterior poate fi omis, decideți singur.

Și așa, sistemul de operare este instalat, driverele sunt la locul lor, programele sunt acolo :). Instalăm Macrium Reflect, instalarea programului în sine nu este diferită de procedura standard instalarea programelor, sper că nu va crea dificultăți.

După lansare, ni se prezintă fereastra principală a programului, în ciuda lipsei limbii ruse, lucrul cu programul este intuitiv și nu ar trebui să provoace probleme:



Pentru a începe să creați o imagine, apelați „Asistentul de creare a imaginii”:

Iată cum arată salutul de la „Maestrul Creației de Imagini”:



În următoarea etapă, este necesar să indicăm imaginea despre ce anume partiție intenționăm să creăm, deoarece sistemul de operare este de obicei instalat pe unitatea C, apoi o selectăm:



Următorul pas ne va cere să indicam locația de stocare pentru imaginea partiției în sine:



Următoarele elemente sunt disponibile pentru funcționare:

  • Disc local - o partiție de hard disk (diferită de cea pentru care creăm o imagine), aceasta poate fi unitatea D:
  • Resursa de rețea - dacă aveți acces la unități de rețea, foldere, imaginea poate fi salvată acolo.
  • Disc CD/DVD - dacă aveți o unitate de inscripționare, imaginea poate fi scrisă direct pe disc.

Apropo, recomand să salvați imaginea, inițial, pe o altă partiție disc local, această opțiune implică un procent mai mic de erori în timpul creării imaginii. Apoi poate fi copiat pe câte unități flash, cd-r-uri și alte medii de stocare, pentru a preveni pierderea imaginii.

În partea de jos a ferestrei curente puteți specifica numele viitoarei imagini, dacă acest lucru nu se face, Macrium Reflect va scrie automat numele imaginii; Apropo. Această opțiune este recomandată de dezvoltatorii înșiși.

Fereastra finală a expertului ne permite să specificăm nivelul de compresie al viitoarei imagini (buton Adnavced), dar setările implicite funcționează bine și pur și simplu nu are rost să schimbăm nimic.



Faceți clic pe Finish, OK în fereastra care apare și mergeți să luați o cafea. Crearea imaginii poate dura de la 5 la 10 minute, totul depinde de dimensiunea partiției a cărei imagine o creăm.



La finalizare Rezervă copie Programul va afișa următoarele informații:



Totul este gata, imaginea a fost creată cu succes.

Acum, dacă sistemul începe să funcționeze și pur și simplu trebuie să fie reinstalat, nu este nevoie să petreceți o jumătate de zi la computer, trebuie doar să restaurați imaginea pe care am creat-o înapoi pe unitatea C:/ și să continuați să lucrați.

Recuperare.

Creați un disc de pornire.

Pentru a începe crearea disc de pornire lansează vrăjitorul:


Fereastra principală a vrăjitorului ne oferă două opțiuni pentru crearea unui disc de boot, bazat pe Linux OS sau Bart PE.



Mai mult, crearea unei imagini bazate pe BartPe nu este disponibilă sub Windows Vista/7. Crearea unui disc de boot se poate face direct pe un cd-r sau într-un fișier iso. A doua opțiune este de preferat, deoarece în viitor imaginea poate fi copiată pe o unitate flash și pornită de pe aceasta. Acest lucru se poate face cu programul.

Mai jos sunt capturi de ecran care arată clar procesul de despachetare a imaginii pe o partiție de hard disk. Nu este nimic special aici, așa că după ce ați vizualizat cu atenție capturile de ecran, sper că veți înțelege ce este.

Principalul punct este: selectați fișierul nostru imagine -> indicați ce partiție vom restaura -> indicați în ce partiție îl vom despacheta -> și mergeți mai departe :) ...





















Dacă ceva nu este clar, rog pe toată lumea să comenteze articolul, dar, mai bine, într-un thread de forum -

Vizualizari: 54963

Motor de căutare sistem Google(www.google.com) oferă multe opțiuni de căutare. Toate aceste caracteristici sunt un instrument de căutare neprețuit pentru un utilizator nou pe Internet și, în același timp, o armă și mai puternică de invazie și distrugere în mâinile oamenilor cu intenții rele, inclusiv nu numai hackeri, ci și criminali care nu sunt informatici și chiar și teroriști.
(9475 vizualizări într-o săptămână)

Denis Barankov
denisNOSPAMixi.ru

Atenţie:Acest articol nu este un ghid de acțiune. Acest articol a fost scris pentru voi, administratori de server WEB, astfel încât să vă pierdeți sentimentul fals că sunteți în siguranță și să înțelegeți în sfârșit insidiosul acestei metode de obținere a informațiilor și să vă preluați sarcina de a vă proteja site-ul.

Introducere

De exemplu, am găsit 1670 de pagini în 0,14 secunde!

2. Să introducem o altă linie, de exemplu:

inurl:"auth_user_file.txt"

puțin mai puțin, dar acest lucru este deja suficient pentru descărcarea gratuită și pentru ghicirea parolei (folosind același John The Ripper). Mai jos voi da mai multe exemple.

Deci, trebuie să vă dați seama că motorul de căutare Google a vizitat majoritatea site-urilor de internet și a stocat în cache informațiile conținute în ele. Aceste informații stocate în cache vă permit să obțineți informații despre site și conținutul site-ului fără conexiune directa site-ului, aprofundând doar în informațiile care sunt stocate în interiorul Google. Mai mult, dacă informațiile de pe site nu mai sunt disponibile, atunci informațiile din cache pot fi în continuare păstrate. Tot ce ai nevoie pentru această metodă: știi câteva Cuvinte cheie Google. Această tehnică se numește Google Hacking.

Informațiile despre Google Hacking au apărut pentru prima dată pe lista de corespondență Bugtruck acum 3 ani. În 2001, acest subiect a fost abordat de un student francez. Iată un link către această scrisoare http://www.cotse.com/mailing-lists/bugtraq/2001/Nov/0129.html. Acesta oferă primele exemple de astfel de interogări:

1) Index de /admin
2) Index de /parolă
3) Index de /mail
4) Index de / +banques +filetype:xls (pentru Franța...)
5) Index de / +passwd
6) Index de / parola.txt

Acest subiect a făcut furori în partea de citit în engleză a internetului destul de recent: după articolul lui Johnny Long, publicat pe 7 mai 2004. Pentru un studiu mai complet al Google Hacking, vă sfătuiesc să accesați site-ul web al acestui autor http://johnny.ihackstuff.com. În acest articol vreau doar să vă aduc la curent.

Cine poate folosi asta:
- Jurnaliştii, spionii şi toţi acei oameni cărora le place să bage nasul în afacerile altora pot folosi acest lucru pentru a căuta dovezi incriminatoare.
- Hackerii care caută ținte potrivite pentru hacking.

Cum funcționează Google.

Pentru a continua conversația, permiteți-mi să vă reamintesc câteva dintre cuvintele cheie folosite în interogările Google.

Căutați folosind semnul +

Google exclude cuvintele pe care le consideră neimportante din căutări. De exemplu, cuvinte de întrebare, prepoziții și articole în Limba engleză: de exemplu sunt, din, unde. In rusa Limba Google pare să considere toate cuvintele importante. Dacă un cuvânt este exclus din căutare, Google scrie despre el. La Google a început pentru a căuta pagini cu aceste cuvinte, trebuie să adăugați un semn + fără spațiu înaintea cuvântului. De exemplu:

as +de bază

Căutați folosind semnul -

Dacă Google găsește un număr mare de pagini din care trebuie să excludă pagini cu un anumit subiect, atunci puteți forța Google să caute numai pagini care nu conțin anumite cuvinte. Pentru a face acest lucru, trebuie să indicați aceste cuvinte punând un semn în fața fiecăruia - fără spațiu înaintea cuvântului. De exemplu:

pescuit - vodca

Căutați folosind ~

Poate doriți să căutați nu numai cuvântul specificat, ci și sinonimele acestuia. Pentru a face acest lucru, precedați cuvântul cu simbolul ~.

Găsirea unei expresii exacte folosind ghilimele duble

Google caută pe fiecare pagină toate aparițiile cuvintelor pe care le-ați scris în șirul de interogare și nu îi pasă de poziția relativă a cuvintelor, atâta timp cât toate cuvintele specificate sunt pe pagină în același timp (acesta este acțiunea implicită). Pentru a găsi expresia exactă, trebuie să o puneți între ghilimele. De exemplu:

"spre carte"

Pentru ca cel puțin unul dintre cuvintele specificate să apară, trebuie să specificați operatie logica explicit: SAU. De exemplu:

carte de siguranță SAU protecție

În plus, puteți folosi semnul * din bara de căutare pentru a indica orice cuvânt și. a reprezenta orice personaj.

Găsirea cuvintelor folosind operatori suplimentari

Exista operatori de căutare, care sunt indicate în șirul de căutare în formatul:

operator:termen_căutare

Nu sunt necesare spații de lângă două puncte. Dacă introduceți un spațiu după două puncte, veți vedea un mesaj de eroare, iar înaintea acestuia, Google le va folosi ca șir obișnuit Pentru căutare.
Există grupuri de operatori de căutare suplimentari: limbi - indicați în ce limbă doriți să vedeți rezultatul, data - limitați rezultatele din ultimele trei, șase sau 12 luni, apariții - indicați unde în document trebuie să căutați linia: peste tot, în titlu, în URL, domenii - căutați pe site-ul specificat sau, dimpotrivă, excludeți-l din căutare, Căutare în condiții de siguranță- blocați site-urile care conțin tipul specificat de informații și eliminați-le din paginile cu rezultatele căutării.
Cu toate acestea, unii operatori nu necesită un parametru suplimentar, de exemplu cererea " cache:www.google.com" poate fi numită ca șir de căutare cu drepturi depline, iar unele cuvinte cheie, dimpotrivă, necesită un cuvânt de căutare, de exemplu " site:www.google.com ajutor„. În lumina subiectului nostru, să ne uităm la următorii operatori:

Operator

Descriere

Necesită parametru suplimentar?

căutați numai pe site-ul specificat în search_term

căutați numai în documente cu tipul search_term

găsiți pagini care conțin search_term în titlu

găsiți pagini care conțin toate cuvintele search_term din titlu

găsiți pagini care conțin cuvântul search_term în adresa lor

găsiți pagini care conțin toate cuvintele search_term în adresa lor

Operator site: limitează căutarea numai la site-ul specificat și nu puteți specifica numai Numele domeniului, dar și o adresă IP. De exemplu, introduceți:

Operator tip fișier: limitează căutarea în fișiere anumit tip. De exemplu:

De la data publicării articolului, Google poate căuta în termen de 13 diverse formate fisiere:

  • Format de document portabil Adobe (pdf)
  • Adobe PostScript (ps)
  • Lotus 1-2-3 (săptămâna 1, săptămâna2, săptămâna3, săptămâna4, săptămâna5, săptămînă, săptămînă, wku)
  • Lotus WordPro (lwp)
  • MacWrite (mw)
  • Microsoft Excel(xls)
  • Microsoft PowerPoint (ppt)
  • Microsoft Word(doc)
  • Microsoft Works (wks, wps, wdb)
  • Microsoft Write (scriere)
  • Format text îmbogățit (rtf)
  • Shockwave Flash(swf)
  • Text (ans, txt)

Operator legătură: afișează toate paginile care indică pagina specificată.
Probabil că este întotdeauna interesant să vezi câte locuri de pe Internet știu despre tine. Sa incercam:

Operator cache: arată versiunea site-ului în Google cache cum arăta ea când Cel mai recent Google a vizitat această pagină o dată. Să luăm orice site care se schimbă frecvent și să vedem:

Operator intitulat: caută cuvântul specificat în titlul paginii. Operator allintitle: este o extensie - caută toate cuvintele specificate în titlul paginii. Comparaţie:

intitle:zbor spre Marte
intitle:zbor intitle:pe intitle:marte
allintitle:zbor pe Marte

Operator inurl: obligă Google să afișeze toate paginile care conțin adresa URL linia specificată. operator allinurl: caută toate cuvintele dintr-o adresă URL. De exemplu:

allinurl:acid acid_stat_alerts.php

Această comandă este utilă în special pentru cei care nu au SNORT - cel puțin pot vedea cum funcționează pe un sistem real.

Metode de hacking folosind Google

Așadar, am aflat că folosind o combinație a operatorilor și cuvintelor cheie de mai sus, oricine poate începe să colecteze informatie necesarași căutarea vulnerabilităților. Aceste tehnici sunt adesea numite Google Hacking.

Harta site-ului

Puteți folosi operatorul site: pentru a lista toate linkurile pe care Google le-a găsit pe un site. De obicei, paginile care sunt create dinamic de scripturi nu sunt indexate folosind parametri, așa că unele site-uri folosesc filtre ISAPI, astfel încât linkurile să nu fie în formă /article.asp?num=10&dst=5, și cu bare oblice /article/abc/num/10/dst/5. Acest lucru se face astfel încât site-ul să fie în general indexat de motoarele de căutare.

Sa incercam:

site: www.whitehouse.gov whitehouse

Google crede că fiecare pagină de pe un site web conține cuvântul whitehouse. Acesta este ceea ce folosim pentru a obține toate paginile.
Există și o versiune simplificată:

site:whitehouse.gov

Și cea mai bună parte este că camarazii de la whitehouse.gov nici măcar nu știau că ne-am uitat la structura site-ului lor și chiar ne-am uitat la paginile din cache pe care Google le-a descărcat. Aceasta poate fi folosită pentru a studia structura site-urilor și a vizualiza conținutul, rămânând nedetectat pentru moment.

Vizualizați o listă de fișiere din directoare

Serverele WEB pot afișa liste de directoare de server în loc de pagini HTML obișnuite. Acest lucru se face de obicei pentru a încuraja utilizatorii să selecteze și să descarce anumite fișiere. Cu toate acestea, în multe cazuri, administratorii nu au intenția de a afișa conținutul unui director. Acest lucru apare din cauza configurație incorectă server sau lipsă pagina principalaîn director. Drept urmare, hackerul are șansa de a găsi ceva interesant în director și de a-l folosi în propriile scopuri. Pentru a găsi toate astfel de pagini, este suficient să rețineți că toate conțin cuvintele: index of. Dar, deoarece indexul cuvintelor din conține nu numai astfel de pagini, trebuie să rafinăm interogarea și să luăm în considerare cuvintele cheie din pagina în sine, deci interogări precum:

intitle:index.of directorul părinte
intitle:index.de dimensiunea numelui

Deoarece majoritatea listelor de directoare sunt intenționate, este posibil să aveți dificultăți să găsiți înregistrări neplasate prima dată. Dar mai departe macar, puteți utiliza deja înregistrări pentru a determina versiuni WEB server așa cum este descris mai jos.

Obținerea versiunii de server WEB.

Cunoașterea versiunii serverului WEB este întotdeauna utilă înainte de a lansa orice atac de hacker. Din nou, datorită Google, puteți obține aceste informații fără a vă conecta la un server. Dacă te uiți cu atenție la lista de directoare, poți vedea că numele serverului WEB și versiunea acestuia sunt afișate acolo.

Apache1.3.29 - Server ProXad la trf296.free.fr Port 80

Un administrator cu experiență poate schimba aceste informații, dar, de regulă, este adevărat. Astfel, pentru a obține aceste informații este suficient să trimiteți o solicitare:

intitle:index.of server.at

Pentru a obține informații pentru server specific Să clarificăm cererea:

intitle:index.of server.at site:ibm.com

Sau invers, căutăm servere care rulează o anumită versiune a serverului:

intitle:index.of Apache/2.0.40 Server la

Această tehnică poate fi folosită de un hacker pentru a găsi o victimă. Dacă, de exemplu, are un exploit pentru o anumită versiune a serverului WEB, atunci îl poate găsi și încerca exploitul existent.

De asemenea, puteți obține versiunea serverului vizualizând paginile care sunt instalate implicit la instalarea celei mai recente versiuni a serverului WEB. De exemplu, pentru a vedea pagina de testare Apache 1.2.6, trebuie doar să tastați

intitle:Test.Pagina.pentru.Apache a funcționat!

Mai mult, unele sisteme de operare instalează și lansează imediat serverul WEB în timpul instalării. Cu toate acestea, unii utilizatori nici măcar nu sunt conștienți de acest lucru. Desigur, dacă vedeți că cineva nu a eliminat pagina implicită, atunci este logic să presupunem că computerul nu a suferit deloc personalizare și este probabil vulnerabil la atac.

Încercați să căutați pagini IIS 5.0

allintitle:Bine ați venit la Windows 2000 Internet Services

În cazul IIS, puteți determina nu numai versiunea serverului, ci și Versiunea Windowsși Service Pack.

O altă modalitate de a determina versiunea serverului WEB este să căutați manuale (pagini de ajutor) și exemple care pot fi instalate implicit pe site. Hackerii au găsit destul de multe modalități de a folosi aceste componente pentru a obține acces privilegiat la un site. De aceea, trebuie să eliminați aceste componente de pe locul de producție. Ca să nu mai vorbim de faptul că prezența acestor componente poate oferi informații despre tipul de server și versiunea acestuia. De exemplu, să găsim manualul apache:

inurl:manual apache directive module

Folosind Google ca scaner CGI.

scaner CGI sau Scanner WEB– un utilitar pentru căutarea de scripturi și programe vulnerabile pe serverul victimei. Aceste utilitare trebuie să știe ce să caute, pentru asta au o listă întreagă de fișiere vulnerabile, de exemplu:

/cgi-bin/cgiemail/uargg.txt
/random_banner/index.cgi
/random_banner/index.cgi
/cgi-bin/mailview.cgi
/cgi-bin/maillist.cgi
/cgi-bin/userreg.cgi

/iissamples/ISSamples/SQLQHit.asp
/SiteServer/admin/findvserver.asp
/scripts/cphost.dll
/cgi-bin/finger.cgi

Putem găsi fiecare dintre aceste fișiere folosind Google, folosind în plus cuvintele index of sau inurl cu numele fișierului în bara de căutare: putem găsi site-uri cu scripturi vulnerabile, de exemplu:

allinurl:/random_banner/index.cgi

Folosind cunoștințe suplimentare, un hacker poate exploata vulnerabilitatea unui script și poate folosi această vulnerabilitate pentru a forța scriptul să emită orice fișier stocat pe server. De exemplu, un fișier cu parole.

Cum să te protejezi de hackingul Google.

1. Nu postați date importante pe serverul WEB.

Chiar dacă ați postat datele temporar, este posibil să le uitați sau cineva va avea timp să găsească și să preia aceste date înainte de a le șterge. Nu face asta. Există multe alte modalități de a transfera date care le protejează de furt.

2. Verificați-vă site-ul.

Utilizați metodele descrise pentru a vă cerceta site-ul. Verificați-vă periodic site-ul pentru metode noi care apar pe site-ul http://johnny.ihackstuff.com. Rețineți că, dacă doriți să vă automatizați acțiunile, trebuie să obțineți o permisiune specială de la Google. Daca citesti cu atentie http://www.google.com/terms_of_service.html, atunci veți vedea fraza: Nu puteți trimite interogări automate de niciun fel către sistemul Google fără permisiunea prealabilă expresă a Google.

3. Este posibil să nu aveți nevoie de Google pentru a vă indexa site-ul sau o parte a acestuia.

Google vă permite să eliminați un link către site-ul dvs. sau o parte a acestuia din baza de date, precum și să eliminați pagini din cache. În plus, puteți interzice căutarea de imagini pe site-ul dvs., interziceți afișarea unor fragmente scurte de pagini în rezultatele căutării. Toate posibilitățile de ștergere a unui site sunt descrise în pagină http://www.google.com/remove.html. Pentru a face acest lucru, trebuie să confirmați că sunteți cu adevărat proprietarul acestui site sau să introduceți etichete în pagină sau

4. Folosiți robots.txt

Se știe că motoare de căutare căutați în fișierul robots.txt situat la rădăcina site-ului și nu indexați acele părți care sunt marcate cu cuvântul Nu permiteți. Puteți utiliza acest lucru pentru a preveni indexarea unei părți a site-ului. De exemplu, pentru a preveni indexarea întregului site, creați un fișier robots.txt care să conțină două rânduri:

Agent utilizator: *
Nu permite: /

Ce se mai întâmplă

Pentru ca viața să nu vi se pară dragă, voi spune în sfârșit că există site-uri care monitorizează acei oameni care, folosind metodele descrise mai sus, caută găuri în scripturi și servere WEB. Un exemplu de astfel de pagină este

Aplicație.

Un pic dulce. Încercați câteva dintre următoarele:

1. #mysql dump filetype:sql - căutați dumpurile bazei de date mySQL
2. Raportul Rezumat al Vulnerabilității Gazdei - vă va arăta ce vulnerabilități au găsit alți oameni
3. phpMyAdmin rulează pe inurl:main.php - acest lucru va forța controlul să fie închis prin panoul phpmyadmin
4. nu pentru distribuire confidenţială
5. Solicitare detalii Control Tree Server Variables
6. Alergare în modul Copil
7. Acest raport a fost generat de WebLog
8. intitle:index.of cgiirc.config
9. filetype:conf inurl:firewall -intitle:cvs – poate cineva are nevoie de fișiere de configurare pentru firewall? :)
10. intitle:index.of finances.xls – hmm....
11. intitle:Indexul chat-urilor dbconvert.exe – jurnalele de chat icq
12. intext: Analiza traficului Tobias Oetiker
13. intitle:Statistici de utilizare pentru Generate de Webalizer
14. intitle:statistics of advanced web statistics
15. intitle:index.of ws_ftp.ini – ws ftp config
16. inurl:ipsec.secrets deține secrete partajate – cheie secretă – găsire bună
17. inurl:main.php Bun venit la phpMyAdmin
18. inurl:server-info Apache Server Information
19. site:edu admin note
20. ORA-00921: sfârșit neașteptat al comenzii SQL – obținerea căilor
21. intitle:index.of trillian.ini
22. intitle:Index of pwd.db
23.intitle:index.of people.lst
24. intitle:index.of master.passwd
25.inurl:passlist.txt
26. intitle:Index of .mysql_history
27. intitle:index of intext:globals.inc
28. intitle:index.of administrators.pwd
29. intitle:Index.of etc umbra
30.intitle:index.ofsecring.pgp
31. inurl:config.php dbuname dbpass
32. inurl:perform filetype:ini

  • „Hacking cu Google”
  • Centrul de formare „Informzashchita” http://www.itsecurity.ru - lider centru specializatîn domeniul formării în domeniul securității informațiilor (Licența Comitetului de Educație din Moscova nr. 015470, acreditare de stat nr. 004251). Singurul autorizat Centrul educațional companii de internet Sisteme de securitate și Clearswift în Rusia și țările CSI. Centru de instruire autorizat Microsoft (specializare Securitate). Programele de instruire sunt coordonate cu Comisia Tehnică de Stat a Rusiei, FSB (FAPSI). Certificate de pregătire și documente guvernamentale despre pregătirea avansată.

    Compania SoftKey este serviciu unic pentru cumpărători, dezvoltatori, dealeri și parteneri afiliați. În plus, acesta este unul dintre cele mai bune magazine online de software din Rusia, Ucraina, Kazahstan, care oferă clienților o gamă largă, multe metode de plată, procesare promptă (adesea instantanee) a comenzii, urmărire a procesului comenzii în secțiunea personală, diverse reduceri de la magazinul și producătorii BY.

  • JavaScript
  • Salutare tuturor! Recent, am auzit câțiva tineri frontenderi încercând să explice altor tineri frontenderi ce este Reflect în JavaScript. Drept urmare, cineva a spus că acesta este același lucru cu un proxy. Situația mi-a adus aminte de o glumă:

    Sunt doi mineri:
    - Înțelegi ceva despre asta?
    - Ei bine, pot să explic.
    - Este de înțeles, dar înțelegi ceva despre asta?

    Pentru unii oameni, aceeași situație s-a întâmplat cu Reflect în JS. Ei par să spună ceva, dar nu este clar de ce. Până la urmă, am crezut că merită să vorbesc din nou despre asta într-un limbaj simplu cu exemple.

    Mai întâi, să definim ce este reflectarea în programare:
    Reflection/Reflect API — este un API care oferă abilitatea de a inversa clasele, interfețele, funcțiile, metodele și modulele.

    De aici devine puțin mai clar pentru ce ar trebui să fie folosit acest API. Reflection API există în limbi diferite programare și, uneori, este folosit pentru a ocoli restricțiile impuse de limbaj. Este, de asemenea, folosit pentru a dezvolta diverse utilități auxiliare și pentru a implementa diverse modele (cum ar fi Injecția) și multe altele.

    De exemplu, există un API Reflection în Java. Este folosit pentru a vizualiza informații despre clase, interfețe, metode, câmpuri, constructori și adnotări în timpul execuției programe java. De exemplu, folosind Reflection în Java, puteți utiliza OOP model -.

    PHP are, de asemenea, un API Reflection, care vă permite nu numai să faceți inginerie inversă, dar chiar vă permite să primiți blocuri de comentarii documentare, care este folosit în diverse sisteme auto-documentare.

    În JavaScript Reflectați - este un obiect încorporat care oferă metode pentru interceptarea operațiilor JavaScript. În esență, acesta este un spațiu de nume (cum ar fi Math). Reflect conține un set de funcții care sunt numite exact la fel ca și metodele Proxy.

    Unele dintre aceste metode sunt aceleași cu metodele corespunzătoare din clasa Object sau Function. JavaScript este în creștere și devine un limbaj mare și complex. Diverse lucruri vin în limbaj din alte limbi. Astăzi, API-ul Reflect nu face la fel de mult ca în alte limbi. Cu toate acestea, există propuneri de extindere care nu au devenit încă standard, dar sunt deja în uz. De exemplu, Reflection Metadata.

    Putem spune că spațiul de nume Reflect din JS este rezultatul refactorizării codului. Am folosit deja capacitățile API-ului Reflect înainte, doar că toate aceste capabilități au fost încorporate în clasa de bază  Object.

    Reflect Metadata / Reflectarea metadatelor

    Acest API este conceput pentru a obține informații despre obiecte în timpul execuției. Aceasta este o propunere, care nu este încă un standard. Polyfill este acum utilizat în mod activ. Astăzi este folosit în mod activ în Angular. Folosind acest API, sunt implementați Inject și decoratorii (adnotatori).

    De fapt, de dragul lui Angular, la TypeScript a fost adăugată o sintaxă de decorator extinsă. Unul dintre caracteristici interesante Decoratorii pot obține informații despre tipul proprietății sau parametrul care este decorat. Pentru ca acest lucru să funcționeze, trebuie să includeți biblioteca reflect-metadata, care extinde obiectul standard Reflect și să activați opțiunea emitDecoratorMetadata în configurația TS. După aceasta, pentru proprietățile care au cel puțin un decorator, puteți apela Reflect.getMetadata cu cheia „design:type”.

    Care este diferența dintre Reflect și Proxy?

    Reflectați-  acesta este un set de metode utile de lucru cu obiecte, dintre care jumătate  -  sunt rescrise cele existente din Object. Acest lucru a fost făcut pentru a îmbunătăți semantica și a restabili ordinea, deoarece Object este o clasă de bază, dar în același timp conține o mulțime de metode care nu ar trebui să fie în ea. De asemenea, dacă creați un obiect cu un prototip gol, atunci metodele dvs. de reflectare dispar (vă voi arăta cu un exemplu ce înseamnă asta mai jos).

    Proxy este o clasă care creează întotdeauna un obiect nou cu handlere instalate pentru a intercepta accesul. Vă permite să capturați orice acțiune cu un obiect și să le modificați. Reflect este adesea folosit pentru a implementa diverse logici. Acest lucru se va vedea clar în exemplele de mai jos.

    Cazuri de utilizare

    Ei bine, să ne uităm la modalități de a folosi API-ul Reflect. Câteva exemple sunt cunoscute de mult timp, suntem doar obișnuiți să folosim metode din clasa Object în aceste scopuri. Dar ar fi mai corect, logic, să le folosim din pachetul Reflect ( pachete — terminologie din Java).

    Câmpuri de obiecte generate automat

    Putem crea un obiect în care câmpurile obiectului vor fi create automat în timp ce le accesăm

    Const emptyObj = () => nou Proxy((), ( get: (țintă, cheie, receptor) => (Reflect.has(țintă, cheie) || Reflect.set(țintă, cheie, emptyObj()), Reflect .get(țintă, cheie, receptor)) )); cale const = emptyObj(); cale.la.nodul.virtual.în.obiect.vide = 123; console.log(calea.la.nodul.virtual.în.obiect.gol); // 123
    Totul este cool, dar un astfel de obiect nu poate fi serializat în JSON, vom primi o eroare. Să adăugăm o metodă magică de serializare -  toJSON

    Console.clear(); const emptyObj = () => proxy nou ((), ( get: (țintă, cheie, receptor) => (cheie == "toJSON" ? () => țintă: (Reflect.has(țintă, cheie) || Reflect.set(țintă, cheie, emptyObj()), Reflect.get(țintă, cheie, receptor))) )) ; cale const = emptyObj(); cale.la.nodul.virtual.în.obiect.vide = 123; console.log(JSON.stringify(cale)); // ("la":("virtual":("nod":("in":("gol":("obiect":123))))))

    Apel dinamic constructor

    Avem:

    Var obj = nou F(...args)
    Dar vrem să putem apela dinamic constructorul și să creăm un obiect. Există Reflect.construct pentru asta:

    Var obj = Reflect.construct(F, args)
    Poate fi necesar pentru utilizare în fabrici (băieții OOP vor înțelege). Exemplu:

    // Vechea funcție de metodă Greeting(name) ( this.name = name ) Greeting.prototype.greet = function() ( return `Hello $(this.name)` ) function greetingFactory(name) ( var instance = Object.create( Greeting.prototype); Greeting.call(instanță, nume var obj = greetingFactory("Tuturu"); obj.greet();
    Cum este scris asta în 2017:

    Clasa Salutare ( constructor(nume) ( this.name = name ) greet() ( return `Hello $(this.name)` ) ) const greetingFactory = name => Reflect.construct(Salut, ); const obj = greetingFactory("Tuturu"); obj.greet();

    Replicarea comportamentului jQuery

    Următoarea linie arată cum puteți face jQuery în 2 linii:

    Const $ = document.querySelector.bind(document); Element.prototype.on = Element.prototype.addEventListener;
    Convenabil dacă trebuie să creați rapid ceva fără dependențe, dar sunteți prea leneș să scrieți construcții native lungi. Dar această implementare are un minus - aruncă o excepție atunci când lucrezi cu null:

    Console.log($("unele").innerHTML); error TypeError: Nu se poate citi proprietatea „innerHTML” a null
    Folosind Proxy și Reflect putem rescrie acest exemplu:

    Const $ = selector => nou Proxy(document.querySelector(selector)||Element, ( get: (target, key) => Reflect.get(target, key) )) ;
    Acum, când încercăm să accesăm proprietățile nule, vom primi pur și simplu nedefinit:

    Console.log($("unele").innerHTML); // nedefinit

    Deci, de ce să folosiți Reflect?

    API-ul Reflect este mai convenabil atunci când gestionați erori. De exemplu, toată lumea este familiarizată cu instrucțiunile:
    Object.defineProperty(obj, nume, desc)

    Dacă eșuează, va fi lansată o excepție. Dar Reflect nu aruncă excepții pentru orice, dar poate returna un rezultat boolean:

    Încercați ( Object.defineProperty(obj, name, desc); // proprietatea definită cu succes ) catch (e) ( // posibil eșec (și ar putea prinde accidental excepția greșită) ) /* --- SAU --- */ dacă (Reflect.defineProperty(obj, name, desc)) ( // succes ) else ( // eșec )
    Acest lucru permite ca erorile să fie tratate prin condiții, mai degrabă decât prin încercare de prindere. Un exemplu de utilizare a API-ului Reflect cu gestionarea erorilor:

    Încercați ( var foo = Object.freeze((bar: 1)); șterge foo.bar; ) catch (e) ()
    Și acum poți scrie așa:

    Var foo = Object.freeze((bar: 1)); if (Reflect.deleteProperty(foo, "bar")) ( console.log ("ok"); ) else ( console.log ("eroare"); )
    Dar trebuie spus că sunt cazuri în care Reflect aruncă și excepții.

    Unele postări sunt mai scurte

    Fără multe cuvinte:

    Function.prototype.apply.call(func, obj, args) /* --- SAU --- */ Reflect.apply.call(func, obj, args)

    Diferența de comportament

    Exemplu fara cuvinte:

    Object.getPrototypeOf(1); // nedefinit Reflect.getPrototypeOf(1); //Eroare de scris
    Totul pare a fi clar. Tragem concluzii care este mai bine. Reflect API este mai logic.

    Lucrul cu obiecte cu un prototip gol

    Dat:

    Const myObject = Object.create(null); myObject.foo = 123; myObject.hasOwnProperty === nedefinit; // true // Prin urmare, trebuie să scrieți astfel: Object.prototype.hasOwnProperty.call(myObject, "foo"); // Adevărat
    După cum puteți vedea, nu mai avem metode de reflectare, de exemplu, hasOwnProperty. Prin urmare, fie folosim modul vechi, accesând prototipul clasei de bază, fie accesăm API-ul Reflect:

    Reflect.ownKeys(myObject).includes("foo") // true

    concluzii

    API-ul Reflect este rezultatul unei refactorizări. Acest spațiu de nume conține funcții de reflectare care au fost construite anterior în clasele de bază Object, Function... Comportamentul și gestionarea erorilor au fost modificate. În viitor, acest spațiu de nume va fi extins cu alte instrumente reflectorizante. API-ul Reflect poate fi considerat parte integrantă atunci când lucrați cu Proxy (după cum se poate vedea din exemplele de mai sus).

    Macrium Reflect Free - simplu utilitate gratuită pentru backup și crearea de copii de imagine ale hard diskului. Descărcare gratuită Macrium Reflect Free Edition ultima versiune pentru Windows 30 de zile versiune de încercare. Link permanent: website/ru/backups/macriumreflect

    Acest utilitar este folosit pentru a crea și utiliza backup date dure disc pe sistemul de operare Microsoft Windows. Pentru a funcționa, trebuie să descărcați Macrium Reflect Free Edition RUS gratuit pentru Windows 10, 8..

    Scurtă descriere a Macrium Reflect Free

    Procedura de copiere într-o rezervă este numită diferit: backup, backup, backup și chiar backup, dar procesul este o copie de rezervă a datelor primitive. Multe programe, atât distribuite comercial, cât și gratuite, pot face față sarcinii de backup, iar Makrium Reflect Free este unul dintre ele.

    Utilizabilitate, interfață, funcționalitate

    Este foarte convenabil de utilizat și nu necesită o atenție specială din partea utilizatorului, motiv pentru care ratingul ridicat al programului pentru utilizare nu este o coincidență. Interfața non-rusă a Macrium Reflect Free este intuitivă, dar dacă aveți întrebări despre lucrul cu utilitarul, puteți descărca lecții video de pe torrente sau puteți vizita site-ul oficial.

    Caracteristici software MRF Backup:

    Programul creează o copie a discului utilizând serviciul de copiere umbră Microsoft.
    - A pastra copii de rezervă discurile pot fi pe unități DVD, USB, precum și dispozitive de rețeași FireWire.
    - Macrium Reflect Free Edition este echipat cu un manager de programare încorporat pentru crearea automată a copiilor.
    - Viteză mare și raport de compresie serios al discului copiat.
    - Pluginuri instalate pentru recuperarea discului folosind BartPE Rescue.
    - Configurarea unui jurnal de sistem în format HTML.
    - De asemenea, puteți crea un disc de recuperare pe care îl puteți utiliza GUIși configurați accesul la rețea.

    Acesta este de încredere software pentru backup pe hard disk este, fără îndoială, demn de cea mai recentă versiune a software-ului Macrium Reflect Free, descărcare gratuită fără înregistrare și SMS. Pe site-ul oficial al companiei puteți obține ajutor de la tehnologie. asistență companiei, lăsați comentarii, recenzii, descărcați instrucțiuni care descriu cum funcționează programul, evaluați utilizarea acestui produs, puteți cumpăra și versiunea platita. Vă recomandăm cu tărie fie să activați actualizarea automată, fie să descărcați Macrium Reflect gratuită versiunea de încercare de 30 de zile de pe această pagină programywindows.com în limba rusă în cea mai recentă versiune pentru computerul dvs. complet gratuit. Nu este dificil să vă ușurați găsirea actualizărilor, trebuie doar să descărcați actualizările de aici.

    Reflecţie(din latină târzie reflexio - întoarcerea înapoi) este un mecanism de examinare a datelor despre un program în timpul execuției acestuia. Reflection vă permite să examinați informații despre câmpuri, metode și constructori de clasă. De asemenea, puteți efectua operații pe câmpurile și metodele care sunt examinate. Reflecția în Java se face cu folosind Java Reflection API. Acest API constă din clasele de pachete java.lang și java.lang.reflect. Utilizarea interfeței Reflecție Java API puteți face următoarele:

    • Definiți clasa obiectului.
    • Obțineți informații despre modificatorii de clasă, câmpuri, metode, constructori și superclase.
    • Aflați ce constante și metode aparțin interfeței.
    • Creați o instanță a unei clase al cărei nume este necunoscut până când programul este executat.
    • Obțineți și setați valoarea proprietății unui obiect.
    • Apelați o metodă pe un obiect.
    • Crea matrice nouă, a căror dimensiune și tip de componente sunt necunoscute până la executarea programelor.

    Obținerea unui obiect de tip Class

    MyClass a = noua MyClass(); Clasa aclass = a.getClass(); Cel mai simplu lucru care se face de obicei în programarea dinamică este obținerea unui obiect de tip java.lang.Class. Dacă avem o instanță a unui obiect Class, putem obține tot felul de informații despre această clasă și chiar putem efectua operații asupra ei. Metoda getClass() de mai sus este adesea utilă atunci când există o instanță a unui obiect, dar nu se știe ce clasă este această instanță. Dacă avem o clasă pentru care tipul este cunoscut în momentul compilării, atunci obținerea unei instanțe a clasei este și mai ușoară. Clasa aclass = MyClass.class; Clasa iclass = Integer.class; Dacă numele clasei nu este cunoscut în momentul compilării, dar devine cunoscut în timpul execuției programului, puteți utiliza metoda forName() pentru a obține obiectul Class. Clasa c = Class.forName("com.mysql.jdbc.Driver");

    Obținerea numelui clasei

    Clasa c = myObject.getClass(); String s = c.getName(); Un obiect tip String, returnat de metoda getName() va conține numele complet calificat al clasei, adică. dacă tipul myObject este Integer, atunci rezultatul va fi java.lang.Integer .

    Cercetarea modificatorilor de clasă

    Clasa c = obj.getClass(); int mods = c.getModifiers(); if (Modifier.isPublic(mods)) ( System.out.println("public"); ) if (Modifier.isAbstract(mods)) ( System.out.println("abstract"); ) if (Modifier.isFinal( mods)) ( System.out.println("final"); ) Pentru a afla ce modificatori au fost aplicați unei clase date, mai întâi trebuie să utilizați metoda getClass pentru a obține un obiect de tip Class care reprezintă acea clasă. Apoi trebuie să apelați metoda getModifiers() pe un obiect de tip Class pentru a determina valoarea int ai cărei biți reprezintă modificatorii clasei. Puteți utiliza apoi metodele statice ale clasei java.lang.reflect.Modifier pentru a determina ce modificatori au fost aplicați clasei.

    Găsirea superclaselor

    Clasa c = myObj.getClass(); Clasa superclasa = c.getSuperclass(); De asemenea, puteți utiliza metoda getSuperclass() pe un obiect Class pentru a obține un obiect de tip Class care reprezintă superclasa clasei reflectate. Trebuie să ne amintim că în Java nu există moștenire multiplă și clasa java.lang.Object este clasa de bază pentru toate clasele, drept urmare, dacă clasa nu are părinte, metoda getSuperclass va returna null. Pentru a obține toate superclasele părinte, trebuie să apelați recursiv metoda getSuperclass().

    Definirea interfețelor implementate de o clasă

    Clasa c = LinkedList.class; Interfețe de clasă = c.getInterfaces(); pentru (Clasa cInterfață: interfețe) ( System.out.println(cInterface.getName()); ) De asemenea, puteți utiliza reflectarea pentru a determina ce interfețe sunt implementate într-o clasă dată. Metoda getInterfaces() va returna o matrice de obiecte Class. Fiecare obiect din matrice reprezintă o interfață implementată într-o clasă dată.

    Explorarea, obținerea și setarea valorilor câmpurilor de clasă.

    Clasa c = obj.getClass(); Câmp publicFields = c.getFields(); pentru (câmp: publicFields) ( Clasa fieldType = field.getType(); System.out.println("Nume: " + field.getName()); System.out.println("Tip: " + fieldType.getName( )); Pentru a examina câmpurile care aparțin unei clase, puteți utiliza metoda getFields() pe un obiect de tip Class. Metoda getFields() returnează o matrice de obiecte de tip java.lang.reflect.Field corespunzătoare tuturor câmpurilor publice ale obiectului. Aceste câmpuri publice nu trebuie să fie conținute direct în clasa cu care lucrați, ele pot fi, de asemenea, conținute într-o superclasă, interfață sau interfață care este o extensie a unei interfețe implementate de clasă. Folosind clasa Field, puteți obține numele câmpului, tipul și modificatorii. Dacă cunoașteți numele câmpului, puteți obține informații despre acesta folosind metoda getField(). Clasa c = obj.getClass(); Field nameField = c.getField(„nume”); Metodele getField() și getFields() returnează numai membrii de date publice ai clasei. Dacă trebuie să obțineți toate câmpurile unei anumite clase, trebuie să utilizați metodele getDeclaredField() și getDeclaredFields(). Aceste metode funcționează exact ca și omologii lor getField() și getFields(), cu excepția faptului că returnează toate câmpurile, inclusiv cele private și cele protejate. Pentru a obține valoarea unui câmp, trebuie mai întâi să obțineți un obiect de tip Field pentru acel câmp, apoi să utilizați metoda get(). Metoda ia ca parametru de intrare o referință la un obiect de clasă. Clasa c = obj.getClass(); Câmp câmp = c.getField(„nume”); String nameValue = (Șir) field.get(obj) Clasa Field are și metode specializate de obținere a valorilor tipuri primitive: getInt(), getFloat(), getByte(), etc. Pentru a seta valoarea câmpului, utilizați metoda set(). Clasa c = obj.getClass(); Câmp câmp = c.getField(„nume”); field.set(obj, „Nume nou”); Pentru tipurile primitive există metode setInt(), setFloat(), setByte(), etc. Întrebare pentru cititor: este posibilă modificarea valorii unui câmp privat? Dar finala privată? Vom afla răspunsul puțin mai târziu.

    Explorarea constructorilor de clasă

    Clasa c = obj.getClass(); Constructori constructori = c.getConstructors(); pentru (Constructor constructor: constructori) ( Clasa paramTypes = constructor.getParameterTypes(); pentru (Clasa paramType: paramTypes) ( System.out.print(paramType.getName() + " "); ) System.out.println(); ) Pentru a obține informații despre constructorii publici ai unei clase, trebuie să apelați metoda getConstructors() pe obiectul Class. Această metodă returnează o matrice de obiecte de tip java.lang.reflect.Constructor. Folosind obiectul Constructor, puteți obține apoi numele constructorului, modificatorii, tipurile de parametri și excepțiile aruncate. De asemenea, este posibil să obțineți un constructor public separat dacă sunt cunoscute tipurile parametrilor acestuia. Clasa paramTypes = clasă nouă ( String.class, int.class ); Constructor aConstrct = c.getConstructor(paramTypes); Metodele getConstructor() și getConstructors() returnează numai constructori publici. Dacă trebuie să obțineți toți constructorii unei clase, inclusiv cei privați, puteți utiliza metodele getDeclaredConstructor() și getDeclaredConstructors() aceste metode funcționează exact la fel ca și omologii lor getConstructor() și getConstructors();

    Cercetarea informațiilor despre o metodă, apelarea unei metode.

    Clasa c = obj.getClass(); Metode metode = c.getMethods(); pentru (Metoda metoda: metode) ( System.out.println("Nume: " + method.getName()); System.out.println("Tip de returnare: " + method.getReturnType().getName()); Clasa paramTypes = method.getParameterTypes(); System.out.print("Tipuri de parametri: "); pentru (Clasa paramType: paramTypes) ( System.out.print(" " + paramType.getName()); ) System.out. println(); Pentru a obține informații despre metodele publice ale unei clase, trebuie să apelați metoda getMethods() pe obiectul Class. Această metodă returnează o serie de obiecte de tip java.lang.reflect.Method. Puteți utiliza apoi obiectul Method pentru a obține numele metodei, tipul returnat, tipurile de parametri, modificatorii și excepțiile aruncate. De asemenea, puteți obține informații despre o metodă separată dacă cunoașteți numele metodei și tipurile de parametri. Clasa c = obj.getClass(); Clasa paramTypes = new Class(int.class, String.class); Metoda m = c.getMethod("methodA", paramTypes); Metodele getMethod() și getMethods() revin numai metode publice, pentru a obține toate metodele unei clase, indiferent de tipul de acces, trebuie să utilizați metodele getDeclaredMethod() și getDeclaredMethods(), care funcționează exact la fel ca analogii lor (getMethod() și getMethods()). Interfață Java Reflection API vă permite să apelați dinamic o metodă, chiar dacă numele metodei este necunoscut în momentul compilării (Numele metodelor de clasă pot fi obținute folosind metoda getMethods() sau getDeclaredMethods()). În exemplul următor, luați în considerare apelarea unei metode cunoscând numele acesteia. De exemplu, metoda getCalculateRating: Clasa c = obj.getClass(); Clasa paramTypes = clasă nouă ( String.class, int.class ); Metoda metodei = c.getMethod("getCalculateRating", paramTypes); Object args = new Object ( new String("First Calculate"), new Integer(10) ); Double d = (Dublu) metoda.invoke(obj, args); În acest exemplu, obținem mai întâi un obiect Method cu numele metodei getCalculateRating, apoi apelăm metoda invoke() a obiectului Method și obținem rezultatul metodei. Metoda invocare ia doi parametri, primul este obiectul a cărui clasă declară sau moștenește metoda dată, iar al doilea este o matrice de valori ale parametrilor care sunt transmise metodei invocate. Dacă metoda are modificatorul de acces privat, atunci codul de mai sus trebuie modificat astfel încât pentru obiectul Method, în loc de metoda getMethod(), să apelați getDeclaredMethod(), apoi să apelați setAccessible(true) pentru a obține acces..

    Metoda metoda = c.getDeclaredMethod("getCalculateRating", paramTypes); method.setAccessible(true);

    Încărcarea și instanțiarea dinamică a unei clase

    Clasa c = Class.forName("Test"); Object obj = c.newInstance(); Test test = (Test) obj; Folosind metodele Class.forName() și newInstance() ale obiectului Class, puteți încărca și crea în mod dinamic instanțe ale unei clase în cazul în care numele clasei nu este cunoscut până când programul este executat. În codul de mai sus, încărcăm o clasă folosind metoda Class.forName(), trecând numele acelei clase. Rezultatul este un obiect de tip Class. Apoi apelăm metoda newInstance() pe un obiect de tip Class pentru a crea instanțe ale obiectului clasa originală. Metoda newInstance() returnează un obiect de tip generic Object, așa că în ultima linie aruncăm obiectul returnat la tipul de care avem nevoie.

    Și în sfârșit, un exemplu de modificare a câmpurilor private.

    import java.lang.reflect.Field; clasa WithPrivateFinalField ( private int i = 1; private final String s = "String S"; private String s2 = "String S2"; public String toString() ( return "i = " + i + ", " + s + ", " + s2; ) ) public class ModifyngPrivateFields ( public static void main(String args) aruncă o excepție ( WithPrivateFinalField pf = new WithPrivateFinalField(); Câmp f = pf.getClass().getDeclaredField("i"); f.setAccessible() ); f.setInt(pf, 47); System.out.println(pf); println(pf); f = pf.getClass().getDeclaredField("s2"); f.set(true, "MODIFY S2"); Din codul de mai sus este clar că câmpurile private pot fi modificate. Pentru a face acest lucru, trebuie să obțineți un obiect de tip java.lang.reflect.Field folosind metoda getDeclaredField(), apelați metoda setAccessible(true) și setați valoarea câmpului folosind metoda set(). Vă rugăm să rețineți că câmpul final nu generează avertismente la efectuarea acestei proceduri, iar valoarea câmpului rămâne aceeași, de exemplu. câmpurile finale rămân neschimbate.