如鹏网 大学生计算机学习社区

CowNew开源团队

http://www.cownew.com 邮件请联系 about521 at 163.com

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  363 随笔 :: 2 文章 :: 808 评论 :: 0 Trackbacks

由于工作需要,今天看了看Groovy,下面是学习过程的学习笔记:
基本原则:Java完全可以调用Groovy写好的类;Groovy完全可以调用Java写好的类;即使不使用Groovy的特有的语法,可以使用Java中的绝大部分传统写法。
1 如果使用 groovy.lang.*,grooby.util.*,java.lang.*,java.util.*,java.net.*中的类的时候无需import。
2、支持assert,比如assert 1==1,assert(true)
更高级的用法:assert('text'.3<<'hello').size==4*3+5
3、groovy支持弱类型声明def x=1
4、GroovyBean
class Book
{
   String title;//声明的是属性,而非字段
}
def g = new Book()
print g.title
print g.getTitle()
5 groovy中的==表示等于(equality),而非同一(identity),这与java不同。
6 def nick = 'Gina'
def book = 'Groovy'
assert '$nick is $book' = 'Gina is Groovy'
7 使用正则判断字符串匹配:assert '12345'=~/\d+/
8 groovy中可以直接对Integer类型使用四则运算,可以对int类型调用toString方法。
9 使用list:
def r =['a','b','c']
assert r[0]='a'
assert r.size()==9
使用map:
def http=[100:"cont",200:'ok']
assert http[200]=='ok'
http[800]='what?'
使用ranges:
def x=1..10
assert x.contains(5)
10 闭包:
(1)[1,2,3].each{entry->println entry}
(2)累加计算:其中upto表示从1遍历到10
def  counter=0
1.upto(10)
{
   number->
   counter = counter+number
}
println counter
11 动态执行:evaluate('1+2') 会打印出3
12 groovy中类型可以弱类型声明,也可以强类型声明,并且声明的时候会自动进行boxing,比如def a=1是可以的,int a=1也是可以的,而且第二种用法中声明的a是Integer类型的。
13 Groovy支持运算符重载,其实现方式和python类似,也就是类只要实现某个方法即可实现运算符重载,下面是运算符和对应方法:+ plus;- minus;* multiply;/ div;% mod;++ next;-- previous;** power;| or;& and;^ xor;~ negate;a[b] a.getAt(b);a[b] = c a.putAt(b,c);a<<b a.leftShift(b);a>>b a.rightShift(b);a>>>b a rightShiftUnsigned(b);
switch(a){case b:} b.isCase(a);a==b a.equals(b);
a<=>b a.compareTo(b);
a>b a.compareTo(b)>0;
a>=b a.compareTo(b)>=0;
a<b a.compareTo(b)<0;
a<=b a.compareTo(b)<=0;
a as type a.asType(typeClass)
14 字符串操作:
g="Hello Grooby!"
assert g[6..11] == 'Groovy'
assert g.count('0')==3
assert 'x'.padLeft(3)=='  x'
assert 'x'.padRight(3,'_')=='x__'
assert 'x'.center(3)==' x '
assert 'x'*3=='xxx'
15 字符串的LeftShift和切片的应用
g='Hello'
g<<' Groovy'
assert g instanceof java.lang.StringBuffer
g<<'!'
assert g.toString()=='Hello Groovy!'
g[1..4] = 'i'//替换ello为i,切片的典型应用
assert g.toString()=='Hi Grooby!'
list等collection类型同样支持切片
16 数字的方法:
def s = ''
10.times{s+='x'}
10.downto(0){x+='d'}
s=''
0.step(0.5,0.1){number->
s+=number+' '
}
assert s=='0 0.1 0.2 0.3 0.4'
17 List的常见操作
assert [1,[2,3]].flattern()==[1,2,3]//扁平化
assert [1,2,3].intersect([4,3,1])==[3,1]//交集
assert [1,2,3].disjoint([4.5,6])
list = [1,2,3]
assert list.pop()==3//像使用堆栈一样
assert [3,1,2].sort()==[1,2,3]
assert [1]==[1,1,1].unique()//去掉重复元素

def list=[1,2,3]
assert list.count(2)==1
assert list.max()==3
assert list.min()==1
def even = list.find{item->
 item%2==0
}
assert even ==2
assert list.every{item->
 item<5
}//所有的都小于5
assert list.any{item->
 item<2
}//任何一个小于5
list.reverseEach{item->
 store+=item
}//反向遍历

assert [1,2,3].join('-')=='1-2-3'
for(i in [1,2,3])
{
   println i
}
18 文件处理:
new File('a.txt').eachLine{println it}
19 groovy中xml处理非常简单,可以参考blogjava上的一篇名为“Groovy高效编程——生成XML文件”的文章。
20 Groovy中使用Swing构建界面:
import grooby.swing.SwingBuilder

swing = new SwingBuilder()
frame = swing.frame(titile:'Demo'){
  menuBar{
    menu('File'){
        menuItem 'New'
        menuItem 'Open'
    }
  }
  panle{
    label 'Label my'
    slider()
    comboBox(items:['1','2','3'])
  }
}
frame.pack()
frame.show()
21 groovy中简化了jdbc访问数据库的方法,提供了execute、eachRow等方法,无需开发人员关心关闭连接等问题。
22 java中运行grooby脚本的方法:
GroovyShell shell = new GroovyShell()
Object result = shell.evaluate("12+23")
23 Groovy解析引擎的类为GroovyScriptEngine
def engine = new GroovyScriptEngine(".")
def value = engine.run("test/MyScript.grooby",new Binding())

 

posted on 2007-05-31 20:17 CowNew开源团队 阅读(2888) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: