else if 与反射invoke性能比较测试(用于servlet判断调用方法),从测试结果看,只有几个方法的时候直接用if else if比较快,第一次使用invoke的时候花费的时间比较长,但之后基本上一致,比较平稳。在100个方法以后invoke方法比else少一个数量级别的时间,不过差别都是在纳秒范围内。
但采用invoke有一个明显的优势就是增加新的方法的时候不需要写判断语句的代码,直接添加方法就可以了,可以节省很长一段else if 代码的判断和维护。
两次运行结果:
if method1用时:55147纳秒,0毫秒
invoke method1用时:227628纳秒,0毫秒
if method2用时:49518纳秒,0毫秒
invoke method2用时:52185纳秒,0毫秒
if method100用时:193578纳秒,0毫秒
invoke method100用时:41914纳秒,0毫秒
if method500用时:507870纳秒,0毫秒
invoke method500用时:42386纳秒,0毫秒
if method1000用时:496012纳秒,0毫秒
invoke method1000用时:44326纳秒,0毫秒
=====================================
if method1用时:48170纳秒,0毫秒
invoke method1用时:216665纳秒,0毫秒
if method2用时:50090纳秒,0毫秒
invoke method2用时:52676纳秒,0毫秒
if method100用时:195969纳秒,0毫秒
invoke method100用时:44236纳秒,0毫秒
if method500用时:497615纳秒,0毫秒
invoke method500用时:43714纳秒,0毫秒
if method1000用时:494152纳秒,0毫秒
invoke method1000用时:43538纳秒,0毫秒
=======================================
下面是测试代码:
http://code.google.com/p/coos/source/browse/trunk/coos/src/com/coos/util/TestCase.java
下面是实现的servlet接口代码:
http://code.google.com/p/coos/source/browse/trunk/coos/src/com/coos/util/GetData.java
注:javaeye本身的语法着色js导致浏览器运行过慢弹出提示框,点击是就不显示我的代码了,所以用googlecode的代码功能!
分享到:
相关推荐
3. **调用方法**:通过`Class.getMethod()`或`Class.getDeclaredMethod()`获取方法对象,然后通过`Method.invoke()`方法来调用该方法。这支持调用实例方法、静态方法等。 4. **访问和修改字段**:同样地,可以通过`...
- `if`、`else`、`for`、`while`: 控制流程的关键字,用于逻辑判断和循环。 - **面向对象** - `class`: 定义类的关键字。 - `Object`、`Instance`: 对象和实例的概念,`Object` 是所有类的父类。 - `state` ...
元注解是在其他注解上使用的注解,而反射则是Java语言中的一种特性,允许程序在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法。 首先,我们需要理解SpringMVC的核心概念。它基于Model-View-...
- 使用`Method`类的`invoke()`方法,需要先通过反射获取`Method`对象。 #### 23. 如何将数值型字符转换为数字(Integer,Double)? - 可以使用`Integer.parseInt(String s)`和`Double.parseDouble(String s)`等...
- **super()**: 是指父类构造器的引用,用于调用父类的构造方法或访问父类的成员。在子类构造器中使用 `super()` 可以调用父类的特定构造器,它必须是子类构造器的第一条语句。 - **this()**: 是指本类当前对象的...
- **方法的invoke()**:在运行时动态调用方法。 9. **注解(Annotation)**: - **预定义注解**:@Override、@Deprecated等的含义和作用。 - **自定义注解**:创建自定义注解并使用反射进行处理。 10. **Java ...
在实际应用中,可以在Servlet或Action中调用此方法,例如: ```java String docFilePath = request.getSession().getServletContext().getRealPath("/") + "uploads/document/a.doc"; boolean success = ...
了解如何声明和使用变量、控制流程结构(if-else、for、while)、创建和调用方法、以及理解和使用类、对象和接口。 2. **异常处理**:Java中的异常分为编译时异常和运行时异常,理解这两种异常的区别至关重要。熟练...
接着,我们使用Proxy.newProxyInstance方法创建一个代理对象,用于拦截HttpServletRequest的getParameter方法,并将获取的参数值重新编码为UTF-8。 在CharacterEncodingFilter类中,我们使用了 InvocationHandler ...
它可以用来拦截Action执行前后的方法调用,并且能够根据不同的需求进行定制化的逻辑处理,如验证用户输入、记录日志、事务管理等。 #### 二、实验环境 **2.1 MyEclipse** MyEclipse是一款集成开发环境(IDE),主要...
- **真分页**与**假分页**:在实际应用中,通常有两种分页方式:真分页是指每次只查询当前页的数据,而假分页则是先查询所有数据再进行分页展示。显然,真分页在大数据量的情况下更有效率。 - **性能优化**:在实现...
} else if (InvokeType.userDefined == type) { if (StringUtils.isBlank(listStyle)) { throw new ParamsRequiredException(PARAM_STYLE_LIST); } //列表样式模板路径 WEB-INF\t\cms_sys_defined\style_list\...
#### 步骤三:测试与验证 完成上述步骤后,我们需要测试自定义拦截器是否有效解决了中文乱码问题。可以通过向应用发送包含中文字符的请求,并检查响应结果来验证。 #### 总结 通过上述步骤,我们可以有效地利用...
invoke vt.调用 [in'vәuk]' ( invocation [,invәu'keiʃәn]) Iterator [java] 迭代器, 迭代程序 legal 合法的 ['li:gәl] log n.日志,记录 [lɒg] native (关键字) ?? ['neitiv] nested [java] 嵌套的 ['...
可以看到,Servlet 中的 FilterChain 是通过 Filter 配置类来管理 Filter 的,Filter 配置类中包含了 Filter 列表和 Servlet,达到在调用真正 Servlet 之前进行各种 Filter 逻辑。 Dubbo 中的 Filter Dubbo 中的...
当表单中有多个提交按钮时,可以通过为每个按钮设置不同的name属性值,然后在Action中通过`getParameters()`方法获取提交按钮的名称来判断哪个按钮被点击。 **示例代码**: ```java public String execute() { ...