Groovy(七)GroovyBean

Java和Groovy的区别

一  权限修饰符回顾

强调: groovy中'不指定修饰符'默认的修饰符就是'方法-->public;变量-->private';而'java'不指定修饰符,默认是'default'

   1)验证方式:通过编译的'class字节码文件'来验证

核心: public static void main -->'psvm'了解各个位置

备注: 没有找到合适的图说明groovy的'修饰符',Groovy没有'default'的修饰;或者说'defaault'修饰和'Java'有差异性

理解上: 把default'删除即可'

二  类和对象

++++++++++++++++'回顾Java特性'++++++++++++++++

1)类和对象-->理解:抽象模板和具体实例

2)类的特性-->封装(属性和行为)-->代码表现(变量和方法)

3)继承、实现、接口 -->'MOP'

4)Groovy自身的'元编程特性'

(1)GroovyBean

①  传统JavaBean方式

package wzj.com.groovy.ceshi

// Groovy和Java声明Person类的形式

public class Person {

    private String name;
    private int age;
    private String addr;

    public String getAddr() {
        return addr;
    }
    public void setAddr(String addr) {
        this.addr = addr;

    }
    public int getAge() {
        return age;

    }
    public void setAge(int age) {
        this.age = age;

    }
    public String getName() {
        this.name = name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
}

②  GroovyBean

1)Groovy Person类

package wzj.com.groovy.ceshi
// Groovy的风格
class Person {
    // 关注编译后的'修饰符'类型
    String name
    int age
    String addr
}

2)Groovy测试脚本

package wzj.com.groovy.ceshi
// Test.groovy
def person = new Person()
// 1)解读1-->底层调用setNmae('wzj')方法
person.name ='wzj'
// 2)底层2-->底层调用getName('wzj')方法
println person.name

3)字节码文件

注意: 关于'构造方法',会根据'传入的参数',自动在'字节码文件中'生成对应的'构造方法'

eg: new Person() -->会自动创建'Person()构造方法'

4)结论

1、默认'类的修饰符'为public

2、没有'可见性修饰符'的'字段'修饰符默认是'private',同时会'自动生成'对应的setter和getter方法

3、类'不需要'与它的源文件有相同的名称,但还是'建议采用相同'的名称

③  def 定义变量背后的事情

说明: def'定义'变量,只是声明是一个'动态'类型,用'Object'接收,没有指定修饰符,默认还是'private' -->'变量'

核心: def '等价' Object('类型') --> 表示'类型' -->Java的'多态' -->'编译在左,运行在右' -->'反射'

④  def定义方法背后的事情

def method() {}

++++++++'编译后等价的'++++++++

public Object method() {}

结论: 没有'指定'修饰符,方法是'public'修饰

⑤  static背后的事情

++++++++'不指定修饰符情况'++++++++

1)被static关键字修饰的'方法'-->'类方法(类的成员方法)'-->默认是'public'

2)被static关键字修饰的'变量'-->'类属性(类的成员变量)'-->默认是'private'

3)特点:'不需要依赖于对象'来进行访问,只要类被加载了,就可以'通过类名去进行'访问

⑥  final背后的事情

当你把一个'属性'声明成 'final' 的时候,就'不能'再给该属性'赋值'了

final  age 

+++++++'等价方式'+++++++

private final age

注意:只有 'getAge()'方法,'没有' set 方法

⑦  强规则

Groovy语言还有一个规则: 如果你'主动声明'一个属性为" private "、" public "或" protected ",那么你只是'声明了一个属性',这意味着你'要自己写'属性的" set "和" get "方法

比较'意外'的一点: 似乎修饰符不影响'访问'和'设置'属性

1)定义Student的Groovy类

2)定义测试脚本

3)查看编译的字节码文件

4)结果展示

⑧  构造方法

说明: 不需要给Groovy'编写构造器',就'可以使用'构造器

原则: Groovy如果存在'无参构造',那么可以在'创建对象'的时候传入一个'map';键为属性名,值为赋值结果

    效果:根据'成员属性'任意传入参数

2)思考

思考: 如果'手动创建'一个'有参的构造方法'呢?还能传入任意的参数吗?

效果: 编译器'不会报错',但无法通过'map'的形式传入参数,而后获取属性('null')

// 测试脚本
package wzj.com.groovy.ceshi

def student = new Student(name: 10)
print student.name

⑨  最佳实践

(3)  Groovy自动导入的包

最佳实践

static方法可以在方法声明中没有返回值,默认会加上def

如果没有return,则以最后一行为返回值,如果最后一行没有含义,返回null

参数列表可以不指定类型,默认为def

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值