[Java]java反射随笔
类是面向对象的灵魂,一切事物都可以以类来抽象。
在java使用过程中,我们可能会经常用到一个反射的知识,只是别人都封装好的,如jdbc的加载驱动类有一句Class.for(“…jdbc…”).newInstance.当然框架也是离不开了反射,spring能这么方便也不例外。
最新项目中需要再底层库(常用的操作,汇聚的库)用到应用库(在底层库上根据需求新建的库)中的一个类,本来想直接把这个类放到底层库里,一看,需要改动的太大,于是乎就想到了反射。
至于反射,我们不得不提一个一个类那就是Class(不是class),位置为java.lang.Class。这是他的api中一些解释。

闲话少说,针对刚才的问题怎么做呢?
我们要知道需要传进来的类名吧,我们需要类里面的方法吧。 怎么获取呢?
类么,我们可以直接来设置:
Class a = T.class;
怎么获取方法呢,哈哈,忘了刚才的APi了么?

可以获取函数,属性之类等等。
获取函数:
public static Method getMethonName(Class<?> clazz,String methonName,Class<?>[] paramType) throws NoSuchMethodException, SecurityException {
Method methon = null;
if(paramType == null)
methon = clazz.getMethod(methonName,null);
methon = clazz.getMethod( methonName, paramType);
L.p(methonName);
return methon;
}
来解释下,如T中有个函数print(String str,int b),获取这个函数呢,可以通过以上函数来传参数:
Class<?> clazz 对应的就是T(记得带着包名)
methon 就是字符”print”,
Class<?>[] paramType就是那个括号里对应的参数java.lang.String和int.class
Method method = getMethonName(a, "print", new Class<?>[] {
int.class, String.class });
函数的调用
Method method = getMethonName(a, "print", new Class<?>[] {
int.class, String.class });
Object o = a.newInstance();
method.invoke(o, 1, "helllo");
注意事项
1 没有参数的就直接将paramType置为null
2 静态函数需要 Method method = clazz.getMethod(methodName, pramTypes)
附下使用到的代码:
package com.simple; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import com.cyning.log.L; public class TestReflect { public static void main(String[] args) { Class a = T.class; Method[] methons = a.getMethods();
// for(Method m:methons){
// L.p(m.getName());
// L.p(m.getReturnType().toString());
// m.setAccessible(true);
// }
try {
Method method = getMethonName(a, "print", new Class<?>[] {
int.class, String.class }); Object o = a.newInstance();
method.invoke(o, 1, "helllo"); } catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
catch (InstantiationException | IllegalAccessException
| IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
} } public static Method getMethonName(Class<?> clazz, String methonName,
Class<?>[] paramType) throws NoSuchMethodException,
SecurityException {
Method methon = null;
if (paramType == null)
methon = clazz.getMethod(methonName, null);
methon = clazz.getMethod(methonName, paramType);
L.p(methonName);
return methon;
} } class T {
public void print(int a, String str) { System.out.println(a + str);
}
}
[Java]java反射随笔的更多相关文章
- JAVA的反射理解
1----------------------------反射的概念----------------------------------------------- JAVA的反射机制是在运行状态中,对 ...
- java的反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制. ...
- iOS运行时编程(Runtime Programming)和Java的反射机制对比
运行时进行编程,类似Java的反射.运行时编程和Java反射的对比如下: 1.相同点 都可以实现的功能:获取类信息.属性设置获取.类的动态加载(NSClassFromString(@“clas ...
- Java 类反射机制分析
Java 类反射机制分析 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某 ...
- java的反射机制
一.java的反射机制浅谈 最近研究java研究得很给力,主要以看博文为学习方式.以下是我对java的反射机制所产生的一些感悟,希望各位童鞋看到失误之处不吝指出.受到各位指教之处,如若让小生好好感动, ...
- Java:反射
初识Java反射机制: 从上面的描述可以看出Java的反射机制使得Java语言可以在运行时去认识在编译时并不了解的类/对象的信息,并且能够调用相应的方法或修改属性的值.Java反射机制的核心就是允许在 ...
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
一.Java的反射机制 每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图: 其中
- java笔记--反射进阶之总结与详解
一.反射进阶之动态设置类的私有域 "封装"是Java的三大特性之一,为了能更好保证其封装性,我们往往需要将域设置成私有的, 然后通过提供相对应的set和get方法来操作这个域.但是 ...
- java笔记--反射机制之基础总结与详解
一.反射之实例化Class类的5种方式: java的数据类型可以分为两类,即引用类型和原始类型(即基本数据类型). 对于每种类型的对象,java虚拟机会实例化不可变的java.lang.Class对象 ...
- Java中反射的三种常用方式
Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...
随机推荐
- leetcode@ [327] Count of Range Sum (Binary Search)
https://leetcode.com/problems/count-of-range-sum/ Given an integer array nums, return the number of ...
- 第二百六十七天 how can I 坚持
晚上有点小郁闷,小纠结,感觉不应该买房,不知道什么吸引着我一定要买呢,曾经坚持不买房的我,为什么成了这个样子. 搞不懂啊. 元旦就要就看房了, 如果真的要买了,明年的压力就会很大了. 经济到底会成为啥 ...
- Web Service学习之六:CXF解决无法处理的数据类型
CXF不能够处理像Map复杂的数据类型,需要单独转换处理. 总体思路:创建一个转换器和一个对应的可以处理的数据结构类型,将不能处理的类型转换成可以处理的类型: 步骤: 一.创建一个可以处理的类型 举例 ...
- 利用red5搭建一个简单的流媒体直播系统
http://blog.sina.com.cn/s/blog_51396f890102exmz.html 一.red5安装.设置. 这个过程就不多说了,参见http://blog.csdn.net/l ...
- HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)
Lucky7 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ...
- thymeleaf的url属性
一.使用表达式形式:@{...} 例如: <a th:href="@{http://localhost:8080/gtvg/order/details}">view&l ...
- codeforces 651B Beautiful Paintings
B. Beautiful Paintings time limit per test 1 second memory limit per test 256 megabytes input standa ...
- codeforce 621A(水题)
A. Wet Shark and Odd and Even time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- [iOS基础控件 - 6.12.4] NavigationController vs TabBarController
A.属性 1. Item NavigationController: navigationItem (不需要创建) title rightBarButtonItems/ rightBarButtonI ...
- ecshop后台限制IP登录
ecshop是开源系统,所以难免会有漏洞 黑客攻击网站,往往是通过漏洞获取后台管理员权限,然后再做一些破坏 如果我们在后台文件里限制指定的IP才能登录后台,就相对安全多了 下面给出大家解决方案: ...