• groovy 语言学习


    写在前面

    本文更偏向于有一定java基础的人学习,主要区分groovy 语言和java的区别。

    当然,没有java基础您也可以学习groovy,请跳转 :Groovy 零基础入门

    如果不想配置Groovy环境:Groovy在线编程

    1、配置Groovy环境

    下载地址:https://groovy.apache.org/download.html
    下载完直接安装。

    安装完成,在cmd中输入:groovysh 以验证是否安装成功。

    2、基本语法

    Groovy 是一种基于 Java 平台的面向对象语言。在Groovy中,所有java代码都支持

    2.1、类、方法、变量

    // 注释和java中一样
    
    // def 定义任何类型变量
    def ex = new Example();
    
    // 行尾分号可不写
    println(ex.mul(3))
    
    // 方法调用括号可不写
    println ex.mul(4)
    
    // 默认类和方法是pulic,字段是private
    class Example {
    	int n = 2
    	
    	def mul(x) {
        	return x*n
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    用$符号插入变量

    def name = '小明'                             // 单引号,里面只能是字符串
    def age = 20
    def xiaoming = "我叫$name,今年 $age 岁"     // 双引号,可以有$
    println xiaoming                            // 输出内容:我叫小明,今年20岁
    
    • 1
    • 2
    • 3
    • 4

    类中字段赋值

    class Example {
       static void main(String[] args) {
          def st = new Student(name: 'John',ID:1);
       } 
    }
     
    class Student {
       String name
       int ID; 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.2、list、map、Range、闭包

    def list = ['USA', 'UK', 'FRANCE', 'INDIA']
    list[0] = 'USA1'
    println list.get(0)
    
    def map = ['key':'value']
    println map.get('key')
    
    // Range类型
    def range = 1..5      // 相当于1、2、3、4、5
    def range1 = 5..<8    // 相当于5、6、7
    
    // 闭包相当于封装一个代码块
    def ab = { a,b -> println a+b } 
    ab(2,3)                                // 打印 5
    def xxx = { println '你好' } 
    xxx()                                  // 打印 你好
    def xxx1 = { String s -> println s } 
    xxx1('你好')                           // 打印 你好
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2.3、循环

    // 第一种循环
    	def list = [1,2,3,4,5]
    	list.each {
    	      println it
    	}
    
    // 第二种循环
        for  ( i  in  0..2 ) {
            println("hello Groovy")
         }
         
    // 第三种循环
       3.times {
            println("hello Groovy")
        }
    
    // 第四种循环
       0.upto(2) {
            println("hello Groovy")
        }
    
    // 除此之外,java的while也支持
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2.4、正则

    def reg1 =~ 'he*llo'
    def reg2 = /he*llo/
    println "类型是: ${reg1.class}"          // 类型是: java.util.regex.Pattern
    println "类型是: ${reg2.class}"          // 类型是: java.lang.String
    println "hello".matches(reg1)            // true
    println "hello".matches(reg2)            // true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    =~ 可以得到 java.util.regex.Matcher
    ==~ 可以得到布尔类型

    def val1 = "hello" =~ "he*llo"
    println val1.class                        // java.util.regex.Matcher
    print val1.matches()                      // true
    
    def val2 = "hello" ==~ "he*llo"
    print val2                                // true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.5、main方法

    在类中程序从main方法开始执行,没有类就直接从上而下执行

    class Example {
       static void main(String[] args) {
          Student st = new Student();
          st.StudentID = 1;
          st.Marks1 = 10;
          println(st.DisplayMarks());
       } 
    } 
    
    interface Marks { 
       void DisplayMarks(); 
    } 
    
    class Student implements Marks {
       int StudentID
       int Marks1;
    	
       void DisplayMarks() {
          println(Marks1);
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    2.6、Traits 特征

    可以使用 implement 关键字以与接口类似的方式实现特征。

    class Example {
       static void main(String[] args) {
          Student st = new Student();
          st.StudentID = 1;
          st.Marks1 = 10; 
          println(st.DisplayMarks());
       } 
    } 
    
    trait Marks { 
       void DisplayMarks() {
          println("Display Marks");
       } 
    } 
    
    class Student implements Marks { 
       int StudentID
       int Marks1;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    3、xml文件读取

    示例xml: 1.xml

    <collection shelf = "New Arrivals"> 
       <movie title = "Enemy Behind"> 
          <type>War, Thrillertype> 
          <format>DVDformat> 
          <year>2003year> 
          <rating>PGrating> 
          <stars>10stars> 
          <description>Talk about a US-Japan wardescription> 
       movie> 
    	
       <movie title = "Transformers"> 
          <type>Anime, Science Fictiontype>
          <format>DVDformat> 
          <year>1989year> 
          <rating>Rrating> 
          <stars>8stars> 
          <description>A schientific fictiondescription> 
       movie>
    collection> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    读取1.xml

    import groovy.xml.MarkupBuilder 
    import groovy.util.*
    
    class Example {
    
       static void main(String[] args) { 
    	
          def parser = new XmlParser()
          def doc = parser.parse("D:\\1.xml");
    		
          doc.movie.each{ bk->
             print("Movie Name:")
             println "${bk['@title']}"
    			
             print("Movie Type:")
             println "${bk.type[0].text()}"
    			
             print("Movie Format:")
             println "${bk.format[0].text()}"
    			
             print("Movie year:")
             println "${bk.year[0].text()}"
    			
             print("Movie rating:")
             println "${bk.rating[0].text()}"
    			
             print("Movie stars:")
             println "${bk.stars[0].text()}"
    			
             print("Movie description:")
             println "${bk.description[0].text()}"
             println("*******************************")
          }
       }
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    4、Json

    import groovy.json.JsonOutput
    
    class Example {
       static void main(String[] args) {
          def output = JsonOutput.toJson([ new Student(name: 'John',ID:1),
             new Student(name: 'Mark',ID:2)])
          println(output);  
       } 
    }
     
    class Student {
       String name
       int ID; 
    }
    
    
    // 输出结果:[{"name":"John","ID":1},{"name":"Mark","ID":2}]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    4+N架构:从0到1搭建保险个性化推荐能力【转载】
    joi:定义多个自定义错误信息
    FX110网:香港交易所宣布开发Orion衍生品平台,预计于 2028 年推出
    vue 基于vue-seamless-scroll无缝滚动的用法和遇到的问题解决
    线上Electron应用具备哪些特征?
    基于Java微服务方案的商品秒杀系统
    小程序中如何查看会员的余额和变更记录
    手机无人直播手机用哪些软件系统最好?
    数据库——知识1
    java 高级面试题(借鉴)(上)
  • 原文地址:https://blog.csdn.net/a__int__/article/details/127832273