反射机制

Java基础——浅析反射

梦想的初衷 提交于 2020-01-08 02:10:51
目录 一、前言 二、字节码对象 2.1 Java反射机制中获取字节码对象 2.2 Java虚拟机中对于某一个类只保留一份字节码对象 2.3 小结 三、使用字节码对象获取构造器进而新建对象 3.1 从字节码对象到构造器 3.2 使用字节码对象获取构造器 3.3 使用获取到的构造器新建对象 3.4 小结 四、使用字节码对象获取方法进而调用方法 4.1 从字节码对象到方法调用 4.2 字节码对象获取方法并调用,无返回值,返回值为void 4.3 字节码对象获取方法并调用,有返回值,返回值为String 4.4 字节码对象获取static方法并调用,无返回值,返回值为void 4.5 字节码对象获取static方法并调用,有返回值,返回值为String 4.6 演示参数列表为可变参数(数组)时的情况 4.7 小结 五、小结 一、前言 官方解释:Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within

当扩展方法遇上反射

巧了我就是萌 提交于 2020-01-05 05:48:31
类型成员的 可访问性 (Accessibility)的作用,就是控制类型成员对外的可见性。 C#支持5种可访问性修饰符:public,private,internal,protected,protected internal,其中protected internal对应于CLR中的Family or Assembly,另外CLR还支持Family and Assembly的可访问性,只是C#不支持。 反射(Reflection) 是一种在运行时提供类型发现和使用的机制,利用反射机制调用类型成员也称为晚期绑定(Late Binding)。 扩展方法 是.Net3.0开始C#编译器提供的语法糖:他允许你定义一个静态方法,并用实例方法的语法调用它。编译器在内部对扩展方法应用ExtensionAttribute特性,这个特性是在System.Core程序集中定义的,所以定义扩展方法需要引用该程序集。 下面我将通过使用扩展方法和反射演示一种打破对象封装的方法,至少语法看上去如此:) 首先我构建一个封闭的类Class1 public sealed class Class1{ private void CallPrivateMethod() { Console.WriteLine("Private method."); } public void CallPublicMethod() {

Unity3D游戏GC优化总结---protobuf-net无GC版本优化实践

▼魔方 西西 提交于 2020-01-05 04:56:02
一  protobuf-net优化效果图   protobuf-net是Unity3D游戏开发中被广泛使用的Google Protocol Buffer库的c#版本,之所以c#版本被广泛使用,是因为c++版本的源代码不支持Unity3D游戏在各个平台上的动态库构建。它是一个网络传输层协议,对应的lua版本有两个可用的库:一个是proto-gen-lua,由tolua作者开发,另外一个是protoc,由云风开发。protobuf-net在GC上有很大的问题,在一个高频率网络通讯的状态同步游戏中使用发现GC过高,所以对它进行了一次比较彻底的GC优化。下面是优化前后的对比图: protobuf-net优化前GC和性能效果图 protobuf-net优化后GC和性能效果图 二  Unity3D游戏GC优化概述   有关Unity3D垃圾回收的基本概念和优化策略Unity官网有发布过文章: Optimizing garbage collection in Unity games 。这篇文章讲述了Unity3D垃圾回收机制,和一些简单的优化策略,讨论的不是特别深入,但是广度基本上算是够了。我罗列一下这篇文章的一些要点,如果你对其中的一些点不太熟悉,建议仔细阅读下这篇文章:   1、C#变量分为两种类型:值类型和引用类型,值类型分配在栈区,引用类型分配在堆区,GC关注引用类型   2

Java反射机制详解

无人久伴 提交于 2020-01-04 07:04:13
转自:http://www.cnblogs.com/lzq198754/p/5780331.html java 反射 定义 功能 示例 概要: Java反射机制详解 | | 目录 1 反射机制是什么 2 反射机制能做什么 3 反射机制的相关API · 通过一个对象获得完整的包名和类名 · 实例化Class类对象 · 获取一个对象的父类与实现的接口 · 获取某个类中的全部构造函数 - 详见下例 · 通过反射机制实例化一个类的对象 · 获取某个类的全部属性 · 获取某个类的全部方法 · 通过反射机制调用某个类的方法 · 通过反射机制操作某个类的属性 · 反射机制的动态代理 4 反射机制的应用实例 · 在泛型为Integer的ArrayList中存放一个String类型的对象。 · 通过反射取得并修改数组的信息 · 通过反射机制修改数组的大小 · 将反射机制应用于工厂模式 1 反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 2 反射机制能做什么 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法;

Java反射机制详解

白昼怎懂夜的黑 提交于 2020-01-04 07:03:16
转http://www.cnblogs.com/lzq198754/p/5780331.html java 反射 定义 功能 示例 概要: Java反射机制详解 | | 目录 1 反射机制是什么 2 反射机制能做什么 3 反射机制的相关API · 通过一个对象获得完整的包名和类名 · 实例化Class类对象 · 获取一个对象的父类与实现的接口 · 获取某个类中的全部构造函数 - 详见下例 · 通过反射机制实例化一个类的对象 · 获取某个类的全部属性 · 获取某个类的全部方法 · 通过反射机制调用某个类的方法 · 通过反射机制操作某个类的属性 · 反射机制的动态代理 4 反射机制的应用实例 · 在泛型为Integer的ArrayList中存放一个String类型的对象。 · 通过反射取得并修改数组的信息 · 通过反射机制修改数组的大小 · 将反射机制应用于工厂模式 1 反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 2 反射机制能做什么 反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对象的方法;

Java反射基础

末鹿安然 提交于 2020-01-04 06:57:29
Java反射机制定义   Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 用一句话总结就是反射可以实现在运行时可以知道任意一个类的属性和方法。 反射机制的优点与缺点 为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念 静态编译:在编译时确定类型,绑定对象,即通过。 动态编译:运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的藕合性。 优点 可以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现该功能。 缺点 对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。

【java提高】---java反射机制

若如初见. 提交于 2020-01-04 06:57:05
java反射机制 一、概述 1、什么是反射机制 反射机制是 在运行状态 中 ,对于任意一个类,都能够知道这个类的所有属性和方法 ; 对于任意一个对象,都能够调用它的任意一个方法和属性 ;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 2、反射机制能做什么 反射机制主要提供了以下功能: 1) 在运行时判断任意一个对象所属的类; 2) 在运行时构造任意一个类的对象; 3) 在运行时判断任意一个类所具有的成员变量和方法; 4) 在运行时调用任意一个对象的方法; 5) 生成动态代理。 3、反射的优点和缺点 为什么要用反射机制?直接创建对象不就可以了吗,这就涉及到了动态与静态的概念: 静态编译 :在编译时确定类型,绑定对象,即通过。 动态编译 :运行时确定类型,绑定对象。动态编译最大限度发挥了java的灵活性,体现了多态的应用,有以降低类之间的藕合性。 一句话, 反射机制的优点就是可以实现动态创建对象和编译,体现出很大的灵活性 ,特别是在J2EE的开发中它的灵活性就表现的十分明显。 比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如 这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新, 而采用反射机制的话

反射(6)程序集加载上下文

醉酒当歌 提交于 2020-01-04 03:13:57
1. 四种程序集加载到上下文及优缺点: 1) 默认加载上下文 加载上下文包含通过探测全局程序集缓存、主机程序集存储区(如果承载运行时)以及应用程序域的 ApplicationBase 和 PrivateBinPath 所找到的程序集。比如 Load() 使用程序集标识的重载。(探测规则请参见: 《(5)CLR 运行时探测程序集引用的步骤》 ) 使用默认加载上下文具有以下缺点: a) 加载到其他上下文中的依赖项不可用。 b) 不能将探测路径外部的位置的程序集加载到默认加载上下文中。 2) 加载位置上下文 可以从未位于应用程序路径下(并因此未包含在探测中)的某个路径加载程序集。加载位置上下文允许从该路径查找和加载依赖项,因为路径信息由上下文维护。 此上下文中的程序集可以使用加载到默认加载上下文中的依赖项。 通过使用 Assembly.LoadFrom 方法或按路径加载的其他方法之一来加载程序集具有以下缺点: a) 如果已加载一个具有相同标识的程序集,则即使指定了不同的路径, LoadFrom 仍返回已加载的程序集。 b) 如果用 LoadFrom 加载一个程序集,随后默认加载上下文中的一个程序集尝试按显示名称加载同一程序集,则加载尝试将失败。对程序集进行反序列化时,可能发生这种情况。 c) 如果用 LoadFrom 加载一个程序集,并且探测路径包括一个具有相同标识但位置不同的程序集

第15章 反射

我怕爱的太早我们不能终老 提交于 2020-01-04 03:03:27
第15章 反射 反射的概念 JAVA反射机制是在 运行 状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 我们创建对象的方式: Date date = new Date(); 在编译阶段类型是确定的; 反射可以提供运行期创建对象的方式. 客车: 在车站里载人, 静态的; 运行期是客车在路上正在运行: 上个人. java程序如何在运行期创建对象并调用方法, 调用方法才可以获取对象的功能. 反射在java的框架中都得到深入的使用, mybatis,Spring 核心框架技术都是基于反射的技术. 反射的基础 从哪里开始进行反射的操作? 生活中反射的意思: 镜子可以反射出对象的信息: 张书峰站在镜子面前可以反射出张书峰的信息: 身高, 性别, 眨眼(动作). 我们要有一个镜子, 第二要有 反射的对象 . 镜子是最关键的东西, 回到程序: 我们发现所有的java程序都由类组成的. 镜子要能够描述类的信息.有一个类叫Class就是一面镜子. There is a class named Class. 反射的对象 package com . hanker . reflection ; import java . io . Closeable ; import

JAVA自定义注解

坚强是说给别人听的谎言 提交于 2020-01-03 20:08:49
一.名词解释 Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。 但是这种解释方式,貌似不太容易理解!用名词解释名词,这就是扯淡!所以不妨用下面的一种方式,来更好的解释这个名词的意思! 可以把JAVA注解理解为 标签 什么是标签?就是一个标记!比如 吃的,这就是一个标签 ,在你想到 老婆饼的时候,脑子里的第一个印象就是 吃的!那么吃的就是这个老婆饼的标签! 二、注解能够干什么呢? 注解能够解决很多场景下的 冗余代码的编写 简化各类配置文件 等等,他通常都是和JAVA反射机制一起使用,两者能够实现开发中很多功能,使很多冗余的代码结构变的更加简单明了! 注解比较常用的场景:开发一个工具类、记录操作日志、自定义鉴权操作、需要某类型的对象,做一些固定的事…等等 三、自定义注解的定义 import java . lang . annotation . * ; /** * @program: byit-myth-job->MyAnnotation * @description: 自定义注解 * @author: huangfu * @date: 2019/12/2 10:01 **/ @Documented @Retention (