Groovy语言学习--语法基础(3)

侧重点可能是groovy metaClass基元类的概念,有点像java的反射,因为java反射目前基本也没研究过,就mark一下,后续若有用到就深入研究一下。

基础语法的东西貌似差不多八九不离十了,后面再写个语法基础(4) 就准备将groovy脚本和java的融合研究一下,深入研究一下其作为脚本如何完成规则引擎的一些职责。

package groovy.model

/*class Test3 {

}*/

def map = [key1:"john",key2:"tom",key3: "rose"]
map.each { println it }

map.each({key,value -> println "$key : $value"})

/*
 * 使用默认构造方法实例化Person类
 */

def person1 = new Person()

person1.setName("lucky")
person1.setAge(20)
person1.name = "jack"
println person1
/*
 * groovy 风格
 */
def person2 = new Person([‘name‘:‘gaga‘,‘age‘:22])
println person2

/*
 * java代码 防止空指针
 */
if(person2 !=null) {

    println "check right"
}

/*
 * groovy 代码防止空指针
 */

person2?. println "welcome no null point"

/*
 * 可变长参数 在调用的的时候可以使用任意个数的参数
 */
int sum(int...var) {
    def total = 0
    for(i in var) {
        total +=i
    }
    return total
}
println sum(1,2,2)

/*
 *枚举
 */
enum Day{
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,

    THURSDAY, FRIDAY, SATURDAY
}

println Day.FRIDAY
/*
 * 同java5一样,groovy支持带构造器、属性和方法的enum
 */
enum Planet{
    MERCURY(3.303e+23,2.49376e6),
    MARS(3.303e+23,2.49376e6),
    EARTH(5.976e+24, 6.37814e6)

    double mass
    double radius
    Planet(double mass,double radius) {
        this.mass = mass
        this.radius = radius
    }

    void printMe() {
        println "${name()} has a mass of ${mass} and a radius of ${radius}"
    }
}

Planet.EARTH.printMe()
/*
 * 可以.方法查看enum相关的api 有很多
 */
println Planet.EARTH.name()

/*
 * metaClass 元类 通过元类,可以为对象增加方法 体现为groovy的动态性
 */
def message = "hello world"
print message.metaClass

//message.metaClass.methods.each { println it.name }
//message.metaClass.properties.each {println it.getKey()}

原文地址:https://www.cnblogs.com/slowcity/p/10162185.html

时间: 2024-10-09 20:09:19

Groovy语言学习--语法基础(3)的相关文章

Groovy语言学习--语法基础(5)

至此groovy语言学习-语法基础就结束了,新的工作已经安排下来,要干活了. 对groovy了解到一定程度之后就可以在java项目中对其进行引入了.为此新建了一个微型的项目,个人觉得千言万语不如代码实现来得实在.程序员应该用代码来沟通,文字只是解释. 到此,感觉算是对groovy完成了入门练习.内部涉及的实现复杂和性能优化,超出目前学习能力范围,后续随着技能的提升可能还会去进一步研究.先到此为止了. 相关代码见项目:https://github.com/islowcity/groovy 项目中有

c语言学习之基础知识点介绍(三)

本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例如:int num =0; csanf("%d",&num);printf("num = %d \n",num); 注意:格式化控制符前面要求输入什么类型的数据,那么地址列表那里就必须只能放相应类型变量地址.输入值的时候可以指定输入值的分隔符, 也可以 默认用回

oc语言学习之基础知识点介绍(四):方法的重写、多态以及self、super的介绍

一.方法重写 /* 重写:当子类继承了父类的方法时,如果觉得父类的方法不适合,那么可以对这个方法进行重新实现,那么这个就重写. 注意:也就是说,一定只能发生在父类和子类关系中. 然后是子类重新实现父类的方法,绝对不是再写一个自己类的方法. 代码中原话叫:子类重写父类方法. 因为父类定义的方法不一定适用于子类. 注意:如果有重写,那么调用的是自己重写后的方法,如果没有重写,那么就调用的是父类的方法. 所以我们方法有一个执行的过程: 1.先去自己类里面找这个方法,如果找到就执行. 2.如果没找到,就

htm语言的语法基础及规则

HTML的主要语法是元素和标签.元素是符合DTD(文档类型定义)的文档组成部分,如title(文档标题).IMG(图象).table(表格)等等.元素名不区分大小写的.HTML用标签来规定元素的属性和它在文档中的位置.标签分单独出现的标签和成对出现的标签两中.大多数的标签是成对出现的,有首标签和尾标签组成.首标签的格式为<元素名>,尾标签的格式为</元素名>.成对标签用于规定元素所含的范围,如<title>和</title>标签用来界定标题元素的范围,也就是

oc语言学习之基础知识点介绍(五):OC进阶

一.点语法介绍 /* 以前封装后,要给属性赋值,必须调用方法 这样做,有两个缺点: 1.代码量多,调用方法要写的东西多. 2.看起来并不像是给属性赋值,也不像取值. 我们用点语法就可以更好的解决! 点语法的语法: 对象.属性; 注意:这里的属性不需要加_ 对象.属性 = 值; 点语法的本质: 其实就是调用getter或者setter方法. 点语法注意事项: 1.在类的方法里面如果用self.age 这个是调用方法,self->_age 是直接调用成员变量. 2.千万记得不要在setter或者ge

C语言学习-基础

程序是为了让计算机完成某项任务而编写的逐条执行的指令序列. C语言的特点是:结构化,语言简洁,功能强大,移植性好. 因为移植性好,所以大多数单片机如51.stm32,msp430,等众多嵌入式微处理器都适用C语言作为开发语言. C语言的开发过程如下图: 由上图可知:如果程序编译时出现错误,或者链接时出现错误,优先到程序中查找有误编写错误,如果调试运行时出现错误,需要分析问题本身查看是否有逻辑错误. C语言的数据类型: C语言的数据类型有基本类型.构造类型.指针类型.空类型等,今天学习的是基本类型

oc语言学习之基础知识点介绍(一):OC介绍

一.第一个OC程序 #import <Foundation/Foundation.h> //导入头文件 int main(int argc, const char * argv[]) { //main函数 @autoreleasepool {//自动释放池,我们现在写代码最好都写这里面 NSLog(@"Hello, World!"); //输出语句 } return 0; //退出程序,返回一个值给系统看 } 二.OC中的字符串 /* 前缀的概念:(了解一下) 提供框架的作

c语言学习之基础知识点介绍(十三):枚举的介绍和使用

一.枚举的介绍 /* 枚举:限制的待选项. 语法: enum 枚举名{ 选项1, 选项2, 选项3, ........ 选项n }; 注意:枚举中,选项之间用 , 隔开,最后一个不用加 , :并且枚举已 ; 结尾. 声明枚举变量: enum 枚举名 变量名 ; 例如:enum qHand qh; 赋值: 1.先声明,后赋值 enum 枚举名 变量名 ; 变量名 = 枚举项; 例如: enum qHand qh; //qh是变量名,enum qHand 是类型 qh = 石头; 2.声明的时候初始

oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造成内存泄露 全局区:所有的全局变量和静态变量 常量区:所有的常量 代码区:程序编译后的指令集 类是模板,肯定需要存在内存里面,因为实例化对象的时候需要根据这个模板来创建,那么存在内存里面,存在哪呢?? 类模板存在:全局区! 存的是:类的描述,还有所有的方法实现 每个对象都会有一个系统给我们的isa指