JavaBean & super & this

来源:互联网 发布:面包车拉货选什么软件 编辑:程序博客网 时间:2024/06/05 02:40

JavaBean起初还是在j2ee的web开发中用的比较多


他是一个遵循特定写法的Java类,它通常具有如下特点:
这个Java类必须具有一个无参的构造函数
必须是一个公共类
字段必须私有化。
私有化的字段必须通过public类型的方法暴露给其它程序,并且方法的命名也必须遵守一定的命名规范。

     JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个字段。每个字段通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。
     属性修改器必须以小写的set前缀开始,后跟属性名,且属性名的第一个字母要改为大写,例如,name属性的修改器名称为setName,password属性的修改器名称为setPassword。
     属性访问器通常以小写的get前缀开始,后跟属性名,且属性名的第一个字母也要改为大写,例如,name属性的访问器名称为getName,password属性的访问器名称为getPassword。
     一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。


javabean最简单的理解是数据包.这个数据包里包含了一些信息(属性).比如名称,性别,年龄等.包含了可以给这些属性赋值和取值的方法(get和set方法).通过实例化后的赋值操作(set方法),可以在别的地方把这个实例取出来,然后通过get方法把值取出来.这就是javabean.或者叫vo.如果在方法中含有了一些逻辑.比如getName的时候,要给name前面加上公司名称.通常情况下,就叫做bo.表对应的持久化类,一般叫po.或者pojo.这些东西都可以统称为javabean.核心就是赋值(set)和取值(get).如果需要用到读写硬盘的缓存,需要网络传输,则需要序列化这个javabean.实现Serializable接口


从知乎上看到一个比较有趣的比喻:

你去门口煎饼摊买煎饼,老板,来一个加蛋加火腿的煎饼

第二天很饿,老板,来个加俩蛋加火腿的煎饼,能做吗?老板说,就是十个也能做
...
几年后,老板做大了,你还去,老板,还有煎饼吗?老板说,还有

从这可以看到,无论使用Javabean的人怎么变了,Javabean提供的通用、基本的功能-煎饼,是一直都在的


2.this

        this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。

       由于静态方法不属于任何一个类,是通过类调用的方法,无需实例对象,因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this

      this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。

<pre name="code" class="java">public class Text {private int number;private String username;private String password;private int x = 100;public Text(){this(0,"未知","空");//this调用别的构造方法}public Text(String name){this(1,name,"空");}public Text(int n){number = n;//或者是this.number }public Text(int n,String username,String password){this.username = username;this.password = password;}public static void main(String[] args) {// TODO Auto-generated method stub    //第一个无参构造实例化,又利用this调用了第四个构造函数        Text t1 = new Text();        //第二个构造函数实例化,this调用了第四个        Text t2 = new Text("游客");        t1.outinfo(t1);        t2.outinfo(t2);}    private void outinfo(Text t) {System.out.println("---------");System.out.println(t.number);System.out.println(t.username);System.out.println(t.password);f();//this.f()亦可}    private void f() {    //局部变量与成员变量同名,以this引用成员变量int x;x = this.x++;System.out.println(x);System.out.println(this.x);}}


main中

new了第一个无参构造函数的实例对象

第一个无参构造函数里通过this调用了第四个构造函数

在调用时,将 0,"未知","空" 传给了第四个构造函数

而第四个构造函数里,通过this,将未知和空传给了成员变量username和password,他们被赋值了

这个实例对象再调用了outinfo方法,打印:

------

number,这里虽然第一个无参构造传了一个0给第四个构造函数,但第四个构造没有赋值给成员变量number,虽然这里打印出来的是0,但这个0是默认初始化的值

username  未知

password  空

调用方法f(),f内有一个局部变量和成员变量同名,通过this引用成员变量的值赋给局部变量,

x=this.x++ ;这里先把成员变量的值100赋给局部变量,下面第一个打印就是100,然后成员变量自增了,变为101,所以后一个打印的是101



第二个构造函数的实例化,传进去一个参数 游客,同时把 1,游客,空  传给第四个构造函数

后面流程一样,但是同样的,这个1没有传给number,打印的还是初始值0



总结一下,this的使用场合

        第一、通过this调用另一个构造方法,用法是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。
        第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,呵呵。
        第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。
安卓里需要上下文context时经常传一个this的参数

3.super

super和this有些类似,但super是子类中用来引用父类中被屏蔽的方法,同时引用的直接父类,最近的一个。

注意,如果是调用父类的构造方法,必须放在首位,因为构造函数是用来初始化的,放在后面初始化就没意义了

        第一、在子类构造方法中要调用父类的构造方法,用“super(参数列表)”的方式调用,参数不是必须的。同时还要注意的一点是:“super(参数列表)”这条语句只能用在子类构造方法体中的第一行(this相同)。
        第二、当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变量覆盖父类成员变量时,用“super.成员变量名”来引用父类成员变量。当然,如果父类的成员变量没有被覆盖,也可以用“super.成员变量名”来引用父类成员变量,不过这是不必要的。
        第三、当子类的成员方法覆盖(重写)了父类的成员方法时,也就是子类和父类有完全相同的方法定义(但方法体可以不同),此时,用“super.方法名(参数列表)”的方式访问父类的方法。


       thissuper不能同时出现在一个构造函数里面因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
       this()super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
      从本质上讲,this是一个指向本对象的指针,然而super是一个Java关键字

4.在Javabean中,set方法就是把外面传进来的值设给他的成员变量,达到修改其属性值的目的

原创粉丝点击