Java 反射

createh52个月前 (03-10)技术教程16

Java的反射功能,可以帮我们在程序“运行期间““自由的”创建对象,那为什么强调运行期间呢?那是因为我们创建对象一般是在编译期间就创建好了,例如:我们在代码中new了一个对象,这个时候java源码文件转换成字节码文件后,对象就创建好了,只不过是在JVM上跑的时候,加载进来而已

那自由体现在哪里呢?自由体现在我们加载某个对象时不再用去像new这样去硬编码了,我们可以通过Class.ForName("类路经").newInstance方法,构造出这个对象,而这个类路经我们可以通过加载配置文件或者从数据库中获取的方式拿到,这样我们就不用通过改代码的方式,加载不同的对象了

Java的反射功能在java.lang.reflect包中,Class类是reflect包中一个重要类的,用于表示对象的类型标识,JVM会为每一个Java对象,创建一个这样的类,通过这个类,我们可以获取对象所属类的成员变量,对java对象的属性进行动态修改,例如Field[] f=具体类.getDeclaredFields();f[0].set("具体值")

正是由于java的反射功能可以让我们在运行期间灵活的创建对象,那么创建对象与使用对象的解耦,及创建平台型框架就成为了可能,例如我们现在常用的Spring框架在加载对象时都采用了反射,例如我们编写spring bean的配置文件,在里面罗列了类的全路径名,那么在spring项目启动时,加载这配置文件,读取里面类的全路径名,然后利用java反射生成实例对象,放到IOC容器(其实就是一个hashmap)里面

Java进行反射的前提是存在相应的class字节码文件,如果没有class文件只有源码文件也是可以动态加载的,这个就要通过java.tools包里的Compiler类的run方法了,这是JDK6推出的方法,例如我们见到一些在线编程环境,就采用了这样的技术

相关文章

Java 反射 和 Java new 的效率有什么区别,亲测相差100倍

在我们的日常使用中,Java new是用的最多的,但是有些框架往往会使用Java反射来实现灵活性,那么它们之间的效率有什么区别呢?你有没有想过,什么时候应该该用new来创建对象,什么时候该使用反射呢?...

JAVA进阶知识学习-day01 Object类&Date类&System类

一、Object类1.1 java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。 如果一个类没有...

java面向对象特性,抽象,封装,继承,多态

1. 抽象(Abstraction)定义: 抽象是指将复杂的事物进行简化,通过隐藏实现细节,只暴露接口或核心功能。它是面向对象编程中的一种机制,允许我们定义“抽象类”和“接口”,从而强制子类实现某些方...

C#动态类型ExpandoObject,DynamicObject和dynamic傻傻分不清

在 C# 中,dynamic关键字、ExpandoObject 类和 DynamicObject 类是处理动态对象的主要方法。但是,ExpandoObject 和 DynamicObject 通常可以...

Java 强引用、软引用、弱引用、虚引用(幻引用)详解

一、概述众所周知,Java 中是 JVM 负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用 c 那样操心内存),但同时也是它的缺点(不够灵活)。为了解决内存操作不灵活这个问题,可以采用软...