课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言随着互联网的不断发展而被越来越多的程序员掌握,今天我们就通过案例分析来简单了解一下,Java编程反射的概念与原理。
一、什么是java反射
什么是java的反射?
java的反射,我觉得有同样的思想。当然java反射要“反思”的是java程序在运行时类自己的信息,它获取的信息就是它自身类的详细信息。
类的哪些详细信息呢?比如类或对象的成员变量、方法等。然后可以对这些信息加以修改,从而调整java的运行逻辑。
java反射API提供了非常丰富的工具集,反射API能够获取对象的变量,方法等成员,从而可以动态的操纵java代码程序。文章后面会介绍这些反射API(反射相关的类)的一些用法。
为什么反射能得到java程序运行时类的信息呢?这就要从java的虚拟机jvm说起。
二、虚拟机jvm加载文件
Java虚拟机(JavaVirtualMachine):用于执行编译后的java程序的虚拟容器。jvm可以跨操作系统使用。
jvm内部结构分为3部分:类加载器classload子系统、运行时数据区、执行引擎。
以.java结尾的文件是不能直接在jvm上运行,它必须通过javac编译为以.class为后缀结尾的字节码文件才能运行。
java文件被编译为.class的文件后,java文件中各种对象的信息就确定下来了,存在于.class文件里。通过java的反射就可以获取里面的信息。
三、反射原理简析
在上一小节简单了解了文件加载内容,就是java文件经过编译后变成.class文件,类的各种信息就存储在.class文件中了,所以反射才能获取到类的各种信息。
java代码编译为字节码的.class类文件,那.class文件里都有什么格式是什么?
class文件结构采用类似c语言的结构体来存储数据。
它由2部分组成:无符号的数和表。所有的表都习惯以_info结尾。
无符号的数属于基本的数据类型,一u1,u2,u4,u8分别来表示1个字节,2个字节,4个字节和8个字节的无符号数,无符号数可以用来表示数字、索引引用、数量值。
表用于描述有层次关系的复合结构的数据,整个class文件本质就是一张表。
类的信息都存储在.class文件里,当把.class文件读入内存时,就会为之创建一个Class对象。
简单说:java虚拟机把描述类的数据class文件加载到内存,并对数据进行效验、转换解析和初始化,终形成可以被虚拟机直接使用的类型,这就是虚拟机的类加载机制。
在java语言里,类的加载和连接过程都是在程序运行期间完成的,虽然有性能开销,但是为java应用程序提供了高度的灵活性。比如反射就是发生在java运行时完成的。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。