zoukankan      html  css  js  c++  java
  • Groovy In Action 笔记 (1) -- 概述

    1. 基于JVM的一种强类型的动态语言,因此可以在同一个项目中与Java混合使用.

    2. 可以使用Groovyc编译为 .class 文件,与Java一致(Javac编译 .java文件为 .class文件).

    3. 除了将.groovy文件编译为.class 文件,groovy提供了另一种方式将groovy内容加载到jvm供JIT编译:通过groovy class loader直接加载 .groovy 文件.

      

    4. Groovy是如何实现动态语言特性的? 相当于在Java语言基础上加了一层MOP(Meta Object Protocol), 可以理解为Groovy中的任何方法/属性调用均被中间层根据某些规则(系统定义,或者用户定义均可)进行了处理,处理后再调用实际的方法/属性,比如:当调用某个实例中不存的方法时,中间层可以将此不存在的方法(根据规则)转变为某个已经存在的方法,得到另一个结果.此特性配合groovy中的closure+map可以创造一些领域特性语言(DSL),如Gradle,Jenkins-Pipeline等.

      

    5. Groovy编译器编译Groovy脚本时,并不是逐行进行,而是全文解析成AST(抽象语法树),然后写成.class文件.这与Python等脚本语言的解释器的逐行解释不同.

    6. Groovy脚本可以有三种不同的代码形式:

    (1) 脚本中定义唯一一个与脚本文件同名的class,并含有一个static void main(String[] args)方法,和Java一致

    (2) 脚本文件中没有class定义,只有一些groovy代码

    (3) 脚本文件中既有class定义,且class的名字与脚本名字不同,也有常规的groovy语句

    7. Groovy所有的类均实现了GroovyObject接口(相当有java中所有类均继承自Object类). groovyc编译 .groovy 文件后,会自动实现此接口.Groovy中的所有方法调用(第四点提到的中间层) 正是通过GroovyObject中的invokeMethod方法,配合MetaClassRegistry等实现的.具体逻辑后续详细介绍.

  • 相关阅读:
    sizeof运算符、虚函数、虚继承考点(待修改)
    sizeof运算符、字节对齐考点(面宝P50)
    浮点数的存储、类型转换知识点(面宝P34)
    赋值语句C++(面宝P29)
    求格子中的最短路径条数问题
    求两个数的最大公约数和最小公倍数Java(cvte考题)
    快速排序c代码
    希尔排序java代码
    快速排序java代码
    归并排序java代码
  • 原文地址:https://www.cnblogs.com/FsharpZack/p/13773087.html
Copyright © 2011-2022 走看看