`
laodaobazi
  • 浏览: 272991 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Groovy应用(基本操作)

阅读更多

一、Groovy基本操作

Base.groovy

package com.jlee

import java.text.SimpleDateFormat
import java.util.Calendar


/**
 * @author JLee
 *
 */
public class Base{

	public test(){
		"***************";
	}
	
	//	7、闭包
	def foo(temp){
		temp.call("closure parameter") ;
		temp.call([1,2].collect{it*2}) ;
	}
	
	public static void main(args){
		
		//1、单行单条语句可以不用写“;”
		println "不用 分号 结尾"
		println "单行多条语句要有 分号"; println "但是建议不论什么情况都加上 分号 结尾"
		
		//2、语句可以跨多行
		def arr = [1,
		       2,
		       3,
		       4];
		println arr ;
		
		//3、支持表达式
		String str = "Hello World".replaceAll("World","Groovy") ;
		println "new string is ${str}" ;
		
		//4、可以直接调用Java类
		def sdf = new SimpleDateFormat("yyyy-MM-dd") ;
		def date = sdf.parse("2011-11-22") ;
		def cal = Calendar.getInstance() ;
		cal.setTime(date) ;
		println "The Time is ${cal.get(Calendar.YEAR)}-${cal.get(Calendar.MONTH)}-${cal.get(Calendar.DAY_OF_MONTH)}" ;
		
		//5、定义方法的时候返回类型可以不写(默认是Object),
		//并且可以不用写 return,调用方法时可以不用括号如 println,
		//只要有参数且没有歧义
		def sss = new Base().test() ;
		println sss ;
		
		//6、传递命名参数
		//只实现Map方法调用与JavaBean构造
		Bean bean = new Bean(id : "12123" , name : "JLee");
		//直接可以访问 private 的 field
		println bean.id + "   " + bean.getName() ;
		
		//7、闭包
		def closure = { println it } ;
		new Base().foo(closure) ;
		
		//8、动态类型
		def dynamicType = [ name:"Jlee" , age:24] ;
		println dynamicType ;
		dynamicType = "*********" ;
		println dynamicType ;
		
		//9、Groovy中的 == 等于 Java 中的 equals
		// === 相当于 Java 中的 ==
		String string = "str" ;
		if(string == "str"){
			println "   ==    " ;
		}
		if(string.equals("str")) {
			println "    ===    " ;
		}
		
		//10、对于大段文字可以用三个引号来定义
		def longString = """ ssssssssssssssssssssssssssss """ ;
		println longString ;
		
		//11、".." 包含左右边界
		//"..." 不包含右边界
		def rang1 = 1..9 ;
		rang1.each{ print "${it}," ; };println "" ;
		println rang1 instanceof java.util.List ;
		
		Map map1 = [:]; //定义空Map
		Map map2 = [name:'JLee' ,sex:'男']; //定义Map
		println "map1 size ${map1.size()} , value : ${map1}" ;
		println "map2 size ${map2.size()} , value : ${map2}" ;
		
		println map2.get('name');
		map1.put("element" ,[1,2,3]);
		println "map1 size ${map1.size()} , value : ${map1}" ;
		
		//Groovy下标操作符的应用
		String stringStr = "abcdefghijklmnopqrst" ;
		List list = [1,2,3,4,5] ;
		def rangesRan = 6..9 ;
		Map mapmap = [element1:'222',element2:'333333'];
		println stringStr[2] ;
		println list[2..4] ;
		println mapmap['element1'] ;
		println list[-2] ;
		
		
		
		
		//static{println ''}不支持静态块
		//do{println "ddd" ;}while(true);不支持
		
		for(int i=0 ;i<10;i++){
			print i ;
		}
		def j=0 ;
		while(j==0){j++;println " ";}
		println false ? 'a' : 'b' ;
		
		//访问数据库
		String sqlStr = "select * from user ";
		def sql = groovy.sql.Sql.newInstance("jdbc:mysql://localhost/mysql","root","root","com.mysql.jdbc.Driver");
		sql.eachRow(sqlStr){
			row->
			println "${row[0]}, ${row.User}";
		};
		
	}
	
	
	
}

 

 

 二、Groovy与Java之间的相互调用

IFoo.java

package com.jlee;
/**
 * @author Jlee
 * @date 2011-11-19
 * @desc Java 接口
 */
public interface IFoo {
	 public Object run(Object foo);   
}

 Foo.groovy

package com.jlee ;
import java.lang.Override
/**
 * @author Jlee
 * @date 2011-11-19
 * @desc 实现Java 接口的 Groovy 类
 */
public class Foo implements IFoo {
	@Override
	 public Object run(Object foo){
		 println 'Hello World!' ;
		 /*******************************
		  * 实例化Java实现Foo接口的Foo2类*
		  * Groovy中调用Java                      *
		  * ******************************/
		 Foo2 f2 = new Foo2() ;
		 def str = f2.run(2);
		 println str ;
		 return foo*10;
	 }	
	 //直接运行该Groovy类
	 public static void main(args){
		 Foo f = new Foo();
		 f.run(3)
	 }
}

 

Foo2.java

package com.jlee;
/**
 * @author Jlee
 * @date 2011-11-19
 * @desc 实现Java 接口的 Java 类
 */
public class Foo2 implements IFoo {

	public Object run(Object foo) {
		System.out.println("Foo2里面输出 : "+foo);
		return "foo2";
	}

}

 

InvokeGroovy.java

package com.jlee ;

 import groovy.lang.GroovyClassLoader;  
 import java.io.File;  
 /**
  * @author Jlee
  * @date 2011-11-19
  * @desc Java调用Groovy
  */
 public class InvokeGroovy {   
   
     public static void main(String[] args) {  
         ClassLoader cl = new InvokeGroovy().getClass().getClassLoader();  
         GroovyClassLoader groovyCl = new GroovyClassLoader(cl);  
         try {  
             Class groovyClass = groovyCl.parseClass(new File("src/com/jlee/Foo.groovy"));  
             IFoo foo = (IFoo) groovyClass.newInstance();  
             System.out.println(foo.run(new Integer(2)));  
         } catch (Exception e) {  
             e.printStackTrace();  
         }  
     }  
   
 }  

 

分享到:
评论

相关推荐

    Groovy学习笔记

    Groovy学习笔记,内容如下: 1.概念 2.基本语法 3.字符串 4.集合 5.类和闭包 6.控制语句 7.操作符重载 8.I/O操作 9.高级应用 10.正则表达式

    Grails 技术精解与Web开发实践【源码+样章】----下载不扣分,回帖加1分,欢迎下载,童叟无欺

    3.1 Groovy的基本类型与运算符 21 3.1.1 字符串 21 3.1.2 数字 22 3.1.3 Groovy的类 23 3.1.4 运算符 24 3.2 Groovy的控制结构 25 3.3 Groovy的集合 27 3.3.1 列表 27 3.3.2 映射 28 3.3.3 区间 29 3.4 Groovy的闭包...

    Grails权威指南

     4.6.1 使用get方法和exists方法进行基本查询  4.6.2 列举(listing),70排序(sorting)以及合计(counting)  4.6.3 用动态查找器(finder)查询  4.6.4 使用hql进行查询  4.6.5 按样本...

    Grails 中文参考手册

    6.2 Groovy Server Pages 6.2.1 GSP基础 6.2.1.1 变量和作用域 6.2.1.2 逻辑和迭代 6.2.1.3 页面指令 6.2.1.4 表达式 6.2.2 GSP标签 6.2.2.1 变量和作用域 6.2.2.2 逻辑和迭代 6.2.2.3 搜索和过滤 6.2.2.4 链接和...

    javaSE代码实例

    第2章 基本数据类型——构建Java 大厦的基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档注释 13 2.2 基本数据类型 14 2.2.1 整型 15 2.2.2 浮点型 17 2.2.3 char型 17...

    xmljava系统源码-gradle_user_guide:Gradle用户指南

    基于Groovy的领域特定语言(DSL),用于描述和操作构建过程 支持maven/lvy的依赖管理 非常灵活,并不强迫用户一定要使用最佳的构建方式 插件可以暴露自身的语言和接口api给构建文件使用 支持IDE集成 2.2 需求...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性...

    springboot学习思维笔记.xmind

    spring-boot-starter-groovy-templates spring-boot-starter-hateoas spring-boot-starter-hornetq spring-boot-starter-integration spring-boot-starter-jdbc spring-boot-starter-...

    JAVA上百实例源码以及开源项目

    2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性...

    AndroidApkRename:适用于Android开发的gradle插件,可在构建过程中重命名APK

    buildscript { repositories { jcenter() } dependencies { classpath ' com.sababado.android:AndroidApkRename:1.1.2 ' }}应用插件在包含 buildscript 依赖项之后执行此操作很重要apply plugin : ' android-...

    Spring中文帮助文档

    11.2. 利用JDBC核心类控制JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口...

    Spring API

    11.2. 利用JDBC核心类控制JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口...

    Spring 2.0 开发参考手册

    11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口...

    spring chm文档

    11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口...

    Spring-Reference_zh_CN(Spring中文参考手册)

    11.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 11.2.1. JdbcTemplate类 11.2.2. NamedParameterJdbcTemplate类 11.2.3. SimpleJdbcTemplate类 11.2.4. DataSource接口 11.2.5. SQLExceptionTranslator接口 ...

Global site tag (gtag.js) - Google Analytics