What is reflection?
Mainly refers to the ability of a program to access, detect and modify its own status or behavior.
What is Java reflection?
Java reflection means that in the running state of the Java program, for any class, all properties and methods of this class can be obtained; for a given object, all properties and methods can be called Any of its properties and methods. This method of dynamically obtaining the content of a class and dynamically calling objects is called reflection mechanism.
The Java reflection mechanism mainly provides the following functions:
* 1. Determine the class to which any object belongs at runtime.
* 2. Construct an object of any class at runtime.
* 3. Determine the member variables and methods of any class at runtime.
* 4. Call the method of any object at runtime.
Java’s reflection mechanism is mainly used to analyze class capabilities. We can obtain information about members and members of each type in a program or assembly at runtime. The general object types in the program are confirmed during compilation. Java's reflection mechanism can dynamically create objects and call their properties during runtime. Therefore, the core of reflection is to dynamically load classes or call methods to access properties during runtime. It does not need to know in advance who the running object is.
Reflection can be used to:
Construct an object of any class during runtime. Determine the class to which any object belongs/whether it is an instance of a certain class during runtime. Obtain the properties and methods of any class, including inherited public methods that call methods of any object during runtime.
Example:
a) Get method
The routine DumpMethods class demonstrates the basic role of the Reflection API. It reads the class name, and then prints the method information of this class.
import java.lang.reflect.Method; public class DumpMethods { public static void main(String[] args) throws Exception //在方法后加上這句,異常就消失了 { //獲得字符串所標識的類的class對象 Class<?> classType = Class.forName("java.lang.String");//在此處傳入字符串指定類名,所以參數(shù)獲取可以是一個運行期的行為,可以用args[0] //返回class對象所對應的類或接口中,所聲明的所有方法的數(shù)組(包括私有方法) Method[] methods = classType.getDeclaredMethods(); //遍歷輸出所有方法聲明 for(Method method : methods) { System.out.println(method); } } }
b) Calling methods through reflection
import java.lang.reflect.Method; public class InvokeTester { public int add(int param1, int param2) { return param1 + param2; } public String echo(String message) { return "Hello: " + message; } public static void main(String[] args) throws Exception { // 以前的常規(guī)執(zhí)行手段 InvokeTester tester = new InvokeTester(); System.out.println(tester.add(1, 2)); System.out.println(tester.echo("Tom")); System.out.println("---------------------------"); // 通過反射的方式 // 第一步,獲取Class對象 // 前面用的方法是:Class.forName()方法獲取 // 這里用第二種方法,類名.class Class<?> classType = InvokeTester.class; // 生成新的對象:用newInstance()方法 Object invokeTester = classType.newInstance(); System.out.println(invokeTester instanceof InvokeTester); // 輸出true // 通過反射調用方法 // 首先需要獲得與該方法對應的Method對象 Method addMethod = classType.getMethod("add", new Class[] { int.class, int.class }); // 第一個參數(shù)是方法名,第二個參數(shù)是這個方法所需要的參數(shù)的Class對象的數(shù)組 // 調用目標方法 Object result = addMethod.invoke(invokeTester, new Object[] { 1, 2 }); System.out.println(result); // 此時result是Integer類型 //調用第二個方法 Method echoMethod = classType.getDeclaredMethod("echo", new Class[]{String.class}); Object result2 = echoMethod.invoke(invokeTester, new Object[]{"Tom"}); System.out.println(result2); } }
The above is the detailed content of What is reflection in java?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

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

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

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)

The settings.json file is located in the user-level or workspace-level path and is used to customize VSCode settings. 1. User-level path: Windows is C:\Users\\AppData\Roaming\Code\User\settings.json, macOS is /Users//Library/ApplicationSupport/Code/User/settings.json, Linux is /home//.config/Code/User/settings.json; 2. Workspace-level path: .vscode/settings in the project root directory

To correctly handle JDBC transactions, you must first turn off the automatic commit mode, then perform multiple operations, and finally commit or rollback according to the results; 1. Call conn.setAutoCommit(false) to start the transaction; 2. Execute multiple SQL operations, such as INSERT and UPDATE; 3. Call conn.commit() if all operations are successful, and call conn.rollback() if an exception occurs to ensure data consistency; at the same time, try-with-resources should be used to manage resources, properly handle exceptions and close connections to avoid connection leakage; in addition, it is recommended to use connection pools and set save points to achieve partial rollback, and keep transactions as short as possible to improve performance.

itertools.combinations is used to generate all non-repetitive combinations (order irrelevant) that selects a specified number of elements from the iterable object. Its usage includes: 1. Select 2 element combinations from the list, such as ('A','B'), ('A','C'), etc., to avoid repeated order; 2. Take 3 character combinations of strings, such as "abc" and "abd", which are suitable for subsequence generation; 3. Find the combinations where the sum of two numbers is equal to the target value, such as 1 5=6, simplify the double loop logic; the difference between combinations and arrangement lies in whether the order is important, combinations regard AB and BA as the same, while permutations are regarded as different;

DependencyInjection(DI)isadesignpatternwhereobjectsreceivedependenciesexternally,promotingloosecouplingandeasiertestingthroughconstructor,setter,orfieldinjection.2.SpringFrameworkusesannotationslike@Component,@Service,and@AutowiredwithJava-basedconfi

fixture is a function used to provide preset environment or data for tests. 1. Use the @pytest.fixture decorator to define fixture; 2. Inject fixture in parameter form in the test function; 3. Execute setup before yield, and then teardown; 4. Control scope through scope parameters, such as function, module, etc.; 5. Place the shared fixture in conftest.py to achieve cross-file sharing, thereby improving the maintainability and reusability of tests.

Use classes in the java.time package to replace the old Date and Calendar classes; 2. Get the current date and time through LocalDate, LocalDateTime and LocalTime; 3. Create a specific date and time using the of() method; 4. Use the plus/minus method to immutably increase and decrease the time; 5. Use ZonedDateTime and ZoneId to process the time zone; 6. Format and parse date strings through DateTimeFormatter; 7. Use Instant to be compatible with the old date types when necessary; date processing in modern Java should give priority to using java.timeAPI, which provides clear, immutable and linear

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

java.lang.OutOfMemoryError: Javaheapspace indicates insufficient heap memory, and needs to check the processing of large objects, memory leaks and heap settings, and locate and optimize the code through the heap dump analysis tool; 2. Metaspace errors are common in dynamic class generation or hot deployment due to excessive class metadata, and MaxMetaspaceSize should be restricted and class loading should be optimized; 3. Unabletocreatenewnativethread due to exhausting system thread resources, it is necessary to check the number of threads, use thread pools, and adjust the stack size; 4. GCoverheadlimitexceeded means that GC is frequent but has less recycling, and GC logs should be analyzed and optimized.
