类是面向对象的灵魂,一切事物都可以以类来抽象。

在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);}
}

                                                                                                                                                                                                                                                                                                                                                                                                            

转载于:https://www.cnblogs.com/Cyning/p/3434207.html

[Java]java反射随笔相关推荐

  1. java 防止反射_如何防止JAVA反射对单例类的攻击?

    在我的上篇随笔中,我们知道了创建单例类有以下几种方式: (1).饿汉式; (2).懒汉式(.加同步锁的懒汉式.加双重校验锁的懒汉式.防止指令重排优化的懒汉式); (3).登记式单例模式; (4).静态 ...

  2. 【Java】反射( reflection)机制 详解

    目录 1. 定义 2. 用途(了解即可) 3. 反射的基本信息 4. 反射相关的类(重要) 4.1 Class类(反射机制的起源 ) 4.2 Class类中的相关方法(方法的使用方法在后边的示例当中) ...

  3. java 泛型反射_Java使用反射来获取泛型信息示例

    本文实例讲述了Java使用反射来获取泛型信息.分享给大家供大家参考,具体如下: 一 点睛 获得了Field对象后,就可以很容易地获得该Field的数据类型,即使用如下代码即可获得指定Field的类型: ...

  4. java初反射_初始 java 反射机制 (一)

    反射机制详解 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为j ...

  5. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

  6. Java的反射机制 工厂模式综合讲解【转载自51CTO】

    2019独角兽企业重金招聘Python工程师标准>>> Java的反射机制 工厂模式综合讲解 1.什么叫反射 Java.lang.reflect包下 正常情况下我们可以通过类实例化一 ...

  7. java反射机制(三)---java的反射和代理实现IOC模式 模拟spring

    IOC(Inverse of Control)可翻译为"控制反转",但大多数人都习惯将它称为"依赖注入".在Spring中,通过IOC可以将实现类.参数信息等配 ...

  8. [Java基础] 反射机制汇总

    引言 初学Java反射机制的时候,只是感觉很神奇,但是不知道学了该怎么用,所以过了一段时间就忘得差不多了:最近接触到了框架,在学习中遇到了反射,深深体会到了反射机制的神奇,回来复习了一下反射机制,写一 ...

  9. Java 利用反射实现C#的委托

    一, 观察者模式的缺点 在之前的博文的介绍过观察者模式了. 观察者模式可以让多个观察者同时观察1个被观察者. 也就说被观察者可以1次过执行所有观察者的update()方法. 再通俗d来讲, 就是多个观 ...

  10. sqlite字段是否存在_学习廖雪峰的JAVA教程---反射(访问字段)

    对任意的一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息. 我们先看看如何通过Class实例获取字段信息.Class类提供了以下几个方法来获取字段: Field getFie ...

最新文章

  1. Servlet(一)
  2. java getcolormodel_Java ColorModel.getTransparency方法代碼示例
  3. Facebook Docusaurus 中文文档 自定义页面
  4. ubuntu python版本切换_ubuntu18.04 python版本切换
  5. Python教程:自定义排序全套方案
  6. tensorflow常见函数
  7. python sftp_python中实现sftp
  8. cmake学习(二)常用变量和常用环境变量
  9. Java 排序(转)
  10. fabric8 java api,kubectl apply -f equivalent in fabric8 java api | 易学教程
  11. 也来谈一谈js的浅复制和深复制
  12. java模板导出excel_POI导出excel模板三种方式
  13. 【eNSP 华为模拟器】了解一下交换机原理和基础命令
  14. DELPHI 字符转16进制、16进制转字符
  15. 【软件工程】系统流程图——期末快速复习用
  16. TypeScript学习总结
  17. SpringBoot引入第三方SDK以及打包
  18. RTX3090 GPU环境配置
  19. Web 前端必会的 PhotoShop 技能
  20. 如何设置HttpClient请求的Content-Type标头?

热门文章

  1. 后Kubernetes时代的微服务
  2. Java NIO (十四)NIO 和 IO 的区别和适用场景分析
  3. 南海发展大数据产业 建设新型智慧城市
  4. rabbitmq的安装全过程
  5. Why does pthread_cond_signal not work?【转】
  6. java6:流程控制
  7. TCP/IP、Http的区别
  8. 在没有数据集的情况下使用数据表
  9. 如何培养编程所需要的逻辑思维?
  10. android怎样封装,如何封装属于自己的博客网站安卓APP 源码家园