atitit groovy 总结java 提升效率
atitit?groovy?总结java?提升效率? ? #---环境配置 1 #------安装麻烦的 2 三、创建groovy项目 2 3、??添加?Groovy?类 2 4、??编译运行groovy类 3 Groovy断点调试不生效的解决 4 Groovy实现运行原理 5 1.?Groovy脚本的运行.. 5 2.?Groovy类的运行.. 5 Groovy语法优点: 6 3.?动态类型def 6 4.?循环变量不需要def 6 5.?String?和Gstring 6 6.?范围 6 7.?默认参数值 7 8.?集合简化操作 7 9.?闭包(Closure) 8 10.?Groovy类map构造函数 9 11.?(5)????不需要return 9 12.?(6)????不需要()号 9 13.??运算符?避免出现空指针异常, 10 14.?动态添加方法metaClass 10 15.?正则表达式常量在Java中没有,在Groovy中表示为?/pattern/ 11 16.?不强制捕获检查异常(checked?exception)外?(这跟C#很像,如果我没记错的话?:)?????????并且在方法声明时,也可以不写throws语句。 11 17.?.Groovy会自动导入java.lang.*,?java.util.*,?java.net.*,?java.io.*,?java.math.BigInteger,?java.math.BigDecimal,???groovy.lang.*,?groovy.util.*,而Java则只自动导入java.lang.* 11 Groovy和java的不兼容性 11 Groovy的缺点..基于java/jvm 12 参考 12 ? 作者?老哇的爪子?Attilax?艾龙,??EMAIL:1466519819@qq.com 转载请注明来源:?http://blog.csdn.net/attilax ? #---环境配置? ? 1.groovy?eclipse?插件_groovy?eclipse下载?2.9??-?新云软件下载.htm roovy?Eclipse?Plugin(插件)是script语言Groovy的开发辅助工具,它提供编辑,编译,以及执行groovy脚本的功能。支持Eclipse?3.2以及以上的版本。本站提供的是官网最新版支持groovy?eclipse?4.3【For?Eclipse?4.3?(Kepler)】 已经带了?Groovy2.1???sdk?...不用单个的安装groovy???runtime...也不用设置什么环境变量.. ? ? 2.Eclipse?4.3?(Kepler) #------安装麻烦的使用maket?update?三不行.. roovy网站只有plugin?update?url,还是不行... 只好下载离线pakage从软件站点..??78M.尺寸不小的 使用archi安装还是不行... 只好使用F:eclipsedropins料得个直黑头才..ok... ? ? ? 三、创建groovy项目? 1、??新建一个groovy项目 ? New?-->?Project?à?Java?Project?创建一个java项目。为了方便管理,建议在source中建两个source文件夹java和groovy,分别用于存储java源文件和groovy源文件: ? ? 3、??添加?Groovy?类? 在项目groovy源文件下右键,New?>>>Groovy?Class,生成/grv1/src/pkg1/g1.groovy ? package?pkg1 import?com.attilax.core ? import?static??com.attilax.core.*; /** ?*?@author??attilax?老哇的爪子 ?*@since??2014年5月25日?下午1:22:02$ ?*/ class?g1?{ ? /** @author?attilax?老哇的爪子 @since??2014年5月25日?下午1:22:02$ ?*?@param?args ?*/ public?static?void?main(String[]?args)?{ //?attilax?老哇的爪子??下午1:22:02???2014年5月25日? println?("---2") def?$a="hello?world" println?$a } //??attilax?老哇的爪子?下午1:22:02???2014年5月25日??? } ? ? 4、??编译运行groovy类? 在源文件上右键,Compile?Groovy?File,然后右键, Run?As?groovy?script?/??java?appliacation?效果一样 Run?As?à?Groovy??console,走打开了groovy的控制台程序gui,?是个mini?ide,可以edit/run??groovy?script ? ? ? ? Groovy断点调试不生效的解决添加?package定义....贝儿不生效. ? package?pkg1 println?"ac"? println?"ac2" Groovy实现运行原理1.?Groovy脚本的运行..?·?//?对于groovy程序来说,可以没有类和main方法,直接书写的代码就可以运行?? ?实际上,最终编译器仍会为这段代码生成一个类,类名和文件名相同,只不过从源码的角度上,确实不用写类或者main方法了,这一点很像Javascript等其它脚本语言。 println?"ac"? println?"ac2" ? ? "F:jre7binjavaw.exe"?-agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:1723?-Dgroovy.home=/F:/eclipse/plugins/org.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASE/?-Dfile.encoding=GBK?-classpath?"D:workSpacegrv1bin;F:eclipsepluginsorg.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASElibgroovy-all-2.1.5.jar;F:eclipsepluginsorg.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASElibbsf-2.4.0.jar;F:eclipsepluginsorg.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASElibivy-2.2.0.jar;F:eclipsepluginsorg.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASElibservlet-api-2.4.jar;C:Documents?and?SettingsAdministrator.groovygreclipseglobal_dsld_support;F:eclipsepluginsorg.codehaus.groovy_2.1.5.xx-20130703-1600-e43-RELEASEplugin_dsld_support"?org.codehaus.groovy.tools.GroovyStarter?--classpath?"D:workSpacegrv1src;D:workSpacegrv1bin"?--main?groovy.ui.GroovyMain?"D:workSpacegrv1srcpkg1g3.groovy" ? 2.?Groovy类的运行..class?g5?{ //??attilax?老哇的爪子?下午2:53:50???2014年5月25日??? //?静态的main方法作为程序入口 static?main(args)?{ ?? //?使用println命令输出 println?"HelloWorld?in?class" } ? } Groovy语法优点:3.?动态类型def?实际上Groovy同时支持强类型变量和“弱”类型变量,强类型变量拥有自己的类型,而“弱”类型变量则全部会被编译为Object类型,从代码的角度上,Groovy的变量无需声明类型了: 4.??循环变量不需要deffor(i?=?0;?i?<?5;?i++){ ??println?val ?} ?for(i?in?0..5) ? 5.?String?和Gstring除了标准的java.lang.String以外(用’号括住),groovy还支持Gstring字符串类型(用“号括住)。把上面的for循环中的语句改成: ??println?"This?is?${i}:${val}" 运行一下,你就会明白什么是Gstring。 6.?范围这个跟pascal中的“子界”是一样的。在前面的for循环介绍中我们已经使用过的for(i?in?0..5)这样的用法,其中的0..5就是一个范围。 范围?是一系列的值。例如?“0..4”?表明包含?整数0、1、2、3、4。Groovy?还支持排除范围,“0..<4”?表示0、1、2、3。还可以创建字符范围:“a..e”?相当于a、b、c、d、e。“a..<e”?包括小于e?的所有值。 范围主要在for循环中使用。 7.?默认参数值可以为方法指定默认参数值。我们修改repeat方法的定义: def?repeat(val,repeat=3){ ?for(i?in?0..<repeat){ ??println?"This?is?${i}:${val}" ?} } 可以看到,repeat方法增加了一个参数repeat(并且给了一个默认值3),用于指定循环次数。 当我们不指定第2个参数调用repeat方法时,repeat参数取默认值3。 8.?集合简化操作Groovy支持最常见的两个java集合:java.util.Collection和java.util.Map。前面所说的范围实际也是集合的一种(java.util.List)。 (1)?Collection Groovy?中这样来定义一个Collection: def?collect=["a","b","c"] 除了声明时往集合中添加元素外,还可以用以下方式向集合中添加元素: collect.add(1); collect<<"come?on"; collect[collect.size()]=100.0 Collection使用类似数组下标的方式进行检索: println?collect[collect.size()-1] println?collect[5] groovy支持负索引: println?collect[-1]//索引其倒数第1个元素 println?collect[-2]?//索引其倒数第2个元素 Collection支持集合运算: collect=collect+5//在集合中添加元素5 println?collect[collect.size()-1] collect=collect-'a'//在集合中减去元素a(第1个) println?collect[0]//现在第1个元素变成b了 同样地,你可以往集合中添加另一个集合或删除一个集合: collect=collect-collect[0..4]//把集合中的前5个元素去掉 println?collect[0]//现在集合中仅有一个元素,即原来的最后一个元素 println?collect[-1]//也可以用负索引,证明最后一个元素就是第一个元素 (2)?Map Map是“键-值”对的集合,在groovy中,键不一定是String,可以是任何对象(实际上Groovy中的Map就是java.util.Linke?dHashMap)。 如此可以定义一个Map: def?map=['name':'john','age':14,'sex':'boy'] 添加项: map=map+['weight':25]//添加john的体重 map.put('length',1.27)//添加john的身高 map.father='Keller'//添加john的父亲 可以用两种方式检索值: println?map['father']//通过key作为下标索引 println?map.length//通过key作为成员名索引 ? ? ? 9.???????闭包(Closure)闭包是用{符号括起来的代码块,它可以被单独运行或调用,也可以被命名。类似‘匿名类’或内联函数的概念。 闭包中最常见的应用是对集合进行迭代,下面定义了3个闭包对map进行了迭代: map.each({key,value->//key,value两个参数用于接受每个元素的键/值 println?"$key:$value"}) map.each{println?it}//it是一个关键字,代表map集合的每个元素 map.each({?println?it.getKey()+"-->"+it.getValue()}) 除了用于迭代之外,闭包也可以单独定义: def?say={word-> println?"Hi,$word!" } 调用: say('groovy') say.call('groovy&grails') 输出: Hi,groovy! Hi,groovy&grails! ? 10.?Groovy类map构造函数不在需要程序员声明任何构造函数,因为groovy自动提供了足够你使用的构造函数。不用担心构造函数不够多,因为实际上只需要两个构造函数(1个不带参数的默认构造函数,1个只带一个map参数的构造函数—由于是map类型,通过这个参数你可以在构造对象时任意初始化它的成员变量)。 ? 11.?(5)????不需要returnGroovy中,方法不需要return来返回值吗?这个似乎很难理解。看后面的代码吧。 因此,groovy风格的类是这样的: 12.?(6)????不需要()号Groovy中方法调用可以省略()号(构造函数除外),也就是说下面两句是等同的: ? person1.setName?'kk' person1.setName('kk') ? 13.????运算符?避免出现空指针异常,在java中,有时候为了避免出现空指针异常,我们通常需要这样的技巧: if(rs!=null){ rs.next() …?… } 在groovy中,可以使用?操作符达到同样的目的: rs?.next() ?在这里是一个条件运算符,如果?前面的对象非null,执行后面的方法,否则什么也不做。 14.??动态添加方法metaClassGroovy所有的对象都有一个元类metaClass,我们可以通过metaClass属性访问该元类。通过元类,可以为这个对象增加方法(在java中不可想象)!见下面的代码,msg是一个String,通过元类,我们为msg增加了一个String?类中所没有的方法up: def?msg?=?"Hello!" println?msg.metaClass String.metaClass.up?=?{??delegate.toUpperCase()?} println?msg.up() 通过元类,我们还可以检索对象所拥有的方法和属性(就象反射): msg.metaClass.methods.each?{?println?it.name?} msg.metaClass.properties.each?{?println?it.name?} 甚至我们可以看到我们刚才添加的up方法。 我们可以通过元类判断有没有一个叫up的方法,然后再调用它: if?(msg.metaClass.respondsTo(msg,?'up'))?{ println?msg.toUpperCase() } 当然,也可以推断它有没有一个叫bytes的属性: if?(msg.metaClass.hasProperty(msg,?'bytes'))?{ println?msg.bytes.encodeBase64() } 15.?正则表达式常量在Java中没有,在Groovy中表示为?/pattern/?16.?不强制捕获检查异常(checked?exception)外?(这跟C#很像,如果我没记错的话?:)?????????并且在方法声明时,也可以不写throws语句。17.?.Groovy会自动导入java.lang.*,?groovy.util.*,而Java则只自动导入java.lang.*Groovy和java的不兼容性一开始,走有groovy的不兼容性??{}?大的括号不支持 不过中间走ok了. def?s="" ?{} println?"a" Groovy的缺点..基于java/jvm总结:Groovy还是仅仅语言层次提升了效率.工具没方法...提升效率是有的,大概雅要有个20%吧..还是比较好的.. 参考Groovy入门教程?-?kmyhy的专栏?-?博客频道?-?CSDN.NET.htm Groovy无痛AOP之旅.htm Groovy探索之MOP?十四?对Java类使用Groovy语言的MOP?-?软件的信雅达?-?博客频道?-?CSDN.NET.htm (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |