反射是什么?当我们的程序在运行时,需要动态的加载一些类这些类可能之前用不到所以不用加载到jvm,而是在运行时根据需要才加载,这样的好处对于服务器来说不言而喻,比如我们的项目底层有时是用mysql,有时用oracle,需要动态地根据实际情况加载驱动类,通过类的全类名让jvm在服务器中找到并加载这个类,根据需求来改变传入的参数。这时候就可以看到反射的好处了。

通过反射加载一个类,创建对象和调用方法:

//根据类的包名+类名加载一个类
Class<?> c = Class.forName("com.bwf.test.User");

Object o = c.newInstance();//默认调用了该类的无参构造方法来创建了对象

//根据参数类型找到相应的构造方法, 通过构造方法创建对象
c.getConstructor( new Class[]{String.class}).newInstance(new Object[]{"zhangsan"});

//动态获取类下面的属性
Field[] fields = c.getDeclaredFields();
for(Field field : fields){
System.out.println(field.getName());
}

//获取指定的方法
Method m = c.getDeclaredMethod("eat", new Class[]{String.class,int.class});

//调用指定的方法
Object result = m.invoke(o, new Object[]{"lisi",1});

转载于:https://www.cnblogs.com/nijunyang/p/7525414.html

反射(一)动态加载类相关推荐

  1. Java反射-静态/动态加载类

    title: Java反射-静态/动态加载类 date: 2019-05-28 18:50:00Java反射-静态/动态加载类 Class 类是对象,是java.lang.Class类的实例对象.任何 ...

  2. Java动态加载类(对反射的基本理解)

    目录 基本概念 演示 基本概念 这里演示下Java的动态加载类.因为在编译的时候,加载类是静态加载,运行时加载是动态加载. 在此我对反射有了如下的理解: 如果有一个class A,可以使用new A( ...

  3. Java利用反射动态加载类实战

    package com.web.common.utility.reflector; import java.io.Serializable; import java.lang.reflect.Cons ...

  4. Java运行时动态加载类之ClassLoader加载class及其依赖jar包

    需求场景是:通过ClassLoader动态加载外部class文件,class文件又依赖某个具体jar包,需要动态加载jar包,采用URLClassLoader. 1.xml配置文件 <?xml ...

  5. Java运行时动态加载类之ClassLoader

    需求场景:动态加载类ClassLoaderd,在xml文件中配置加载类名称和方法,: 一.准备 1)在D:\\tmp\\目录下配置a.xml文件: <?xml version="1.0 ...

  6. Java 动态加载类

    Class.forName("类的全称"); 不仅表示类的类类型,还代表了动态加载类 请大家区分编译.运行 编译时刻加载类时静态加载类.运行时刻加载类时动态加载类 编写一个Offi ...

  7. java动态加载类 框架_java运用RMI框架类的动态加载不成功

    最近在看<java网络编程精解>,第11章中用RMI动态加载类,可怎么试都不成功,求大神解答 1. 我先在C盘下启动了rmiregistry注册表,如果部署成功注册表应该会从codebas ...

  8. 使用forName动态加载类文件

    动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以在运行时再决定是否需要加载一 ...

  9. Java运行时动态加载类之URLClassLoader

    需求场景:通过URLClassLoader从jar文件中加载类并创建实例,可实现运行时动态加载 1.要加载的jar: 1)接口类IC package cn.fjs;public interface I ...

  10. python 反射和动态加载_Python的反射

    什么是反射 反射是一个很重要的概念,它可以把字符串映射到实例的变量或者实例的方法然后可以去执行调用.修改等操作.它有四个重要的方法: getattr 获取指定字符串名称的对象属性 setattr 为对 ...

最新文章

  1. 【冷知识】获取网页所有的监听事件类型、方法。请认准getEventListeners
  2. 添加service到SystemService硬件服务
  3. Windows环境 和 Linux环境下搭建Qt开发环境
  4. U盘安装centos7
  5. Qt4_改变形状的对话框
  6. 埃文科技教你如何验证IP地址定位的准确率
  7. 【数据结构实验一】线性表
  8. viewpage切换动画
  9. 2017知乎看山杯总结(多标签文本分类)
  10. 语法长难句——并列句
  11. 按键精灵脚本:采集鼠标当前所在坐标的颜色
  12. 解决RequestMapping写在类上页面跳转失败
  13. 中南大学python试卷_中南大学考研常见问题汇总
  14. 出租车系统java_基于WEB的JAVA出租车打车系统
  15. 购物网站 mysql设计_购物网站数据库设计
  16. 好用的办公邮箱是提高工作效率的第一步
  17. 目标检测网络指标mAP的测试的python实现
  18. c++语言截取字符串,详解C++ string常用截取字符串方法
  19. 【BEV】HDMapNet: An Online HD Map Construction and Evaluation Framework
  20. 用python画一个地球_用python做一个地球围绕太阳转的图形

热门文章

  1. Springboot @Validated和@Valid
  2. Ubuntu 14.04 desktop 不能安装 openssh-server解决方法
  3. SpingMVC 注解@RequestMapping、@SuppressWarnings、@Scheduled 定时器
  4. Java 面试——数据类型计算与拆箱装箱
  5. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_7_等待唤醒机制需求分析...
  6. java文件编译后,出现xx$1.class的原因
  7. C#复习笔记(3)--C#2:解决C#1的问题(泛型)
  8. 130242014066-王伟华-实验一
  9. 《出发吧一起》第二阶段个人总结——Day08
  10. 在SharePoint 2010中创建联系人Web数据库网站