01、Java反射机制概述

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象的称之为:反射。

1、动态语言

是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。

2、静态语言

与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。

  • Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制、字节码操作获得类似动态语言的特性。Java的动态性让编程的时候更加灵活!
  • Java反射机制提供的功能
    • 在运行时判断任意一个对象所属的类
    • 在运行时构造任意一个类的对象
    • 在运行时判断任意一个类所具有的成员变量和方法
    • 在运行时获取泛型信息
    • 在运行时调用任意一个对象的成员变量和方法
    • 在运行时处理注解
    • 生成动态代理
  • 反射相关的主要API
    • java.lang.Class:代表一个类
    • java.lang.reflect.Method:代表类的方法
    • java.lang.reflect.Field:代表类的成员变量
    • java.lang.reflect.Constructor:代表类的构造器

测试类

import org.junit.Test;public class ReflectionTest {//反射之前,对于Person的操作@Testpublic void test(){//1.创建类的对象Person p1 = new Person("jay",21);//2.调用对象,调用其内部的属性和方法p1.age = 15;System.out.println(p1.toString());p1.show();//在Person类的外部,不可以通过Person类的对象调用其内部私有的结构。//比如:name、showNation以及私有的构造器。}
}

Person类

package github;public class Person {private String name;public int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}private Person(String name) {this.name = name;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}public void show(){System.out.println("你好,我是												

java反射与动态代理相关推荐

  1. throwable四参构造_深入分析Java反射(四)-动态代理

    动态代理的简介 Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分 ...

  2. Java反射和动态代理

    反射 通过反射的方式Class.forName("com.ahu.Person")可以获取class对象的实例以及其中的属性.方法.构造函数等 动态代理 动态代理:在不修改原业务的 ...

  3. Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

    反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...

  4. 支撑Java框架的基础技术:泛型,反射,动态代理,cglib

    以Spring为例要想看明白他的源码需要彻底理解Java的一些基础技术泛型,反射同时对于一些高级技术例如动态代理,cglib和字节码技术也需要掌握,下面就按章节来一一说清楚这些技术的核心部分,最后手写 ...

  5. java底层 —反射、动态代理

    java底层 -反射.动态代理和注解 1. 反射介绍 1.1 反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2 java的反射机制 java的反射机制是指在程序运行状态中,给 ...

  6. 死磕java底层(三)—反射、动态代理和注解

    1.反射介绍 1.1反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2java的反射机制 java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法 ...

  7. 吃透Java中的动态代理

    动态代理在Java中是很重要的一部分,在很多框架中都会用到,如Spring中的AOP.Hadoop中的RPC等.为此在这把我对Java中的动态代理的理解分享给大家,同时写了一个模拟AOP编程的实例.( ...

  8. 通过反射创建动态代理对象(二)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 将"通过反射创建动态代理对象(一)"合二为一 二.代码说明 package staticimpo ...

  9. java 委托_动态代理:Java开发必学

    一句话概括:java 动态代理通过反射机制,可在不修改原代码的情况下添加新的功能,应用于多种场景,简单.实用.灵活,是 java 开发必学知识,本文将对动态代理使用进行详细介绍. 1. 引言 最近开发 ...

最新文章

  1. Webpack4 学习笔记 - 01:webpack的安装和简单配置
  2. 关于SQLServer2000中触发器的使用——多行数据提交
  3. php禁止伪造_php防止伪造的数据从URL提交方法
  4. 库洛游戏首次公开分享:《战双帕弥什》的动作打击感是怎么做出来的
  5. 产品认知:真正厉害的产品经理,都是“本质思维”的高手
  6. 给博客或站点加入百度统计
  7. 浅谈Nginx性能调优
  8. java 返回第k小的数_java – 给定n和k,返回第k个置换序列
  9. 【kafka】Kafka JMX监控报错 Failed to get broker metrics for BrokerIdentity
  10. 我的家庭私有云计划-6
  11. windows——JDK下载与安装及环境变量配置
  12. 74CMS 3.0任意文件写入漏洞
  13. java jdk运行_JDK如何运行
  14. 一个简单的Appium测试(Python语言)
  15. sealos2.0使用教程,最简单kubernetesHA方案
  16. Webug3.0-中级进阶-解题
  17. css压缩有啥好处呢?
  18. 奔驰S400豪华型升级后排电动腿托系统,提升后排乘坐舒适性
  19. 数据挖掘::实验一 WEKA分类
  20. 云计算介绍 tcp/ip协议介绍及配置

热门文章

  1. html5视频播放原理,HTML5 - 使用JavaScript控制video视频播放(自定义视频播放器)...
  2. 2023-2029年中国产业集群市场研究分析及战略咨询研究报告
  3. 【周末闲谈】什么是云计算?
  4. 是否停止运行此脚本?此页面上的脚本造成Internet Explore运行速度减慢
  5. 1688等电商平台API接口聚全
  6. android多语言切换失效
  7. CC65 开发FC/NES 游戏(三)使用摇杆
  8. 搭建Spring Boot
  9. kendoui grid lov增强
  10. php幸运盲盒抽奖程序源码