首页 > 编程语言 >Java reflect

Java reflect

时间:2023-04-22 21:11:23浏览次数:44  
标签:反射 Java reflect 机制 动态 Class

Java反射机制

面试题

1、什么是反射机制?

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个 对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 java语言的反射机制。

静态编译和动态编译

静态编译:在编译时确定类型,绑定对象

动态编译:运行时确定类型,绑定对象

反射机制优缺点

优点: 运行期类型的判断,动态加载类,提高代码灵活度。

缺点: 性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能 比直接的java代码要慢很多。

2、反射机制的应用场景有哪些?

反射是框架设计的灵魂。

在我们平时的项目开发过程中,基本上很少会直接使用到反射机制,但这不能说明反射机制没有用,实 际上有很多设计、开发都与反射机制有关,例如模块化的开发,通过反射去调用对应的字节码;动态代 理设计模式也采用了反射机制,还有我们日常使用的 Spring/Hibernate 等框架也大量使用到了反射机 制。

举例:

①我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序;

②Spring框架也用到很多反射机制, 经典的就是xml的配置模式。Spring 通过 XML 配置模式装载 Bean 的过程:1) 将程序内所有 XML 或 Properties 配置文件加载入内存中; 2)Java类里面解析xml或 properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息; 3)使用反射机制,根据这 个字符串获得某个类的Class实例; 4)动态配置实例的属性。

3、Java获取反射的三种方法

/*
 * @Author: zhifei_City [email protected]
 * @Date: 2023-04-22 20:29:10
 * @LastEditors: zhifei_City [email protected]
 * @LastEditTime: 2023-04-22 20:58:46
 * @FilePath: \interview\Inner\reflect\ReflectTest.java
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
package Inner.reflect;

public class ReflectTest {
    public static void main(String[] args) {
        // 方式一,通过建立对象
        People people = new People(1, "李白", true, 23.33);
        Class objClass1 = people.getClass();
        System.out.println(objClass1.getName());

        // 方式二 通过所在路径-相对路径
        Class objClass2 = null;
        try {
            objClass2 = Class.forName("../reflect.People");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            System.out.println(objClass2.getName());
        }
        // 方式三 通过类名
        Class objClass3 = People.class;
        System.out.println(objClass3.getName());

    }
}

知识点

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

(29条消息) Java基础之—反射(非常重要)_敬业小码哥的博客-CSDN博客

标签:反射,Java,reflect,机制,动态,Class
From: https://www.cnblogs.com/mycity/p/17343966.html

相关文章

  • Java接口
    Java接口Java接口的概述接口是一种公共的规范标准只要符合规范标准,就可以给大家通用生活举例接口的定义和基本格式接口是多个类的公共规范接口是一种引用数据类型,里面最重要的方法是抽象方法接口的格式publicinterface接口名称{接口内容}接口可以包含常量......
  • java maven pom指定main class类
    pom文件中增加 <build><finalName>entrance</finalName><!--这里是生成的jar包名字--><plugins><plugin><groupId>org.apache.maven.plugins</groupId><arti......
  • Java学习(1)
    一、Java的基础语法1.变量和数据类型在Java中,变量是用来存储数据的容器,可以存储各种类型的数据。Java中的变量分为两类:基本数据类型变量和引用数据类型变量。(1)基本数据类型(PrimitiveDataTypes)整数类型:byte、short、int、long浮点类型:float、double字符类型:char布尔......
  • Java核心机制
    Java核心机制1.Java虚拟机1.JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据,内存,寄存器。2.对于不同的平台,有不同的虚拟机。3.Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”。2.垃圾自动回收1.垃圾回收:不再使用的内存空间......
  • 【已解决】:java.sql.SQLException 问题
    本文目录一、Bug描述二、定位报错点三、解决方案四、注意事项及原理总结:写在后面的话一、Bug描述今天做项目开发的时候,发现了这个Bug,话不多说,直接定位Bug原理+解决!java.sql.SQLException:java.lang.RuntimeException:java.sql.SQLException:CannotissueexecuteUpdate()fo......
  • 设计模式-模板模式在Java中的使用示例-悍马模型制造示例
    场景设计模式-模板模式在Java中的使用示例:设计模式-模板模式在Java中的使用示上面整理了模板模式的使用示例,为加强理解特记录另一个使用示例,以下示例摘自设计模式之禅第二版。模板方法模式定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即......
  • java -- 网络编程
    软件结构C/S结构:全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。B/S结构:全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。网络通讯协议网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间......
  • Java异常类层次结构?
    Throwable是Java语言中所有错误与异常的超类。Error类及其子类:程序中无法处理的错误,表示运行应用程序中出现了严重的错误。Exception程序本身可以捕获并且可以处理的异常。Exception这种异常又分为两类:运行时异常和编译时异常。运行时异常都是RuntimeException类......
  • Java中ArrayList的遍历与删除元素方式总结
    在Java编程中,我们经常需要对数据结构进行遍历操作,并根据业务需求删除部分元素。而数组列表(ArrayList)是集合类中的一种,它可以动态地添加和删除元素,非常适合在程序中使用。本篇博客将总结ArrayList中的两种遍历和删除元素的方式。在下面的示例代码中,我们先定义了一个ArrayList对象,......
  • java下载pdf等静态文件
    java下载pdf等静态文件  packagecom.example.climbnumber;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.URL;importjava.net.URLConnection;importjava.util.zip.GZIPInputStream;publicclass......