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 //在方法后加上這句,異常就消失了 { //獲得字符串所標(biāo)識(shí)的類的class對(duì)象 Class<?> classType = Class.forName("java.lang.String");//在此處傳入字符串指定類名,所以參數(shù)獲取可以是一個(gè)運(yùn)行期的行為,可以用args[0] //返回class對(duì)象所對(duì)應(yīng)的類或接口中,所聲明的所有方法的數(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("---------------------------"); // 通過(guò)反射的方式 // 第一步,獲取Class對(duì)象 // 前面用的方法是:Class.forName()方法獲取 // 這里用第二種方法,類名.class Class<?> classType = InvokeTester.class; // 生成新的對(duì)象:用newInstance()方法 Object invokeTester = classType.newInstance(); System.out.println(invokeTester instanceof InvokeTester); // 輸出true // 通過(guò)反射調(diào)用方法 // 首先需要獲得與該方法對(duì)應(yīng)的Method對(duì)象 Method addMethod = classType.getMethod("add", new Class[] { int.class, int.class }); // 第一個(gè)參數(shù)是方法名,第二個(gè)參數(shù)是這個(gè)方法所需要的參數(shù)的Class對(duì)象的數(shù)組 // 調(diào)用目標(biāo)方法 Object result = addMethod.invoke(invokeTester, new Object[] { 1, 2 }); System.out.println(result); // 此時(shí)result是Integer類型 //調(diào)用第二個(gè)方法 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)

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.

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

Pre-formanceTartuptimeMoryusage, Quarkusandmicronautleadduetocompile-Timeprocessingandgraalvsupport, Withquarkusoftenperforminglightbetterine ServerLess scenarios.2.Thyvelopecosyste,

Networkportsandfirewallsworktogethertoenablecommunicationwhileensuringsecurity.1.Networkportsarevirtualendpointsnumbered0–65535,withwell-knownportslike80(HTTP),443(HTTPS),22(SSH),and25(SMTP)identifyingspecificservices.2.PortsoperateoverTCP(reliable,c

Java's garbage collection (GC) is a mechanism that automatically manages memory, which reduces the risk of memory leakage by reclaiming unreachable objects. 1.GC judges the accessibility of the object from the root object (such as stack variables, active threads, static fields, etc.), and unreachable objects are marked as garbage. 2. Based on the mark-clearing algorithm, mark all reachable objects and clear unmarked objects. 3. Adopt a generational collection strategy: the new generation (Eden, S0, S1) frequently executes MinorGC; the elderly performs less but takes longer to perform MajorGC; Metaspace stores class metadata. 4. JVM provides a variety of GC devices: SerialGC is suitable for small applications; ParallelGC improves throughput; CMS reduces

Choosing the right HTMLinput type can improve data accuracy, enhance user experience, and improve usability. 1. Select the corresponding input types according to the data type, such as text, email, tel, number and date, which can automatically checksum and adapt to the keyboard; 2. Use HTML5 to add new types such as url, color, range and search, which can provide a more intuitive interaction method; 3. Use placeholder and required attributes to improve the efficiency and accuracy of form filling, but it should be noted that placeholder cannot replace label.

HTTP log middleware in Go can record request methods, paths, client IP and time-consuming. 1. Use http.HandlerFunc to wrap the processor, 2. Record the start time and end time before and after calling next.ServeHTTP, 3. Get the real client IP through r.RemoteAddr and X-Forwarded-For headers, 4. Use log.Printf to output request logs, 5. Apply the middleware to ServeMux to implement global logging. The complete sample code has been verified to run and is suitable for starting a small and medium-sized project. The extension suggestions include capturing status codes, supporting JSON logs and request ID tracking.

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac
