рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ?

рдЬрд╛рд╡рд╛ рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рддрдВрддреНрд░ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЙрдирдХреЗ рдирд╛рдо рдЬрд╛рдиреЗ рдмрд┐рдирд╛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрдХреНрд╖рд╛рдУрдВ, рдЗрдВрдЯрд░рдлреЗрд╕, рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдПрдкреАрдЖрдИ рдЖрдкрдХреЛ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ, рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдлрд╝реАрд▓реНрдб рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИред

рдЖрдЗрдП рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрд╕рдХреА рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдПрдВ:

  • рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рдкрд╣рдЪрд╛рдиреЗрдВ/рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
  • рдХреНрд▓рд╛рд╕ рдореЙрдбрд┐рдлрд╛рдпрд░реНрд╕, рдлреАрд▓реНрдбреНрд╕, рдореЗрдердбреНрд╕, рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯреНрд╕, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдФрд░ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  • рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдХрд┐ рдХреМрди рд╕реА рд╡рд┐рдзрд┐рдпрд╛рдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ
  • рдЙрд╕ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдБ рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдЧ рдирд╛рдо рддрдм рддрдХ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛
  • рдирд╛рдо рд╕реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдлрд╝реАрд▓реНрдб рдХрд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
  • рдирд╛рдо рд╕реЗ рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ

рд▓рдЧрднрдЧ рд╕рднреА рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдпрд╣ рдЖрдЬ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬрд╛рд╡рд╛/рдЬрд╛рд╡рд╛ рдИрдИ рдврд╛рдВрдЪреЗ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

  • рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ
  • JUnit рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪрд╛

рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рдХрднреА рдЗрди рддрдВрддреНрд░реЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрддреНрддрд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рднреА рд╣реИ: рдкреНрд░рддрд┐рдмрд┐рдВрдм рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рд▓рдЪреАрд▓реЗрдкрди рдФрд░ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВред рддреЛ рдЪрд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реИрдВ:

  • рдЖрд╡реЗрджрди рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрдиред рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣рдореЗрдВ рдЙрд╕ рдХреЛрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (encapsulation рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди)ред
  • рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рддрд┐рдмрдВрдзред рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рдмрдВрдзрдХ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред
  • рдХрдо рдкреНрд░рджрд░реНрд╢рдиред рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡рд░реНрдЧ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕рдкрд╛рде рдХреЛ рд╕реНрдХреИрди рдХрд░рдХреЗ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред
  • рдмрдирд╛рдП рд░рдЦрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдпрд╣ рдХрдо рд▓рдЪреАрд▓рд╛ рдФрд░ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдХрдард┐рди рд╣реИред

рдкреНрд░рддрд┐рдмрд┐рдВрдм рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

рд╕рднреА рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕рдВрдЪрд╛рд▓рди рдПрдХ java.lang.Class рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП, java.lang.Class рдХрд╛ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рдирдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП java.lang.Class рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ :

рддрд░реАрдХрд╛ рдХрд╛рд░реНрдп
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЧреЗрдЯрдирд╛рдо (); рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИ
int getModifiers (); рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдкреИрдХреЗрдЬ рдЧреЗрдЯрдкреИрдХреЗрдЬ (); рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдХреНрд▓рд╛рд╕ рдЧреЗрдЯрд╕реБрдкрд░рдХреНрд▓рд╛рд╕ (); рдореВрд▓ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдХрдХреНрд╖рд╛ [] getInterfaces (); рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ [] getConstructors (); рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдлреАрд▓реНрдбреНрд╕ [] getFields (); рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдлрд╝реАрд▓реНрдб getField (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝реАрд▓реНрдбрдирд╛рдо); рдирд╛рдо рд╕реЗ рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рд╡рд┐рдзрд┐ [] getMethods (); рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ

рдХрдХреНрд╖рд╛рдУрдВ, рдЗрдВрдЯрд░рдлреЗрд╕, рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╣реИрдВред рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рднреА рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдлрд╝реАрд▓реНрдб рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдирд┐рдЬреА рдлрд╝реАрд▓реНрдб рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рджреЗрддреА рд╣реИрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рджреЗрдЦреЗрдВрдЧреЗред

рдЕрднреА рд╣рдо java.lang.Class рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВред

1. Class.forName рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдЪрд▓ рд░рд╣реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ рдХрдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП forName (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рд╕рдирд╛рдо) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рдХреЛрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдХреНрд╖рд╛рдПрдВ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓рд┐рдП рдПрдХ рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

package com.company;

public class Person {
    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

рдФрд░ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

public class TestReflection {
    public static void main(String[] args) {
        try {
            Class<?> aClass = Class.forName("com.company.Person");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрднрд╡ рд╣реИ рдпрджрд┐ рд╡рд░реНрдЧ рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рдЬреНрдЮрд╛рдд рд╣реЛред рддрдм рдЖрдк рд╕реНрдЯреИрдЯрд┐рдХ Class.forName() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

2. рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдпрджрд┐ рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдЙрдкрд▓рдмреНрдз рд╣реИ рд▓реЗрдХрд┐рди рдЙрд╕рдХрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдореЗрдВ .class рдЬреЛрдбрд╝рдХрд░ рдХрдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреА рдХрдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред

Class aClass = Person.class;

3. .getClass() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдпрджрд┐ рдХреЛрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рдХреНрд▓рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ object.getClass() рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ ред

Person person = new Person();
Class aClass = person.getClass();

рдкрд┐рдЫрд▓реЗ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ?

A.class рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рдордп рдЖрдк рдХрд┐рд╕ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ .class рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред

рдПрдХ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рдЖрдЗрдП рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ: getDeclaredMethods() рдФрд░ getMethods() ред

getDeclaredMethods() рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рдирд┐рдЬреА, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд░ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рд╕рд╣рд┐рдд рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЧрдП рд╡рд░реНрдЧ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рднреА рдШреЛрд╖рд┐рдд рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╡рд┐рдзрд┐рдпрд╛рдБ рдирд╣реАрдВ ред

getMethods() рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЧрдП рд╡рд░реНрдЧ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдердб рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд╛рд▓реА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ - рдЬреЛ рдХрд┐ рдХреНрд▓рд╛рд╕ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдФрд░ рд╕реБрдкрд░рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВ ред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЪрд▓рд┐рдП getDeclaredMethods() рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ ред рджреЛ рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рд╣рдо рдЕрдореВрд░реНрдд рд╕рдВрдЦреНрдпрд╛ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдЪрд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдореЗрдердб рдРрд░реЗ рдХреЛ List<String> рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ :

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class TestReflection {
    public static void main(String[] args) {
        final Method[] declaredMethods = Number.class.getDeclaredMethods();
        List<String> actualMethodNames = getMethodNames(declaredMethods);
        actualMethodNames.forEach(System.out::println);
    }

    private static List<String> getMethodNames(Method[] methods) {
        return Arrays.stream(methods)
                .map(Method::getName)
                .collect(Collectors.toList());
    }
}

рдпрд╣рд╛рдБ рдЗрд╕ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

рдмрд╛рдЗрдЯрд╡реИрд▓реНрдпреВ
рд╢реЙрд░реНрдЯрд╡реИрд▓реНрдпреВ
рдЗрдВрдЯрд╡реИрд▓реНрдпреВ
рд▓реЙрдиреНрдЧрд╡реИрд▓реНрдпреВ
рдлреНрд▓реЛрдЯ рдлреНрд▓реЛрдЯрд╡реИрд▓реНрдпреВ;
doubleValue

рдпреЗ рд╕рдВрдЦреНрдпрд╛ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рддрд░реАрдХреЗ рд╣реИрдВ ред GetMethods() рдХреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ:

final Method[] methods = Number.class.getMethods();
List<String> actualMethodNames = getMethodNames(methods);

рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, рд╣рдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рджреЗрдЦреЗрдВрдЧреЗ:

рдмрд╛рдЗрдЯрд╡реИрд▓реНрдпреВ
рд╢реЙрд░реНрдЯрд╡реИрд▓реНрдпреВ
рдЗрдВрдЯрд╡реИрд▓реНрдпреВ
рд▓реЙрдиреНрдЧрд╡реИрд▓реНрдпреВ
рдлреНрд▓реЛрдЯ рдлреНрд▓реЛрдЯрд╡реИрд▓реНрдпреВ;
рдбрдмрд▓рд╡реИрд▓реНрдпреВ
рдкреНрд░рддреАрдХреНрд╖рд╛
рдкреНрд░рддреАрдХреНрд╖рд╛
рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИрд╢рдХреЛрдб getClass
рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ рд╕рднреА рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ




рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рд╡рд░реНрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░рд╛ рддрд░реАрдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рднреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ ред

рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getFields рдФрд░ getDeclaredFields рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП LocalDateTime рдХреНрд▓рд╛рд╕ рдХреЛ рджреЗрдЦреЗрдВред рд╣рдо рдЕрдкрдирд╛ рдХреЛрдб рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗ:

import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class TestReflection {
    public static void main(String[] args) {
        final Field[] declaredFields = LocalDateTime.class.getDeclaredFields();
        List<String> actualFieldNames = getFieldNames(declaredFields);
        actualFieldNames.forEach(System.out::println);
    }

    private static List<String> getFieldNames(Field[] fields) {
        return Arrays.stream(fields)
                .map(Field::getName)
                .collect(Collectors.toList());
    }
}

рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ LocalDateTime рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рд╣рд┐рдд рдлрд╝реАрд▓реНрдбреНрд╕ рдХрд╛ рд╕реЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИред

рдиреНрдпреВрдирддрдо
рдЕрдзрд┐рдХрддрдо
рд╕реАрд░рд┐рдпрд▓ рд╕рдВрд╕реНрдХрд░рдг рдпреВрдЖрдИрдбреА
рджрд┐рдирд╛рдВрдХ
рд╕рдордп

рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╣рдорд╛рд░реА рдкрд┐рдЫрд▓реА рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк, рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рддреЗ рд╣реИрдВ:

final Field[] fields = LocalDateTime.class.getFields();
List<String> actualFieldNames = getFieldNames(fields);

рдЖрдЙрдЯрдкреБрдЯ:

рдорд┐рди
рдореИрдХреНрд╕

рдЕрдм рдЖрдЗрдП рдЗрди рддрд░реАрдХреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред

GetDeclaredFields рд╡рд┐рдзрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдШреЛрд╖рд┐рдд рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рддреА рд╣реИрдХрдХреНрд╖рд╛рд╡рд╕реНрддреБред

GetFields рд╡рд┐рдзрд┐ рд╡рд░реНрдЧ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЧрдП рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рддреА рд╣реИрдХрдХреНрд╖рд╛рд╡рд╕реНрддреБред

рдЕрдм рдЖрдЗрдП LocalDateTime рдХреЗ рдЕрдВрджрд░ рджреЗрдЦреЗрдВ ред

рд╡рд░реНрдЧ рдХрд╛рдорд┐рдирдФрд░рдореИрдХреНрд╕рдлрд╝реАрд▓реНрдб рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ getFields рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ ред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рджрддрд╛рд░реАрдЦ,рд╕рдордп,рд╕реАрд░рд┐рдпрд▓рд╡рд░реНрдЬрдирдпреВрдЖрдИрдбреАрд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдирд┐рдЬреА рд╕рдВрд╢реЛрдзрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ getFields рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдВрдЧреЗ , рд▓реЗрдХрд┐рди рд╣рдо рдЙрдиреНрд╣реЗрдВ getDeclaredFields рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдлреАрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг

рдЕрдм рдЗрд╕рдХрд╛ рд╕рдордп рдХреНрд▓рд╛рд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╣реИ , рдЕрд░реНрдерд╛рддреН:

рддрд░реАрдХрд╛ рдХрд╛рд░реНрдп
getModifiers рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
getPackage рдкреИрдХреЗрдЬ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ
getSuperclass рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
getInterfaces рдПрдХ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
getName рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
getSimpleName рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

getModifiers ()

рд╕рдВрд╢реЛрдзрдХ рдХреЛ a рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИрдХрдХреНрд╖рд╛рд╡рд╕реНрддреБред

рд╕рдВрд╢реЛрдзрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ , рд╕реНрдерд┐рд░ , рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЖрджрд┐ рдЬреИрд╕реЗ рдХреАрд╡рд░реНрдб рд╣реИрдВ ред рд╣рдо getModifiers () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╢реЛрдзрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

Class<Person> personClass = Person.class;
int classModifiers = personClass.getModifiers();

рдпрд╣ рдХреЛрдб рдПрдХ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИint рдпрд╣рд╛рдБрдЪрд░ рдЬреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИред рд╕рдВрдмрдВрдзрд┐рдд рдмрд┐рдЯ рдХреЛ рд╕реЗрдЯ рдпрд╛ рд╕рд╛рдлрд╝ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо java.lang.reflect.Modifier рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╢реЛрдзрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :

import com.company.Person;
import java.lang.reflect.Modifier;

public class TestReflection {
    public static void main(String[] args) {
        Class<Person> personClass = Person.class;
        int classModifiers = personClass.getModifiers();

        boolean isPublic = Modifier.isPublic(classModifiers);
        boolean isStatic = Modifier.isStatic(classModifiers);
        boolean isFinal = Modifier.isFinal(classModifiers);
        boolean isAbstract = Modifier.isAbstract(classModifiers);
        boolean isInterface = Modifier.isInterface(classModifiers);

        System.out.printf("Class modifiers: %d%n", classModifiers);
        System.out.printf("Is public: %b%n", isPublic);
        System.out.printf("Is static: %b%n", isStatic);
        System.out.printf("Is final: %b%n", isFinal);
        System.out.printf("Is abstract: %b%n", isAbstract);
        System.out.printf("Is interface: %b%n", isInterface);
    }
}

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡реНрдпрдХреНрддрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ:

public class Person {
   тАж
}

рд╣рдореЗрдВ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ:

рд╡рд░реНрдЧ рд╕рдВрд╢реЛрдзрдХ: 1
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ: рд╕рддреНрдп
рд╕реНрдерд┐рд░ рд╣реИ: рдЕрд╕рддреНрдп
рдЕрдВрддрд┐рдо рд╣реИ: рдЕрд╕рддреНрдп
рд╕рд╛рд░ рд╣реИ: рдЕрд╕рддреНрдп
рд╣реИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕: рдЕрд╕рддреНрдп

рдпрджрд┐ рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рд╕рд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕:

public abstract class Person { тАж }

рдФрд░ рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ:

рд╡рд░реНрдЧ рд╕рдВрд╢реЛрдзрдХ: 1025
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ: рд╕рддреНрдп
рд╕реНрдерд┐рд░ рд╣реИ: рдЕрд╕рддреНрдп
рдЕрдВрддрд┐рдо рд╣реИ: рдЕрд╕рддреНрдп
рд╕рд╛рд░ рд╣реИ: рд╕рддреНрдп
рд╣реИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕: рдЕрд╕рддреНрдп

рд╣рдордиреЗ рдПрдХреНрд╕реЗрд╕ рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рдВрд╢реЛрдзрдХ рд╡рд░реНрдЧ рдХреЗ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рднреА рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред

рдЧреЗрдЯрдкреИрдХреЗрдЬ ()

рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдЬрд╛рдирдХрд░ рд╣рдо рдЙрд╕рдХреЗ рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

Class<Person> personClass = Person.class;
final Package aPackage = personClass.getPackage();
System.out.println(aPackage.getName());

рдЧреЗрдЯрд╕реБрдкрд░рдХреНрд▓рд╛рд╕ ()

рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рддреЛ рд╣рдо рдЙрд╕рдХреЗ рдореВрд▓ рд╡рд░реНрдЧ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ:

public static void main(String[] args) {
    Class<Person> personClass = Person.class;
    final Class<? super Person> superclass = personClass.getSuperclass();
    System.out.println(superclass);
}

рд╣рдореЗрдВ рдкреНрд░рд╕рд┐рджреНрдз рд╡рд╕реНрддреБ рд╡рд░реНрдЧ рдорд┐рд▓рддрд╛ рд╣реИ:

class java.lang.Object

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рдФрд░ рдореВрд▓ рд╡рд░реНрдЧ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рджреЗрдЦреЗрдВрдЧреЗ:

package com.company;

class Human {
    // Some info
}

public class Person extends Human {
    private int age;
    private String name;

    // Some info
}

рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЕрдкрдирд╛ рдореВрд▓ рд╡рд░реНрдЧ рдорд┐рд▓рддрд╛ рд╣реИ:

class com.company.Human

рдЧреЗрдЯрдЗрдВрдЯрд░рдлреЗрд╕ ()

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрдХреНрд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рд╕реВрдЪреА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

public static void main(String[] args) {
    Class<Person> personClass = Person.class;
    final Class<?>[] interfaces = personClass.getInterfaces();
    System.out.println(Arrays.toString(interfaces));
}

рдФрд░ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐ рд╡рд░реНрдЧ рдХреЛ рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВ :

public class Person implements Serializable { тАж }

рдЖрдЙрдЯрдкреБрдЯ:

[рдЗрдВрдЯрд░рдлрд╝реЗрд╕ java.io.Serializable]

рдПрдХ рд╡рд░реНрдЧ рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИрдХрдХреНрд╖рд╛рд╡рд╕реНрддреБрдУрдВред рдЬрд╛рд╡рд╛ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдПрдкреАрдЖрдИ рдореЗрдВ, рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рднреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИрдХрдХреНрд╖рд╛рд╡рд╕реНрддреБрдУрдВред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИ, рдЙрд╕рдХреЗ рдореВрд▓ рд╡рд░реНрдЧ рдХреЛ рдирд╣реАрдВред рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рдкреВрд░реНрд╡рдЬреЛрдВ рдХреЛ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

getName () рдФрд░ getSimpleName () рдФрд░ getCanonicalName ()

рдЖрдЗрдП рдПрдХ рдЖрджрд┐рдо, рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рд╡рд░реНрдЧ, рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд░реНрдЧ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдЦреЗрдВ:

public class TestReflection {
    public static void main(String[] args) {
        printNamesForClass(int.class, "int class (primitive)");
        printNamesForClass(String.class, "String.class (ordinary class)");
        printNamesForClass(java.util.HashMap.SimpleEntry.class,
                "java.util.HashMap.SimpleEntry.class (nested class)");
        printNamesForClass(new java.io.Serializable() {
                }.getClass(),
                "new java.io.Serializable(){}.getClass() (anonymous inner class)");
    }

    private static void printNamesForClass(final Class<?> clazz, final String label) {
        System.out.printf("%s:%n", label);
        System.out.printf("\tgetName()):\t%s%n", clazz.getName());
        System.out.printf("\tgetCanonicalName()):\t%s%n", clazz.getCanonicalName());
        System.out.printf("\tgetSimpleName()):\t%s%n", clazz.getSimpleName());
        System.out.printf("\tgetTypeName():\t%s%n%n", clazz.getTypeName());
    }
}

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо:

int рд╡рд░реНрдЧ (рдЖрджрд┐рдо):
getName ()): int
getCanonicalName ()): int
getSimpleName ()): int
getTypeName (): int

String.class (рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧ):
getName ()): java.lang.String
getCanonicalName () ): java.lang.String
getSimpleName ()): рд╕реНрдЯреНрд░рд┐рдВрдЧ
getTypeName (): java.lang.String

java.util.HashMap.SimpleEntry.class (рдиреЗрд╕реНрдЯреЗрдб рдХреНрд▓рд╛рд╕):
getName ()): java.util.AbstractMap$SimpleEntry
getCanonicalName ( )): java.util.AbstractMap.SimpleEntry
getSimpleName()): SimpleEntry
getTypeName(): java.util.AbstractMap$SimpleEntry

new java.io.Serializable(){}.getClass() (рдЕрдирд╛рдо рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ):
getName() ): TestReflection$1
getCanonicalName ()): рдЕрд╢рдХреНрдд
getSimpleName()):
getTypeName(): TestReflection$1

рдЕрдм рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ:

  • getName() рдЗрдХрд╛рдИ рдХрд╛ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред

  • getCanonicalName() рдЬрд╛рд╡рд╛ рд▓реИрдВрдЧреНрд╡реЗрдЬ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рдХреИрдиреЛрдирд┐рдХрд▓ рдирд╛рдо рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╣рд┐рдд рдирд╛рдо рдирд╣реАрдВ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдпрд╛ рдЕрдирд╛рдо рд╡рд░реНрдЧ рд╣реИ рдпрд╛ рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рддрддреНрд╡ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╡рд┐рд╣рд┐рдд рдирд╛рдо рдирд╣реАрдВ рд╣реИ) рддреЛ рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред

  • getSimpleName() рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╕рд░рд▓ рдирд╛рдо рджреЗрддрд╛ рд╣реИред рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдЧреБрдордирд╛рдо рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

  • getTypeName() рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдирд╛рддреНрдордХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред