### 反射小程序知识点解析 #### 一、反射基本概念 反射是Java提供的一种能够在运行时分析类和对象的能力。通过反射,程序可以获取到类的信息(如类名、属性、方法等),并可以直接创建对象、调用方法、访问属性等。这种能力使得程序更加灵活多变。 #### 二、反射的用途 1. **动态加载类**:可以在程序运行过程中动态地加载类,扩展程序功能。 2. **调用类的方法或属性**:可以在不知道具体实现细节的情况下调用类的方法或访问其属性。 3. **框架开发**:很多Java框架如Spring、Hibernate等都大量使用了反射技术来实现其功能。 4. **单元测试**:在进行单元测试时,可以通过反射直接调用被测试类中的私有方法。 #### 三、反射示例代码分析 ##### 1. `Test` 类分析 ```java public class Test { public static void main(String[] args) { try { Method m = Class.forName("com.User").getMethod("getPf", int.class); Object[] oo = new Object[1]; oo[0] = new Integer(20); Object o = m.invoke(Class.forName("com.User").newInstance(), oo); System.out.println(o); } catch (Exception e) { e.printStackTrace(); } } } ``` - **核心方法**: - `Class.forName("com.User")`:获取`User`类的`Class`对象。 - `getMethod("getPf", int.class)`:获取`User`类中的`getPf`方法,该方法接受一个`int`类型的参数。 - `invoke`:调用`getPf`方法,并传入参数`20`。 ##### 2. `User` 类分析 ```java public class User { public int getNum() { return 100; } public int getPf(int i) { return i * i; } } ``` - **方法解释**: - `getNum()`:返回一个固定值`100`。 - `getPf(int i)`:接受一个整型参数`i`,返回`i`的平方。 ##### 3. `Demo` 类分析 ```java public class Demo { public static void main(String[] args) { try { Test test = (Test) Class.forName("com.Test").newInstance(); Class c = Class.forName("com.Test"); Method m = c.getDeclaredMethod("getNum", int.class); Object o = m.invoke(Class.forName("com.Test").newInstance(), new Object[]{new Integer(10)}); System.out.println(o); } catch (Exception e) { e.printStackTrace(); } } } ``` - **核心方法**: - `Class.forName("com.Test")`:获取`Test`类的`Class`对象。 - `newInstance()`:根据`Class`对象创建`Test`类的一个新实例。 - `getDeclaredMethod("getNum", int.class)`:获取`Test`类中的`getNum`方法,该方法接受一个`int`类型的参数。 - `invoke`:调用`getNum`方法,并传入参数`10`。 ##### 4. `Test` 类的第二个定义分析 ```java public class Test { public int i = 30; public int getNum(int t) { return t * t; } public void getNum() { System.out.println("ok"); } } ``` - **方法解释**: - `i`:一个公有的实例变量。 - `getNum(int t)`:接受一个整型参数`t`,返回`t`的平方。 - `getNum()`:一个无参的方法,仅打印字符串`"ok"`。 #### 四、反射的关键API - **Class**: 代表一个类。 - **Constructor**: 代表一个构造器。 - **Field**: 代表类的成员变量。 - **Method**: 代表类的方法。 #### 五、总结 反射是Java语言的重要特性之一,它为程序提供了强大的灵活性和扩展性。通过上述代码示例,我们可以看到如何使用反射来动态地获取类的信息以及如何通过反射调用类的方法。理解和掌握反射对于深入学习Java编程有着重要的意义。






















import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) {
try {
// Method m = Class.forName("com.User").getMethod("getNum");
// Object o = m.invoke(Class.forName("com.User").newInstance());
Method m = Class.forName("com.User").getMethod("getPf", int.class);
Object[] oo = new Object[1];
oo[0] = new Integer(20);
Object o = m.invoke(Class.forName("com.User").newInstance(), oo);
System.out.println(o);
// System.out.println(o==null);
} catch (Exception e) {
e.printStackTrace();}}}
class User {
public int getNum() {
return 100;}
public int getPf(int i) {
return i * i;}}
package com;
import java.lang.reflect.Method;
public class Demo {
public static void main(String[] args) {
try {Test test = (Test)Class.forName("com.Test").newInstance();
//System.out.println(test.getNum(10));
Class c = Class.forName("com.Test");
//Method[] m = c.getMethods();
//for(Method mm : m){


- 粉丝: 757
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于MATLAB的数字通信系统仿真方案设计书.doc
- 大数据集群-hadoop的安全防护.docx
- 普通高中计算机信息安全实践教学研究.docx
- 计算机网络信息安全及对策.doc
- 简论信息化对社会经济的影响.docx
- 论大数据下企业财务会计向管理会计的转型.docx
- 中小型企业实施网络精准营销的方法研究-上下文推广.docx
- 虚拟化技术在计算机机房管理中的应用策略分析.docx
- 基于网络化的职业英语教学模式探索.docx
- 智能家居防盗报警系统设计方案-智建社区.docx
- PLC的花样喷泉控制系统设计方案PLC的花样喷泉控制.doc
- VB程序设计第四章-基本的控制结构.ppt
- SCLCD控制器控制TFT彩屏接口设计.ppt
- 单片机控制无刷直流电机驱动系统设计方案新.doc
- 实验室管理经验交流材料信息与通信工程科技专业资料.ppt
- 模糊层次分析法在计算机网络安全评价中的运用.doc


