• groovy基础学习


    范围运算符

    1. class HelloGroovy {
    2. static void main(args) {
    3. def range = 5..10; //定义一个简单的整数范围,存储一个局部变量,下限为0,上限为1
    4. println(range);
    5. println(range.get(2));
    6. }
    7. }

    Groovy 中的方法是使用返回类型或使用 def 关键字定义的。方法可以接收任意数量的参数。定义参数时,不必显式定义类型。可以添加修饰符,如 public,private 和 protected。默认情况下,如果未提供可见性修饰符,则该方法为 public。

    1. class Example {
    2. static def DisplayName() {
    3. println("This is how methods work in groovy");
    4. println("This is an example of a simple method");
    5. }
    6. static void main(String[] args) {
    7. DisplayName();
    8. }
    9. }

    默认参数

    如果没有值传递给方法的参数,则使用缺省值。 如果使用非默认和默认参数,则必须注意,默认参数应在参数列表的末尾定义。

    groovy文件I/O

    重点:file类

    读取文件

    1. import java.io.File
    2. class Example {
    3. static void main(String[] args) {
    4. new File("E:/Example.txt").eachLine {
    5. line -> println "line : $line";
    6. }
    7. }
    8. }

    读取文件的内容到字符串

    可以使用文件类的text属性

    1. class Example {
    2. static void main(String[] args) {
    3. File file = new File("E:/Example.txt")
    4. println file.text
    5. }
    6. }

    写入文件

    使用write类

    1. import java.io.File
    2. class Example {
    3. static void main(String[] args) {
    4. new File('E:/','Example.txt').withWriter('utf-8') {
    5. writer -> writer.writeLine 'Hello World'
    6. }
    7. }
    8. }

    获取文件的大小

    如果要获取文件的大小,可以使用文件类的length属性来获取

    1. class Example {
    2. static void main(String[] args) {
    3. File file = new File("E:/Example.txt")
    4. println "The file ${file.absolutePath} has ${file.length()} bytes"
    5. }
    6. }

    测试文件是否是目录

    如果要查看路径是文件还是目录,可以使用File类的isFile和isDirectory选项

    1. class Example {
    2. static void main(String[] args) {
    3. def file = new File('E:/')
    4. println "File? ${file.isFile()}"
    5. println "Directory? ${file.isDirectory()}"
    6. }
    7. }

    创建目录

    如果要创建一个新目录,可以使用File类的mkdir函数。

    1. class Example {
    2. static void main(String[] args) {
    3. def file = new File('E:/Directory')
    4. file.mkdir()
    5. }
    6. }

    删除文件

    如果要删除文件,可以使用File类的delete功能。

    1. class Example {
    2. static void main(String[] args) {
    3. def file = new File('E:/Example.txt')
    4. file.delete()
    5. }
    6. }

    复制文件

    Groovy还提供将内容从一个文件复制到另一个文件的功能

    1. class Example {
    2. static void main(String[] args) {
    3. def src = new File("E:/Example.txt")
    4. def dst = new File("E:/Example1.txt")
    5. dst << src.text
    6. }
    7. }

    获取目录内容

    Groovy还提供了列出驱动器中的驱动器和文件的功能。

    1. class Example {
    2. static void main(String[] args) {
    3. def rootFiles = new File("test").listRoots()
    4. rootFiles.each {
    5. file -> println file.absolutePath
    6. }
    7. }
    8. }

    使用File类的eachFile函数列出特定目录中的文件。

    1. class Example {
    2. static void main(String[] args) {
    3. new File("E:/Temp").eachFile() {
    4. file->println file.getAbsolutePath()
    5. }
    6. }
    7. }

    递归显示目录及其子目录中的所有文件,则可以使用File类的eachFileRecurse函数

    1. class Example {
    2. static void main(String[] args) {
    3. new File("E:/temp").eachFileRecurse() {
    4. file -> println file.getAbsolutePath()
    5. }
    6. }
    7. }

    特征

    特征是语言的结构构造,允许 -

    • 行为的组成。
    • 接口的运行时实现。
    • 与静态类型检查/编译的兼容性

    它们可以被看作是承载默认实现和状态的接口。使用trait关键字定义 trait

    可以使用 implement 关键字以类似于接口的方式实现 trait。

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

    实现接口

    Traits 可以实现接口,在这种情况下,使用 interface 关键字声明接口。

    定义(interface)一个接口,

    trait定义的Marks特征实现(继承)了Total接口,

    Student类再继承Marks特征,拓展这个特征

    实现类完成功能实现

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

    属性

    特征可以定义属性。下面给出了具有属性的trait的示例。

    行为的构成 

    特征可以用于以受控的方式实现多重继承

    扩展特征

    特征可能扩展另一个特征,在这种情况下,必须使用extends关键字

    Groovy闭包

    闭包closure是一个短的匿名代码块。它通常跨越几行代码。一个方法甚至可以将代码块作为参数。它们是匿名的。

    1. class Example {
    2. static void main(String[] args) {
    3. def clos = {println "Hello World"};
    4. clos.call();
    5. }
    6. }

    代码行 - {println“Hello World”}被称为闭包。此标识符引用的代码块可以使用call语句执行。

    执行后,输出Hello World

    闭包也可以包含形式参数,以使它们更有用,就像Groovy中的方法一样。

    1. class Example {
    2. static void main(String[] args) {
    3. def clos = {param->println "Hello ${param}"};
    4. clos.call("World");
    5. }
    6. }

    使用$ {param},这导致closure接受一个参数。当通过clos.call语句调用闭包时,我们现在可以选择将一个参数传递给闭包。

    运行后,输出Hello world

    1. class Example {
    2. static void main(String[] args) {
    3. def clos = {println "Hello ${it}"}; //隐式单个参数
    4. clos.call("World");
    5. }
    6. }

    包可以在定义闭包时引用变量。下面定义了一个str1变量,并在clos中引用

    1. class Example {
    2. static void main(String[] args) {
    3. def str1 = "Hello";
    4. def clos = {param -> println "${str1} ${param}"}
    5. clos.call("World");
    6. // We are now changing the value of the String str1 which is referenced in the closure
    7. str1 = "Welcome";
    8. clos.call("World");
    9. }
    10. }

    在方法中使用闭包

    闭包也可以用作方法的参数。在Groovy中,很多用于数据类型(例如列表和集合)的内置方法都有闭包作为参数类型。

    1. class Example {
    2. //静态方法Display,以一个闭包为参数
    3. def static Display(clo) {
    4. // This time the $param parameter gets replaced by the string "Inner"
    5. clo.call("Inner");
    6. }
    7. static void main(String[] args) {
    8. def str1 = "Hello";
    9. def clos = { param -> println "${str1} ${param}" }
    10. clos.call("World");
    11. // We are now changing the value of the String str1 which is referenced in the closure
    12. str1 = "Welcome";
    13. clos.call("World");
    14. 将定义的闭包作为参数传递到Dispaly方法中
    15. // Passing our closure to a method
    16. Example.Display(clos);
    17. }
    18. }

  • 相关阅读:
    Vue2与Vue3区别
    云计算:火山引擎云原生大数据在金融行业的实践
    java计算机毕业设计-民宿管理系统-演示录像2020源码+系统+mysql数据库+lw文档
    高效并发:Synchornized的锁优化详解
    IO多路转接 —— 认识 poll 函数
    特征工程(六)—(2)利用LDA进行特征转换
    iOS开发Swift-10-位置授权, cocoapods,API,天气获取,城市获取-和风天气App首页代码
    【AHK】 MacOS复制粘贴习惯/MacOS转win键位使用习惯修改建议
    小目标检测:基于切图检测的yolov5小目标训练
    Mac多媒体播放器 Movist Pro v2.11.4中文激活版下载
  • 原文地址:https://blog.csdn.net/cvpatient/article/details/126171190