• 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
  • 相关阅读:
    8月20日计算机视觉理论学习笔记——神经网络与BP算法
    Leetcode 2850. Minimum Moves to Spread Stones Over Grid
    SAP 第三方销售详解
    git本地搭建服务器[Vmware虚拟机访问window的git服务器]
    BigDecimal 类型的计算方法
    基于SSM的文章管理系统源代码+数据库,基于SSM的CMS内容管理系统源代码+数据库
    [附源码]java毕业设计在线课程网站
    Flask 实现增改及分页查询的完整 Demo
    [Realtek sdk-3.4.14b]RTL8197FH-VG 2.4G to WAN吞吐量低于60%的问题分析及解决方案
    AI大预言模型——ChatGPT在地学、GIS、气象、农业、生态、环境应用
  • 原文地址:https://blog.csdn.net/a__int__/article/details/127832273