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

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

  1. package groovy.model
  2.  
  3. /*class Test3 {
  4.  
  5. }*/
  6.  
  7. def map = [key1:"john",key2:"tom",key3: "rose"]
  8. map.each { println it }
  9.  
  10. map.each({key,value -> println "$key : $value"})
  11.  
  12. /*
  13. * 使用默认构造方法实例化Person类
  14. */
  15.  
  16. def person1 = new Person()
  17.  
  18. person1.setName("lucky")
  19. person1.setAge(20)
  20. person1.name = "jack"
  21. println person1
  22. /*
  23. * groovy 风格
  24. */
  25. def person2 = new Person(['name':'gaga','age':22])
  26. println person2
  27.  
  28. /*
  29. * java代码 防止空指针
  30. */
  31. if(person2 !=null) {
  32.  
  33. println "check right"
  34. }
  35.  
  36. /*
  37. * groovy 代码防止空指针
  38. */
  39.  
  40. person2?. println "welcome no null point"
  41.  
  42. /*
  43. * 可变长参数 在调用的的时候可以使用任意个数的参数
  44. */
  45. int sum(int...var) {
  46. def total = 0
  47. for(i in var) {
  48. total +=i
  49. }
  50. return total
  51. }
  52. println sum(1,2,2)
  53.  
  54. /*
  55. *枚举
  56. */
  57. enum Day{
  58. SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
  59.  
  60. THURSDAY, FRIDAY, SATURDAY
  61. }
  62.  
  63. println Day.FRIDAY
  64. /*
  65. * 同java5一样,groovy支持带构造器、属性和方法的enum
  66. */
  67. enum Planet{
  68. MERCURY(3.303e+23,2.49376e6),
  69. MARS(3.303e+23,2.49376e6),
  70. EARTH(5.976e+24, 6.37814e6)
  71.  
  72. double mass
  73. double radius
  74. Planet(double mass,double radius) {
  75. this.mass = mass
  76. this.radius = radius
  77. }
  78.  
  79. void printMe() {
  80. println "${name()} has a mass of ${mass} and a radius of ${radius}"
  81. }
  82. }
  83.  
  84. Planet.EARTH.printMe()
  85. /*
  86. * 可以.方法查看enum相关的api 有很多
  87. */
  88. println Planet.EARTH.name()
  89.  
  90. /*
  91. * metaClass 元类 通过元类,可以为对象增加方法 体现为groovy的动态性
  92. */
  93. def message = "hello world"
  94. print message.metaClass
  95.  
  96. //message.metaClass.methods.each { println it.name }
  97. //message.metaClass.properties.each {println it.getKey()}

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

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

    至此groovy语言学习-语法基础就结束了,新的工作已经安排下来,要干活了. 对groovy了解到一定程度之后就可以在java项目中对其进行引入了.为此新建了一个微型的项目,个人觉得千言万语不如代码实 ...

  2. Groovy语言学习--语法基础(1)

    2018年11月末,从上家公司离职后进入现在的公司.进入项目以来,发现项目中有很多groovy脚本,以前没接触过groovy,抽时间系统地学一下,也方便后期项目的开发和维护. groovy和java的 ...

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

    语法基础到此就结束了,毕竟其和Java许多地方并无差别.groovy作为脚本,是为了能更好地随业务变化调整规则,我根据自己对规则的理解 通过一张图简单描述一个groovy脚本场景:由于货币膨胀,经济收 ...

  4. Groovy语言学习--语法基础(2)

    集合和闭包 因为之前没接触过C++等,对指针也一窍不通.个人不成熟的了解 闭包是一种数据类型,可以很方便的执行一段独立的代码 简化方法的调用 package groovy /** * Groovy容器 ...

  5. c语言学习之基础知识点介绍(三):scanf函数

    本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...

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

    一.点语法介绍 /* 以前封装后,要给属性赋值,必须调用方法 这样做,有两个缺点: 1.代码量多,调用方法要写的东西多. 2.看起来并不像是给属性赋值,也不像取值. 我们用点语法就可以更好的解决! 点 ...

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

    一.方法重写 /* 重写:当子类继承了父类的方法时,如果觉得父类的方法不适合,那么可以对这个方法进行重新实现,那么这个就重写. 注意:也就是说,一定只能发生在父类和子类关系中. 然后是子类重新实现父类 ...

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

    一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...

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

      一.第一个OC程序 #import <Foundation/Foundation.h> //导入头文件 int main(int argc, const char * argv[]) ...

随机推荐

  1. WPF:完美自定义MeaagseBox 2.0

    很久前做个一个MessageBox,原文链接:http://www.cnblogs.com/DoNetCoder/p/3843658.html. 不过对比MessageBox还有一些瑕疵.这些天有时间 ...

  2. WPF:Hyperlink如何绑定数据

    <TextBlock> <Hyperlink> <Run Text="{Binding PCFolderPath, Mode=OneWay}"/> ...

  3. spark查看DF的partition数目及每个partition中的数据量【集群模式】

    println("--------------------"+data.rdd.getNumPartitions) // 获取DF中partition的数目 val partiti ...

  4. DBA思考系列——学会拒绝不合理的需求

    DBA思考系列--学会拒绝不合理的需求   一直以来,个性都比较随意,一般很少拒绝开发人员的一些需求(有点老好人的感觉). 这点一直被老大诟病,也一直在反省!最近又有一件事情,让我觉得:应该学会拒绝不 ...

  5. aspectj 简单的模拟权限检查、事务、日志记录

    package com.ij34.service; public class Hello { public void he() { System.out.println("执行Hello的h ...

  6. [20181130]control file sequential read.txt

    [20181130]control file sequential read.txt --//昨天上午探究了大量控制文件读的情况,链接:http://blog.itpub.net/267265/vie ...

  7. 3d max 动作Take 001改名

    问题描述 带动作的Fbx文件导入Unity之后,动作名字为Take 001,如下所示: 在max那边是没有办法改名的,只能在Unity中改名. 方法1 1. 选中动画文件,按Ctrl + D,复制一份 ...

  8. Python: 内置私有方法

    ################## __new__ ##################@staticmethod__new__(cls [, ...])类的构造器,创建某个类的实例,返回值应该是c ...

  9. 对讲解OS文献的反思

    前天把OS中Taneubaum写的那篇论文Can We Make Operating Systems Reliable and Secure?给班上的同学讲解了一遍.这篇文献我花了三天的时间才把它弄好 ...

  10. June 11. 2018 Week 24th, Monday

    Love is the beauty of the soul. 爱是灵魂之美. From Saint Augustine. The complete version of this quote goe ...