java 反射机制

反射机制简介 参考地址

  1. 什么是反射机制

    反射机制指程序在运行时能够获取自身的信息。在java中只要给定类的名字,就可以通过反射机制获得类的所有信息
  2. 反射机制的优缺点
    1. 首先了解一下动态和静态的概念
    2. 静态编译:在编译时确定类型,绑定对象,即通过
    3. 动态编译:运行时确定类型,绑定对象。
    4. 反射机制的优点:

      可以实现动态创建对象和编译,体现出很大的灵活性
    5. 反射机制的缺点:

      对性能是有影响的,使用反射基本上是一种解释操作,这种操作总是慢于只直接执行相同的操作。
  3. 利用反射机制能获得什么信息

    利用反射机制可以获得类中的所有信息,不过前提是得知道类的对象

反射机制的一些相关的代码

获取运行时类的对象的几种方法

import java.lang.reflect.Constructor;
import java.util.Arrays; import org.junit.Test;
/**
*定义一个Worker类来作为示例
*/
class Worker{
String name;
int age;
int salary;
Worker() { } Worker(String name, int age, int salary) {
this.name = name;
this.age = age;
this.salary = salary;
} void show(){
System.out.println("姓名" + name);
System.out.println("年龄" + age);
} public String toString() {
return "Worker [name=" + name + ", age=" + age + ", salary=" + salary
+ "]";
} } /**
*通过反射机制获取运行时类的对象的几种方法示例
*/
public class TestReflection {
public static void main(String[] args) throws Exception {
// 1.通过对象调用getClass方法得到运行时类的对象
Worker w1 = new Worker("Jhon", 20, 20000);
Class<Worker> clazz1 = (Class<Worker>) w1.getClass();
Worker w2 = (Worker)(clazz1.newInstance());
w2.show();
System.out.println(clazz1); // 2.通过类来获取运行时类的对象
Class clazz2 = Worker.class;
System.out.println(clazz2); // 3.通过Class.forName(String name)获得运行时类的对象
Class clazz3 = Class.forName("Worker"); //注:如果worker类不在缺省包中,括号里面要以包名开头
System.out.println(clazz3); // 4.通过类的加载器来加载运行时类的对象
Class clazz4 = ClassLoader.getSystemClassLoader().loadClass("Worker"); //注:如果worker类不在缺省包中,括号里面要以包名开头
System.out.println(clazz4); // 得到构造方法并调用对应对象的方法
Constructor constructor1 = clazz4.getDeclaredConstructor();
(clazz1.cast(constructor1.newInstance())).show(); Constructor constructor2 = clazz1.getDeclaredConstructor(String.class, int.class, int.class);
Object obj = constructor2.newInstance("Tom",20,20000);
System.out.println(obj); Constructor[] constructors = clazz2.getDeclaredConstructors();
System.out.println(Arrays.toString(constructors));
} }

java反射的通用代码

通过上面的代码可以获得 运行时类的对象,然后下面使用运行时类的对象来构造一个反射工具类,通过下面这个类 可以利用反射机制实例化该类的对象,设置对象的属性并调用对象的方法

import java.lang.reflect.Field;
import java.lang.reflect.Method;
//反射工具类
class ReflectionUtils{
//通过运行时类得到相应的对象
public static Object getObject(Class clazz) throws Exception{
//调用对应类的空构造方法,所以传进来的类的对象对应的类一定得有空的构造方法
return clazz.newInstance();
} //设置对象属性
public static void setField(Object obj,String name,Object value) throws Exception{
Class clazz = obj.getClass();
Field field = clazz.getDeclaredField(name);
field.setAccessible(true);
field.set(obj, value);
} //调用对象的方法
public static void setMethod(Object obj,String name,Object...args) throws Exception{
Class clazz = obj.getClass();
//定义Class数组来保存参数对应的类,得到方法时,要用到
Class [] clazzs = new Class[args.length];
for(int i=0;i<args.length;i++){
clazzs[i] = args[i].getClass();
}
Method method = clazz.getDeclaredMethod(name, clazzs);
method.invoke(obj, args);
}
}

本博客是根据上课老师讲的知识与网上的资料总结得来的,如需转载请注明出处:http://www.cnblogs.com/zhuchenglin/p/8005559.html

java反射机制的简单使用的更多相关文章

  1. java反射机制的简单介绍

    参考博客: https://blog.csdn.net/mlc1218559742/article/details/52754310 先给出反射机制中常用的几个方法: Class.forName (& ...

  2. (转)java反射机制及简单工厂模式

    第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ publi ...

  3. Java反射机制的简单学习

    今天看了一下Java的反射机制,就此记录一下. 首先,我们要先了解一下什么是反射? 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力. JAV ...

  4. 利用Java反射机制优化简单工厂设计模式

    之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...

  5. Java反射机制的简单应用

    一直感觉java的反射机制非常强大,可是可用的地方不多.在android学习的时候.一直想实现挂断电话的功能,可是系统并没有提供开放的api接口,看了一下网上使用反射机制来实现该功能,确实非常强大,非 ...

  6. Java -- 浅入Java反射机制

    1,Java 反射是Java语言的一个很重要的特征,它使得Java具体了"动态性". Java 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类. 在运行时构造任意一 ...

  7. java反射机制简单实例

    目录 Java反射 简单实例 @(目录) Java反射 Java语言允许通过程序化的方式间接对Class进行操作.Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通 ...

  8. Java反射机制剖析(三)-简单谈谈动态代理

    通过Java反射机制剖析(一)和Java反射机制剖析(二)的学习,已经对反射有了一定的了解,这一篇通过动态代理的例子来进一步学习反射机制. 1.     代理模式 代理模式就是为其他对象提供一种代理来 ...

  9. Java反射机制 —— 简单了解

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

随机推荐

  1. 点评cat系列-应用集成

    ========================消息的基本属性========================消息的几个属性:type: 定义消息的 category, 比如 SQL 或 RPC 或 ...

  2. 【js课设】电子画板01

    这学期web开发课的课设选了电子画板课题.(人家本来想做富文本编辑器的嘛然鹅老师在第二版里把这题删掉了。゚ヽ(゚´Д`)ノ゚。) 主要考虑的有[界面美观][画笔类型][画布分层]这三个点了. [界面美 ...

  3. CemtOS7更改yum网易 阿里云的yum源。

    一,鉴于用国外的Yum源,速度比较慢,所以想到将国外的yum源,改为国内的Yum源,著名的有网易 阿里云源.如何更改呢? 二,更改yum源为网易的. 首先备份/etc/yum.repos.d/Cent ...

  4. TCP/IP教程

    一.TCP/IP 简介 TCP/IP 是用于因特网的通信协议. 通信协议是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信. 什么是 TCP/IP? TCP/IP 是供已连接因特 ...

  5. 有了GPRS为什么还要LoRa和NB-IoT?【转】

    转自:https://blog.csdn.net/i_am_Banmei2/article/details/81869724 与其说是GPRS和NB-IoT的比较,不如说是传统网络与新兴网络的比较,我 ...

  6. TCP-IP详解笔记7

    TCP-IP详解笔记7 TCP: 传输控制协议(初步) 使用差错校正码来纠正通信问题, 自动重复请求(Automatic Repeat Request, ARQ). 分组重新排序, 分组复制, 分组丢 ...

  7. 搬运,B站up主『凉风有性胖次君』日日日日日日日日日日在校园

    这个视频超有毒,简直丧心病狂,我竟无言以对,凉风是有多大的耐性,搜集了这么多元素,哈哈哈~~~赶紧搬运,怕哪天B站都给封了 也就是说世界本来喜欢的是言叶,但是言叶爱上了一直在电车上暗恋她的诚哥,于是世 ...

  8. 1.2低级线程处理API

    并行扩展库相当有用,因为它允许使用更高级的抽象——任务,而不必直接和线程打交道.但有的时候,要处理的代码是在TPL和PLINQ问世(.NET4.0)之前写的.也有可能某个编程问题不能直接使用它们解决, ...

  9. JS函数可以再添加属性(包括方法)

    1 前言 JS函数可以再添加属性(包括方法),这个有点有趣,记录一下. 2 代码 <!DOCTYPE html> <html> <head> <title&g ...

  10. celery 大量消息的分布式系统 定时任务

    Celery 1.什么是Celery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 https://www.jia ...