反射机制

JAVA反射

天涯浪子 提交于 2020-03-08 16:54:24
Java反射 Java反射定义 Java反射优缺点 反射为什么慢,慢在哪? 反射技术主要组成 Java反射定义 指在Java程序运行过程中 对于给定的类对象(Class),可以获取这个Class对象,从而获得所有属性和方法; 对于给定的一个对象,能够调用他的任意一个属性和方法(包括被private修饰的属性和方法)。 这种动态获取类的内容以及动态调用对象的方法和获取属性的机制,就叫做JAVA的反射机制 Java反射优缺点 优点 增加程序的灵活性,避免将固定的逻辑程序写死在代码里 代码简洁,可读性强,可以提高代码复用率 缺点 在量大的情境下,相较于直接调用反射性能下降 存在内部隐患和安全隐患 public class Main { public static void main ( String [ ] args ) { String Key = "Word" ; long reflectStartTime = System . currentTimeMillis ( ) ; for ( int i = 0 ; i < 10000000 ; i ++ ) { Office office = getInstanceReflectByKey ( Key ) ; } long reflectEndTime = System . currentTimeMillis ( ) ; System

Java反射机制API

戏子无情 提交于 2020-03-08 12:07:01
实现 Java 反射机制的类都位于 java.lang.reflect 包中,java.lang.Class 类是 Java 反射机制 API 中的核心类。 java.lang.Class 类 java.lang.Class 类是实现反射的关键所在,Class 类的一个实例表示 Java 的一种数据类型,包括类、接口、枚举、注解(Annotation)、数组、基本数据类型和 void。Class 没有公有的构造方法,Class 实例是由 JVM 在类加载时自动创建的。 在程序代码中获得 Class 实例可以通过如下代码实现: // 1. 通过类型class静态变量 Class clz1 = String . class ; String str = "Hello" ; // 2. 通过对象的getClass()方法 Class clz2 = str . getClass ( ) ; 每一种类型包括类和接口等,都有一个 class 静态变量可以获得 Class 实例。另外,每一个对象都有 getClass() 方法可以获得 Class 实例,该方法是由 Object 类提供的实例方法。 Class 类提供了很多方法可以获得运行时对象的相关信息,下面的程序代码展示了其中一些方法。 public class ReflectionTest01 { public static void

谈谈:程序集加载和反射

寵の児 提交于 2020-03-07 06:49:26
最近一直都在看关于程序集加载和反射方面的资料, 所以在这里把我所学习到的东西记录下来,方便自己以后复习,也给园子里面不懂的朋友参考。 一、程序集的加载 JIT编译器器将IL代码编译成本地代码时, 会查看IL代码中引用了哪些类型。在运行过程中,JIT编译器利用程序集的TypeRef和AssemblyRef元数据表来确定哪一个程序集定义了所引用的类型,然后JIT编译器将对应程序集加载到AppDomain中,在内部,CLR使用System.Reflection.Assembly类的静态方法Load来尝试加载一个程序集。然而如果我们想动态加载一个程序集时,可以使用Assembly的Load方法来动态加载程序集,其中Assembly类中还提供了其他的加载程序集方法,有LoadFrom(string path), LoadFile(stringassemblyFile)等,具体方法的使用和解释可以参照MSDN中的介绍: http://msdn.microsoft.com/zh-cn/library/xbe1wdx9 二、反射机制 .net中反射在运行中过程中解析程序集中的元数据,获得类型中的成员(包括字段、构造器、方法、属性、事件等)信息。 动态加载一个程序集并获得类型中的成员 把下面的类放在一个类库工程中,并编译生成程序集(例如为ClassLibrary1.dll

vivo一面凉经

爷,独闯天下 提交于 2020-03-06 18:30:41
链接: https://www.nowcoder.com/discuss/112192 目录 1.手撕代码,二分查找,递归非递归 2.java反射机制,优点缺点 3.java线程同步,synchronized锁升级机制,synchronized lock区别 4.项目,感觉最难的一点,怎么解决之类的 5.看成绩单,问我成绩为什么比较差 6.java public private protected default 7.手撕代码,中序遍历,递归非递归 8.学校的一堆事,什么社团经历,最有成就感的事,最失败的事,优点缺点啥的 1.手撕代码,二分查找,递归非递归 采用非递归方式完成二分算法 public static int binarySearch(Integer[] srcArray,int des){ int low=0; int high=srcArray.length-1; while(low<=high){ int middle=(low+high); if(des==srcArray[middle]) return middle; else if(des<srcArray[middle]){ high=middle-1; }else{ low=middle+1; } } return -1; } 采用递归方式完成二分查找算法 int BinSearch(int Array[

反射型xss

柔情痞子 提交于 2020-03-05 12:16:06
注入的本质就是:把用户的输入的数据当作代码执行。 xss注入的关键:1、第一个是用户能够控制输入 2、原本程序要执行的代码,拼接了用户输入的数据 xss主要拼接的是什么? sql注入拼接的是操作数据库的sql语句。xss拼接的是网页的html代码。我们一般会拼接出合适的html代码去执行恶意的js语句。 xss能做什么? 盗取cooike、获取内网ip,等等。应为达到各种各样的效果需要比较复杂的代码,所以xss平台应哟个而生,{xsspt.com}xss平台大大方便了xss攻击,只需要引入一个平台就可以实现功能。 xss的类型 1、反射型xss(你提交了数据成功实现了xss。但是这是对你这次访问产生了影响,并非持久性攻击) 2、储存型xss(你提交了数据成功实现了xss。并且存入了数据库,别人访问这个页面的时候就会自动出发) 3、dom型xss(较复杂) 怎么检测是否存在xss? 1、一般方法是让浏览器弹窗(alert)经典的弹窗语句:<script>alert(5)</script> 2、一般证明xss是不是存在,就是在正常页面传参然后构建参数让他弹窗就是存在xss了 xss真的执行恶意代码的实际上是js语句,有三种类型 1、<script></script>(这个是定义Js的标签) 2、javascript:alert(1)经典代码<a href=JavaScript

C#基础系列——反射笔记

谁说我不能喝 提交于 2020-03-05 03:13:35
前言:上篇 C#基础系列——反射笔记 总结了下反射得基础用法,这章我们来看看C#的另一个基础技术——特性。 1、什么是特性:就博主的理解,特性就是在类的类名称、属性、方法等上面加一个标记,使这些类、属性、方法等具有某些统一的特征,从而达到某些特殊的需要。比如:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作、文件的操作等)经常使用try...catch。这个时候如果使用特性,就可以大大减少方法里面的try...catch的使用。你只需要定义一个专门捕捉异常的特性类ExceptionExAttribute,然后给这个特性类做些特殊处理,比如给它增加一个AOP拦截的功能(AOP拦截的方式很多,有兴趣可以搜搜看,园子里面很多类似的文章)。那么在可能出现异常的方法名称上面加上一个[ExceptionEx]特性标签,这个方法就具有自动捕捉异常的能力。还是加上官方定义: 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集、类型、方法、属性等)相关联。 特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性。 特性具有以下属性: 特性可向程序中添加元数据。 元数据是有关在程序中定义的类型的信息。 所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员。 可以添加自定义特性,以指定所需的任何附加信息。

Java——反射

谁说我不能喝 提交于 2020-03-05 01:35:56
文章目录 1、定义 2、反射机制的方法 1)、获取类对象 2)、获取类成员 获取类的构造方法 获取类的特定的构造方法 调用类的私有方法 调用类的私有字段,并修改值 3、Fastjson 将Java对象转化为JSON字符串 将JSON字符串转化为Java对象 注解符的使用 使用 ContextValueFilter 配置 JSON 转换 使用 NameFilter 和 SerializeConfig 1、定义 ​ java反射机制是说:在运行状态中,对于任意的一个类,我们都能知道它的所有属性和方法;对于任意的一个对象,我们都能够调用它的所有方法和得到所有属性。这种动态调用方法和动态获取属性的功能成为java语言的反射机制。 ​ 实际上,我们创建的每一个类都是Class对象,称之为类对象。 2、反射机制的方法 //创建一个类 package reflex ; public class Student { private int id ; private String name ; private String gender ; private String address ; public Student ( ) { } public Student ( String name ) { this . name = name ; } private Student ( String

吴裕雄--天生自然JAVA反射机制学习笔记:反射机制深入探究

梦想与她 提交于 2020-03-04 23:53:10
package org.lxh.demo15.invokedemo ; import java.lang.reflect.Array ; public class ChangeArrayDemo{ public static void main(String args[]) throws Exception{ int temp[] = {1,2,3} ;// 声明一整型数组 int newTemp[] = (int []) arrayInc(temp,5) ; // 重新开辟空间5 print(newTemp) ; System.out.println("\n-------------------------") ; String t[] = {"lxh","mldn","mldnjava"} ; String nt[] = (String [])arrayInc(t,8) ; print(nt) ; } public static Object arrayInc(Object obj,int len){ Class<?> c = obj.getClass() ; Class<?> arr = c.getComponentType() ; // 得到数组的 Object newO = Array.newInstance(arr,len) ; // 开辟新的大小 int co =

吴裕雄--天生自然JAVA反射机制学习笔记:动态代理

て烟熏妆下的殇ゞ 提交于 2020-03-04 23:49:46
class Person{}; public class ClassLoaderDemo{ public static void main(String args[]){ Person stu = new Person() ; System.out.println("类加载器:" + stu.getClass().getClassLoader().getClass().getName()) ; } }; import java.lang.reflect.InvocationHandler ; import java.lang.reflect.Proxy ; import java.lang.reflect.Method ; interface Subject{ public String say(String name,int age) ; // 定义抽象方法say } class RealSubject implements Subject{ // 实现接口 public String say(String name,int age){ return "姓名:" + name + ",年龄:" + age ; } }; class MyInvocationHandler implements InvocationHandler{ private Object obj ;

吴裕雄--天生自然JAVA反射机制学习笔记:工厂设计模式

淺唱寂寞╮ 提交于 2020-03-04 23:48:57
package org.lxh.demo15.factorydemo01 ; interface Fruit{ public void eat() ; // 吃水果 } class Apple implements Fruit{ public void eat(){ // 覆写eat()方法 System.out.println("** 吃苹果"); } }; class Orange implements Fruit{ public void eat(){ System.out.println("** 吃橘子") ; } }; class Factory{ public static Fruit getInstance(String className){ Fruit fruit = null ; try{ fruit = (Fruit)Class.forName(className).newInstance() ; }catch(Exception e){ e.printStackTrace() ; } return fruit ; } }; public class FactoryDemo01{ public static void main(String args[]){ Fruit f = Factory.getInstance("org.lxh.demo15