【JavaSE】Java的反射机制

这篇具有很好参考价值的文章主要介绍了【JavaSE】Java的反射机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.java反射机制

1.1简介

  • 被视为动态语言的关键,允许程序在执行期间,借助于RefectionAPI取得任何类的内部信息。在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个类对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为java反射机制。

1.2java反射机制提供的功能

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时查看任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法
  • 在运行时给任意一个对象的属性赋值
  • 生成动态代理

2.动态语言和静态语言

  • 动态语言:在运行时可以改变其结构的语言,比如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。也就是说在运行时代码可以根据某些条件改变自身结构。
  • 主要的动态语言:C#、javaScript、PHP、Python等
  • 静态语言:运行时结构不可变的语言,就是静态语言。
  • 主要的动态语言:|ava、C、C++等。Java有一定的动态性,可以利用反射机制、字节码操作获得类似动态语言的特性。

3.Class类

  • java在将.class字节码文件载入时,JVM会产生一个java.lang.Class对象代表该.class字节码文件。
  • Class是一个比较特殊的类,是java反射机制的基础。
  • Class类的对象表示正在运行的java程序中的类或接口。也就是任何一个类被加载时,类的.class文件读入内存的同时,都自动为其创建一个java.lang.Class对象。
  • Class类没有公共构造方法,其对象是JVM在加载类时通过调用类加载器中的defineClass()方法创建的,因此不能显式地创建一个Class对象。
  • 通过Class对象,才可以获取这个类对象的其他信息。
  • 每个类被加载之后,系统都会为该类生成一个对应的Class对象,一旦类被加载到JVM中,同一个类将不会被再次载入。

4.如何获得Class对象

  1. 使用Class类的静态方法 forName(String className),参数className表示所需类的全路径如果给的参数类找不到,会抛出ClassNotFoundException异常
  2. 用类名调用class属性来获取该类对应的Class对象,“类名.class"
  3. 使用该类的对象调用getClass()方法,来获取该类对应的Class对象
  4. 使用类的装载器

5.哪些类型可以有Class对象

  • class :外部类、成员内部类、静态内部类、局部内部类、匿名内部类
  • interface:接口.
  • 数组
  • enum:枚举
  • annotation:注解
  • 基本数据类型
  • void

6.ClassLoader 类装载器

6.1 简介

  • 一个用来加载类文件的类
  • java源代码通过javac编译器编译成类文件,然后JVM通过类文件中的字节码来执行程序,类加载器负责加载文件系统、网络或其他来源的类文件

6.2 加载的两种方式

  • 隐式加载:程序在运行过程中,通过new等方式生成对象时,隐式调用类加载器加载对应的类进入到JM中
  • 显式加载:通过Class.forName()等方法,显式地加载需要的类

6.3 类加载器的分类

  • JDK默认提供三种ClassLoader
  1. BootStrapClassLoader:根装载器,它使用C++编写,在]ava中看不到它,负责装载核心类库
  2. PlatformClassLoader:扩展类装载器,装载扩展目录ext中的jar类
  3. AppClassLoader:系统类装载器(应用类装载器),负责classpath类的加载
  • JM装载类时使用“全盘负责委托机制",当一个ClassLoader一个类的时候,除非显式地使用另一个ClassLoader,不然该类所依赖及引用的类也是由这个ClassLoader载入。
  • 一个应用程序总是由很多个类组成,java程序启动时,并不是一次把所有的类加载再运行。总是先把保证程序运行的基础类一次性加载到VM中,其他类等到VM用到的时候再加载,这样可以节省内存的开销。
     

7.反射获得泛型文章来源地址https://www.toymoban.com/news/detail-858505.html

  • 可以通过反射获取泛型的场景
  • 成员变量的泛型
  • 方法参数的泛型
  • 方法返回值的泛型
  • 获取带有泛型的超类或带有泛型的实现的接口
  • 不可以通过反射获取泛型的场景
  • 局部变量的泛型

到了这里,关于【JavaSE】Java的反射机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java的反射机制(2)

    目录 Class类基本介绍 Class类的常用方法 如何获取class类对象 哪些类型有Class对象 Class类基本介绍 在Java语言中,每个对象都有一个运行时类,即其所属的类。而这个运行时类在Java中是以Class类的实例形式存在的,该Class类实例就是所谓的Class对象。Class类表示一个类或接口的元

    2024年02月08日
    浏览(32)
  • Java反射机制是什么?

    Java 反射机制 是 Java 语言的一个重要特性。 在学习 Java 反射机制前,大家应该先了解两个概念,编译期和运行期。 编译期 是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。编译期只是做了一些翻译功能,并没有把

    2024年02月12日
    浏览(30)
  • Java的反射机制

    Java 的反射机制允许在程序运行期间,借助反射 API 获取类的内部信息,并能直接操作对象的内部属性及方法。 Java 反射机制提供的功能: 在运行时,使用反射分析类的能力,获取有关类的一切信息(类所在的包、类实现的接口、标注的注解、类的数据域、类的构造器、类的

    2024年02月02日
    浏览(32)
  • Java学习路线(23)——反射机制

    一、概述 (一)什么是反射: 反射指的是任何一个Class类,在“运行时”都可以直接得到全部成分。 (二)动态可获取的对象: 构造器对象——Constructor,成员变量对象——Field,成员方法对象——Method。 (三)反射关键: 第一步都是得到编译后的Class对象,然后可以获得

    2024年02月08日
    浏览(38)
  • Java重点:反射机制的使用

    目录 一、概念 二、类类 1、类类的获取方式 1)类名.Class 2)对象.getClass() 3)Class.forName() 三、反射实例化 1、调用一个公有的无参构造方法 2、调用一个公有的一个参构造方法 3、调用一个公有的两个参构造方法 4、调用一个私有的一个参构造方法 四、反射:方法调用 1、公有

    2024年02月07日
    浏览(29)
  • 敲黑板!java反射机制和原理

    获取Class对象:首先,你需要获取表示要操作的类的 Class 对象。可以使用以下三种方式之一来获取 Class 对象: Class.forName() 方法:使用类的全限定名获取 Class 对象,例如: Class? clazz = Class.forName(\\\"com.example.MyClass\\\"); .class 语法:如果你已经有了类的实例,可以使用 .class 语法来获

    2024年02月08日
    浏览(31)
  • 【详解】Java反射机制(打穿封装)

    目录 定义: 用途: 反射基本信息: 反射相关的类(important): Class类(反射机制的起源 ) Class类中的相关方法: 常用获得类相关的方法(重要) 常用获得类中属性相关的方法(重要) 获得类中注解相关的方法(了解) 获得类中构造器相关的方法(重要) 获得该类所有构造

    2024年04月16日
    浏览(50)
  • 什么是Java中的反射机制?

    Java中的反射机制是一种能够在运行时动态地获取类的信息并操作类或对象的能力。Java中的每个对象都有一个getClass()方法,该方法可以返回该对象所属的类的Class对象。反射机制通过这个Class对象可以获取类的属性、方法、构造函数等信息,然后可以在运行时动态地创建对象、

    2024年02月02日
    浏览(25)
  • 反射机制-体会反射的动态性案例(尚硅谷Java学习笔记)

    // 举例01 public class Reflect{ } 案例:榨汁机榨水果汁,水果分别有果(com.reflect.Apple)、香蕉(Banana)、桔子(Orange)等。 效果如图。 提示: 1、声明(Fruit)水果接口,包含榨汁抽象方法: void squeeze(); /skwi:z/ 2、声明榨汁机(Juicer),包含运行方法: public void run(Fruit f),方法体中,调用f的榨汁方

    2024年02月11日
    浏览(36)
  • Java基础_反射机制(尚硅谷-学习笔记)

    反射的概述(熟悉) ● Java给我们提供了一套API,使用这套API我们可以在运行时动态的获取指定对象所属的类,创建运行时类的对象,调用指定的结构(属性、方法)等。 ● API: ○ java.lang.Class:代表一个类 ○ java.lang.reflect.Method:代表类的方法 ○ java.lang.reflect.Field:代表类

    2024年02月11日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包