How to understand java reflection
How to understand java reflection?
Overview
Java reflection is a mechanism that allows us to obtain internal information of classes such as methods, properties, parent classes, interfaces, etc. at runtime. In other words, reflection is essentially a "reverse" process. When we create an instance of a class through new, it is actually constructed by the Java virtual machine at runtime based on the Class object of this class. Reflection obtains its definition information through the Class object of a class, so that we can access it. Go to its attributes and methods, know the parent class of this class, which interfaces are implemented, and other information.
Class class
We know that using javac can compile a .java file into a .class file. This .class file contains our original definition information for the class (parent classes, interfaces, constructors, properties, methods, etc.). The .class file will be loaded into the Java virtual machine (JVM) by the ClassLoader at runtime. When a .class file is loaded, the JVM will generate a Class object for it. The object we instantiate through new in the program is actually It is constructed based on the corresponding Class object at runtime. To be precise, this Class object is actually an instance of the java.lang.Class
In the following explanation, we will take the People class and the Student class as examples:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
Get the Class object through the class name
If you know a class at compile time name, we can get its Class object like this:
1 |
|
There is also a method to get the Class object based on the full path name of the class as follows:
1 2 |
|
Note that Class.forName() The method parameter must be the full pathname of a class. In fact, as long as we "import com.test.People", we can directly obtain his Class object through "People.class" without the trouble of writing out the full path. (If the corresponding class is not found on the classpath when calling the Class.forName() method, ClassNotFoundException will be thrown.)
Get the Class object through the object itself
1 2 |
|
Get the class through reflection The constructor
Once we obtain the Class object of People, we can obtain the original definition information of the People class through this Class object. First, let's get the constructor object of the People class. With this constructor object, we can construct a People object. For example, we can add the following code to Student.java:
1 2 3 4 5 6 7 8 9 |
|
Above, we call the getConstructor method to obtain a constructor object of the People class, because the formal parameter type of the constructor we want to obtain is String and int, so we pass in String.class and int.class. With the constructor object, we can call the newInstance method to create a people object.
Note that after obtaining the Constructor, Method, and Field objects of a class through reflection, before calling the methods of these objects, first set the accessible flag of this object to true to cancel the Java language access check. You can Increase reflection speed. As shown in the following code:
1 2 3 4 |
|
Get the methods declared in the class through reflection
Get the methods declared in the current class (excluding those inherited from the parent class)
To get all the methods declared in the current class, you can use the getDeclaredMethods function in Class. It will get all the methods declared in the current class (including private, public, static, etc.), and it will return an array of Method objects, where Each Method object represents a method declared in a class. To get the specified method, you can call getDeclaredMethod(String name, Class...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Get the public methods declared in the current class and the parent class
To get all the public methods declared in the current class and the parent class, you can call the getMethods function, and to To obtain a specified public method, you can call the getMethod method. Please look at the following code:
1 2 3 4 5 6 7 8 9 10 |
|
Get the properties defined in the class through reflection
Getting properties is similar to getting methods, except that the call to getMethods() / getDeclaredMethods() method is replaced Becomes a call to the getFields() / getDeclaredFields() method.
Get the attributes defined in the current class (excluding attributes inherited from the parent class)
To get all the attributes defined in the current class (including private, public, static and other attributes ) You can call the getDeclaredFields function of the Class object; to obtain the specified attributes, you can call getDeclaredField. As shown in the following code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
Get the public properties defined in the current class and the parent class
To get all the public properties defined in the current class and the parent class, you can call the getFields function of the Class object , and to obtain a specified public attribute, you can call the getField method, as shown in the following code:
1 2 3 4 5 |
|
Get the parent class of the class and the interface implemented by the class through reflection
获取父类
调用Class对象的getSuperClass方法即可,如以下代码所示:
1 2 |
|
获取所实现的接口
要知道一个类实现了哪些接口,只需调用Class对象的getInterfaces方法,如以下代码所示:
1 2 3 4 |
|
The above is the detailed content of How to understand java reflection. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Guide to Smith Number in Java. Here we discuss the Definition, How to check smith number in Java? example with code implementation.

In this article, we have kept the most asked Java Spring Interview Questions with their detailed answers. So that you can crack the interview.

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

Guide to TimeStamp to Date in Java. Here we also discuss the introduction and how to convert timestamp to date in java along with examples.

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.
