美文网首页
Groovy<第二篇>:基础语法(1)

Groovy<第二篇>:基础语法(1)

作者: NoBugException | 来源:发表于2020-05-05 23:19 被阅读0次

    [在Groovy中导入语句]

    一般情况下,如果使用某个API,需要使用import关键字引用对应的包,就拿MarkupBuilder类举例,它可能是最常用的创建HTML或XML标记的类之一。

    图片.png

    默认情况下,Groovy已经引用了如下API导包,可以不需要我们去刻意的导入如下包:

    import java.lang.*
    import java.util.*
    import java.io.*
    import java.net.*
    
    import groovy.lang.*
    import groovy.util.*
    
    import java.math.BigInteger
    import java.math.BigDecimal
    

    [Groovy注释]

    Groovy的注释和Java是一样的,分为文档注释多行注释单行注释

    /**
     * 文档注释
     * @param args
     */
    public static void main(String[] args){
    
    
        /*  多行注释
        Object o = "Object";
        int result = method(o);
        */
    
        //当行注释
        //printf("result:"+result)
    
    }
    

    [分号]

    Groovy和Java一样,都是使用" ;"作为语句的结束符号。
    Groovy比较特殊,一个语法的结束可以不使用分号,用换行代替即可。

        println("Hello Word")
        println("Hello Word")
        println("Hello Word")
        println("Hello Word")
        println("Hello Word")
        println("Hello Word")
    

    如上面的代码,可以不使用分号。

    [变量的定义]

    Java中,如果定义一个变量,必然使用基本数据类型(int,float,double,byte,char,long,short)和对象类型,如下:

        int a = 1;
        float b = 2.1f;
        double c = 3.1;
        String d = "4";
        MarkupBuilder xml;
    

    Groovy可以使用弱类型def定义那些变量,如下:

        def a = 1;
        def b = 2.1f;
        def c = 3.1;
        def d = "4";
        def xml;
    

    [关键字]

    Groovy关键字有:

    -- -- -- --
    as assert break case
    catch class const continue
    def default do else
    enum extends false Finally
    for goto if implements
    import in instanceof interface
    new pull package return
    super switch this throw
    throws trait true try
    while

    [自动装箱]

    什么叫装箱? Java中,将基本数据类型转换成对象的过程。(如int转换成Integer)

        byte a = 1;
        println(a.getClass().getName());
    

    看一下上面这两句代码,在Java语言下,这代码会报错的,因为a是基本数据类型,不是对象,所以无法获取到Class。
    在Groovy语言下,也支持基本数据类型的使用,但是,基本数据类型会被自动转换成对象,也就是自动装箱

    先来看下如下代码:

        byte a = 1
        println(a.getClass().getName())
        short b = 2
        println(b.getClass().getName())
        int c = 3
        println(c.getClass().getName())
        long d = 4L
        println(d.getClass().getName())
        float e = 5.1f
        println(e.getClass().getName())
        double f = 6.1
        println(f.getClass().getName())
        char g = 'z'
        println(g.getClass().getName())
        boolean h = false
        println(h.getClass().getName())
        String j = "字符串"
        println(j.getClass().getName())
        Hello hello = new Hello()
        println(hello.getClass().getName())
    

    它们的打印结果如下:

        java.lang.Byte
        java.lang.Short
        java.lang.Integer
        java.lang.Long
        java.lang.Float
        java.lang.Double
        java.lang.Character
        java.lang.Boolean
        java.lang.String
        Hello
    

    如果使用Groovy专属定义数据类型的def关键字,那么代码如下:

        def a = 1
        println(a.getClass().getName())
        def b = 2
        println(b.getClass().getName())
        def c = 3
        println(c.getClass().getName())
        def d = 4L
        println(d.getClass().getName())
        def e = 5.1f
        println(e.getClass().getName())
        def f = 6.1
        println(f.getClass().getName())
        def g = 'z'
        println(g.getClass().getName())
        def h = false
        println(h.getClass().getName())
        def j = "字符串"
        println(j.getClass().getName())
        def hello = new Hello()
        println(hello.getClass().getName())
    

    它们的打印结果如下:

        java.lang.Integer
        java.lang.Integer
        java.lang.Integer
        java.lang.Long
        java.lang.Float
        java.math.BigDecimal
        java.lang.String
        java.lang.Boolean
        java.lang.String
        Hello
    

    从打印结果的比较,很容易看出其中的区别。

    [类型强转]

        double f = 6.1
        String j = "字符串"
        f = j
    

    上面的三行代码我想大家都不陌生,第三句是不同类型数据的赋值,不同数据类型的赋值必须强壮,如果没有强转会报以下的错误

    图片.png

    在Groovy语言下,如果使用def关键字定义变量,那么就不需要考虑类型转换异常。

    我们修改下代码:

        def f = 6.1
        def j = "字符串"
        f = j
        println(f+":"+f.getClass().getName())
    

    修改代码后的打印结果如下:

    图片.png

    我们发现,使用弱类型def定义的变量根本不需要担心类型转换异常。

    [变量区分大小写]

    Groovy和Java一样,变量都区分大小写。

        def a = 1.1
        def A = "字符串"
        println a
        println A
    

    打印结果如下:

    图片.png

    [字符串]

    Groovy的字符串可以由单引号修饰,也可以由双引号修饰。如:

        def str1 = '单引号'
        def str2 = "双引号"
    

    这里建议使用双引号,因为如果字符串中含有变量,那么这个字符串只能使用双引号修饰。

    如:

        def name = "张三"
        println '${name}在上厕所'
    

    以上代码的打印结果是:

    ${name}在上厕所
    

    name变量没有生效,将单引号换成双引号之后,如下:

        def name = "张三"
        println "${name}在上厕所"
    

    这样,打印结果就正常了

    张三在上厕所
    

    Groovy字符串有一个地方特别需要注意,即单引号双引号都可以表示字符串。

    println 'aaaa'
    

    所以,如果定义一个字符

    char a = 'a'
    

    Groovy编译器也会认为是一个字符串,编译器会将char转换成String包装类型。

    [本章完...]

    相关文章

      网友评论

          本文标题:Groovy<第二篇>:基础语法(1)

          本文链接:https://www.haomeiwen.com/subject/ynyughtx.html