动态语言
动态编程语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。
Java 引入反射后可以算「动态语言」
因为反射允许正在运行的 Java 程序观测,甚至是修改程序的动态行为。
反射的使用场景
大多数情况使用的还是反射的 introspection,即观测,比如
- rpc 调用,根据协议 invoke 某个类的某个方法
- 序列化和反序列化,如 fastjson
- ORM
- 用注解搞事情
- ide 里的提示。如你继承了某个抽象类后,能检测到你有没有实现某个抽象方法
动态vs 静态类型语言
动态类型语言是在编译器没确定,运行时才确定变量类型的语言。当你给变量赋值的时候,该变量的类型才确定。
-
动态类型的优点
- 少些很多代码。比如定义很多功能相同的方法,只是入参类型不一样
-
缺点
- 运行时报错。使用 api 时不知道支持的变量类型,可能运行时才报错