反射和动态语言

简介: 动态语言动态编程语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。Java 引入反射后可以算「动态语言」因为反射允许正在运行的 Java 程序观测,甚至是修改程序的动态行为。

动态语言

动态编程语言是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。

Java 引入反射后可以算「动态语言」

因为反射允许正在运行的 Java 程序观测,甚至是修改程序的动态行为。

反射的使用场景

大多数情况使用的还是反射的 introspection,即观测,比如

  • rpc 调用,根据协议 invoke 某个类的某个方法
  • 序列化和反序列化,如 fastjson
  • ORM
  • 用注解搞事情
  • ide 里的提示。如你继承了某个抽象类后,能检测到你有没有实现某个抽象方法

动态vs 静态类型语言

动态类型语言是在编译器没确定,运行时才确定变量类型的语言。当你给变量赋值的时候,该变量的类型才确定。

  • 动态类型的优点

    • 少些很多代码。比如定义很多功能相同的方法,只是入参类型不一样
  • 缺点

    • 运行时报错。使用 api 时不知道支持的变量类型,可能运行时才报错
目录
相关文章
|
Java API Maven
Java工具篇之反射框架Reflections
Reflections通过扫描classpath,索引元数据,并且允许在运行时查询这些元数据。 使用Reflections可以很轻松的获取以下元数据信息: - [x] 获取某个类型的全部子类 - [x] 只要类型、构造器、方法,字段上带有特定注解,便能获取带有这个注解的全部信息(类型、构造器、方法,字段) - [x] 获取所有能匹配某个正则表达式的资源 - [x] 获取所有带有特定签名的方法,包括参数,参数注解,返回类型 - [x] 获取所有方法的名字 - [x] 获取代码里所有字段、方法名、构造器的使用权
1326 0
|
1月前
|
安全 算法 程序员
在go语言中使用泛型和反射
【7月更文挑战第8天】本文介绍go支持泛型后,提升了代码复用,如操作切片、映射、通道的函数,以及自定义数据结构。 泛型适用于通用数据结构和函数,减少接口使用和类型断言。
110 1
在go语言中使用泛型和反射
|
8月前
|
安全 C# 图形学
C#的反射机制
C#的反射机制
|
C#
面向对象——反射
面向对象——反射
192 0
面向对象——反射
Java反射->什么是反射?->获取方式
Java反射->什么是反射?->获取方式
Java反射->什么是反射?->获取方式
|
算法 安全 C#
C#反射与特性(一):反射基础
C#反射与特性(一):反射基础
256 0
C#反射与特性(一):反射基础
|
.NET C# 开发框架