网站首页 > java教程 正文
什么是动态语言?
动态语言,就是指在运行的时候可以随意改变其结构的语言,例如添加新的属性或者添加新的方法,又或者是删除方法等等在语法结构上的变化。JavaScript、Ruby、Python等都是属于动态语言,这些语言又被称为是解释性的语言,也就是说不需要经过编译器的编译就可以直接解释运行。像C、C++等都不属于动态语言,他们都是经过编译之后才可以正常使用。对于Java而言,因为它存在反射机制,所以Java可归为半动态语言。也就是说Java语言也需要编译器产生.class的文件,但是反射机制提供了一种动态的性质。
什么是反射机制
反射机制指的是在程序运行过程中,对任意的一个类都能获取其所有的属性或者是方法,并且对任意一个对象都能调用其任意一个方法,这种动态获取类或者对象信息,以及动态调用对象的方法的功能就被称为是Java语言的反射机制。
反射的应用
Java中的对象有两种类型:编译时的类型和运行时的类型。
编译时类型是指在声明对象的时候采用的类型。
运行时类型是指在为对象赋值的时候采用的类型。
Pets pets = new Cat();
如上面代码所示,pets对象在编译的时候的类型是Pets,运行时的类型为Cat,所以无法在编译的时候获取在Cat类中定义的方法。
所以,程序在编译的时候无法预知这个对象和类的真实的信息,只能通过运行时信息来发现该对象和类的真实信息,而其真实的信息通常是通过Java的反射机制来获取,这个就是Java反射机制的核心功能。
Java反射机制实现的API
Java的反射API主要用于在运行过程中动态生成类、接口或者是对象等信息,其常用的的API有如下一些
- Class类:用于获取类的属性、方法等信息
- Field类:用来表示类的成员变量,用于获取和设置类中的属性值。
- Method类:用来表示类的方法,用于获取方法的描述信息或者执行某个方法
- Constructor类:用来表示类的构造方法操作。
反射机制的执行步骤
- 1、获取到想要操作的类的Class对象,这个对象就是整个反射机制的核心,通过它可以调用类的任意方法。
- 2、调用Class对象对应的类中定义的方法,也就是告诉我们如何去使用这个类的对象。
- 3、使用反射API来获取或者调用类的属性和方法等信息。
获取Class对象的3中方法
1、调用某个对象的getClass方法用来活的该类对应的Class对象。
Pets pets = new Pets();
Class clazz = pets.getClass();
2、调用某个类的Class属性获取到对应类的Class对象
Class clazz = Pets.class
3、调用Class类中的forName方法获取到该类的对应的Class对象,这也是最安全、性能最好的方法
Class clazz = Class.forName("类的全路径")
反射机制创建对象的两种方式
创建对象有如下的两种方式
- 使用Class对象的newInstance方法创建该Class对象对应类的实例,这种方法要求该Class对象对应的类有默认的空构造器。
- 先使用Class对象获取指定的Constructor对象,调用Constructor对象的newInstance方法创建Class对象对应类的实例,通过这种方法可以选定构造方法创建对应的对象实例
Class clazz = Class.forName();
Pets pets = clazz.newInstance();
Constructor c = clazz.getDeclaredConstructor();
Pets pets = c.newInstance();
Method类的invoke方法
Method类提供了关于类或者接口操作某个方法以及如何访问方法的信息,在运行代码中如何调用这个方法,就需要通过invoke方法。通过invoke方法可以实现动态调用,例如可以动态传入参数以及方法参数化过程。
- 1、获取Method对象:通过调用Class对象getMethod返回一个Method对象,描述了这个对象锁表示的类或者接口指定的公共成员方法。
- 2、通过调用invoke方法来动态地执行暴露出来的函数。
知识点汇总
猜你喜欢
- 2024-09-30 java反射机制深度探讨(java反射机制的原理和用途)
- 2024-09-30 Java中的反射到底有什么用?(java反射的用途及实现)
- 2024-09-30 JAVA 反射机制(Java反射机制的作用包括)
- 2024-09-30 Java的反射机制是什么?#干货分享(java反射机制实现原理)
- 2024-09-30 Java基础:反射机制(java反射机制实例)
- 2024-09-30 想成为java架构师,你首先得掌握的Java反射机制,安排
- 2024-09-30 谈谈Java反射机制(java的反射机制)
- 2024-09-30 Java后端精选技术:Java的反射机制
- 2024-09-30 Java的反射机制大家都会了,你还不会吗?
- 2024-09-30 Java反射机制(Java反射机制的作用包括)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)