Java基础-反射机制

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2020-11-09 15:59 被阅读0次

上一篇 <<<设计模式总览
下一篇 >>>代理模式(Proxy Pattern)


1.反射机制获取类的三种方法

//第一种方式:  
Classc1 = Class.forName("Employee");  
//第二种方式:  
//java中每个类型都有class 属性.  
Classc2 = Employee.class;  
//第三种方式:  
//java语言中任何一个java对象都有getClass 方法  
Employee e = new Employee();  
Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)

2.利用反射机制创建对象

Class<?> forName = Class.forName("com.jarye.entity.User");
// 实例化无参构造函数
Object newInstance = forName.newInstance();
// 实例化有参构造函数
Class<?> forName = Class.forName("com.jarye.entity.User");
Constructor<?> constructor = forName.getConstructor(String.class, String.class);
User newInstance = (User) constructor.newInstance("123", "123");

3.反射常用方法

方法名称 作用
getDeclaredMethods[] 获取该类的所有方法
getReturnType() 获取该类的返回值
getParameterTypes() 获取传入参数
getDeclaredFields() 获取该类的所有字段
setAccessible 允许访问私有成员

4.反射底层原理

反射机制底层其实走的是MethodAccessor,分为2步:
a、访问控制检查(判断该方法的修饰符modifiers是否为public)
b、调用MethodAccessor.invoke()实现方法执行,创建MethodAccessor有两种选择

  • sun.reflect.noInflation的设置为true,则ReflectionFactory利用MethodAccessor的字节码生成类MethodAccessorGenerator直接创建一个代理类,通过间接调用原方法完成invoke()任务【使用Java代码生成】
  • sun.reflect.noInflation的设置为false或未达到设置值(默认15次)时,创建DelegatingMethodAccessorImpl委托类,并将执行invoke()方法的具体内容交由NativeMethodAccessorImpl实现【使用Native代码生成】
参数 说明
sun.reflect.noInflation 是控制是否立即进行类膨胀
sun.reflect.inflationThreshol 类膨胀阈值
可以通过启动参数-Dsun.reflect.noInflation=false -Dsun.reflect.inflationThreshold=15

相关文章

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • Java中反射的用途

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框...

  • 第6讲 | 动态代理是基于什么原理?

    谈谈 Java 反射机制,动态代理是基于什么原理? 典型回答 反射机制是 Java 语言提供的一种基础功能,赋予程...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • JAVA反射机制知识

    导读 移动开发知识体系总章(Java基础、Android、Flutter) 反射机制的概念 反射机制的主要功能 与...

  • 反射之三

    总结内容源自以下文章 粗浅看java反射机制 反射机制应用实践 谈谈java反射机制 Java Reflectio...

  • Java反射机制-----反射基础

    前言   接上两节,本想在本节介绍MVP和MVVM框架的搭建和实现原理。但是研究MVVM框架时发现,DataBin...

  • java基础:深入理解JDK动态代理

    其他更多java基础文章:java基础学习(目录) 经过上一节我们讲了Class对象和反射机制,这节就来讲一下反射...

网友评论

    本文标题:Java基础-反射机制

    本文链接:https://www.haomeiwen.com/subject/zpnlbktx.html