1.1.1 前言
这几天快速学习了一下Groovy语言,现在还没有学习完。先进行记录,后续可以看看以前学习的资料。
首先还是需要有JAVA的基础,否则入门这方面没有那么简单。
还有不会去写Java的对比代码,太浪费时间,你们大概看下吧 。
还有我学的知识也是看到那写到哪,没有大概的标准。
举出的例子,也是我不熟悉,或者我不知道的知识点。因为明年要出去换公司,所以这也相当于在复习以前的知识。
1.1.2 基本语法
见面还是老规矩,你好!groovy。
class test {
static void main(String[] args) {
println("hello groovy!");
}
}
1.2.1 关键字解释
- def :相当于Object,所用定义方法名,定义字段名,定义数组名,定义Bean都可以使用def声明。需要避免和基本类型重合定义,例如:def String user
- assert :断言,判断传入的参数是否合法,根据异常会直接终止程序,还有减少使用这个关键字,会造成大量性能的浪费。
1.2.2 基础
1.2.2_a 范围运算符
```groovy // 范围 def range = 5..10; println(range); println(range.get(3));
// 结果 5..10 8
<a name="lizUI"></a>
## 1.2.2_b 赋值运算符
```groovy
// 除余
int a = 5;
int b = 2;
def x = a %= b;
println(x);
if ((a %= b) == 1) {
println(true);
} else {
println(false);
}
//结果
1
true
1.2.2_c 循环(for-in语句)
// for-in语句
def range = 5..10;
for (int r in range) {
print(r + ",");
}
// 结果
5,6,7,8,9,10,
--------分割线-------------
int[] arr = [0, 1, 2, 3, 4];
for (int i in arr) {
println(i);
}
// 结果
0
1
2
3
4
1.2.2_d 可以直接声明键值对
def employee = ["key": 1, "name": "Jokn", "Age": 30];
// 不需要声明属性类型,def可以忽略
for (emp in employee) {
println(emp);
}
//结果
key=1
name=Jokn
Age=30
1.2.2_e 方法(默认参数)
// 可以直接在参数里赋值
static def someMethod(int a, int c = 1) {
int d = a + c;
return d;
}
static void main(String[] args){
// 调用的时候,分两种方式
int result = someMethod(2);
println(result);
// 可以直接传入新参数,进行计算
int result2 = someMethod(5, 5);
println(result2);
}
// 结果
3
10
1.2.2_f 对象的使用
class User implements Serializable {
private String name;
private String age;
private String sex;
/**
* 可以忽略get/set
* @return
*/
String getName() {
return this.name;
}
void setName(String name) {
this.name = name;
}
/**
* 构造器,避免使用def
*/
User() {}
}
1.2.2_g get/set的使用
def user = new User();
// with:可以忽略大量的前缀,例如user.setName()
user.with {
name = 'Tom'
age = 50
sex = '男'
}
// set/get可以直接调用
user.sex = "女"
user.name = "something"
println "name=${user.name} age=${user.age} sex=${user.sex}"
// 结果
name=something age=50 sex=女
------------------分割线----------------------------
// 第二种直接声明,构造器都不需要
def user2 = new User(name: "huanfeng", age: 22, sex: "男")
// 输出的时候,需要双引号,否则会直接报错
println "${user2.name} ${user2.age} ${user2.sex}"
// 结果
huanfeng 22 男
1.2.2_h 分行打印快捷方式
// 可以忽略括号,但是有的方法需要
// “\”这个符号并没有换行,只有相当于tab键的空格
// 自动换行,使用三个多个双引号或单引号
println("1111111111111111111111111111111111111 1\
2 \
3")
// 结果
1111111111111111111111111111111111111 1 2 3
// 三个双引号框起后,里面的空格也会直接输出,并不会换行处理
println("""111111111111111111
222222222222222222
333333333333333333""")
// 结果
111111111111111111
222222222222222222
333333333333333333
1.2.2_i 三元运算符的使用
/**
* 三元运算的简写只能用来判断非空
* @param name
* @return
*/
static def check(String name) {
assert name
def result = name ?: "Unknown"
// 可以省略return
result
}
/**
* 三元运算还是需要按照以前Java的格式
* @param str
* @return
*/
static def checkNum(String str) {
def reulst = str.length() > 3 ? str : "xiaoyu"
reulst
}