面向对象的第三条主线:关键字

类对象的属性赋值的先后顺序:
1、属性的默认初始化
2、属性的显示初始化
3、通过构造器给属性初始化
4、通过“对象.方法”的方式给属性初始化。

this 关键字
this是什么?
在java中,this关键字比较难以理解,它的作用和其词义很接近。
它在方法中使用,即表示这个方法所属对象的引用;
它在构造器内部使用,表示该构造器正在初始化的对象;

this表示当前对象,可以调用类的属性、方法和构造器。

什么时候需要this关键字呢?
当在方法中需要用到该方法的对象时,就用this

EG:

class person{
public void setAge(int age){
      age = age;
}
}
public class person{
    person p1 = new person();
    p1.setAge(2);
    System.out.println(p1.getAge());//0
}


类中的age无法识别,所以age没有被赋值,仍然是0。
person类中的setAge方法形参age,在方法体中认为age都是形参中的那个age,所以根本没有赋值。
在eclipse工具中可以双击一个age属性,亮起的都为age属性正常使用,且都是person的属性age
唯独setAge方法中的age没有亮起,因为此时setAge方法中的age,都是方法中的局部变量,和person类的age属性没有一毛钱关系。
所以,person类中的age仍然为0

PS:简单的理解就是如果形参和类属性的名称一样,this表示的意思一个自己本身类的对象,代表的是本类。
    例如 person类,就是person类在自己的类里面声明了一个对象。
    person p = new person;
    public void setAge(int age){
      p.age = age;
}
    只是现在提供了一个关键词this,可以代替这一步骤。

但是在类中不可以这样写,因为这样写,这个只是用于理解this的用法。
因为如果这样写的话,对象就被写死了,如果在其他类中调用的时候声明的对象不是p,或者声明的不一致,就没有办法取的同样的效果。
所以,需要使用this关键词。

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

public class person{
    person p1 = new person();
    p1.setAge(2);
    System.out.println(p1.getAge());//2
}
它在方法中使用,即表示这个方法所属对象的引用;

//    public person(String name ) {
//        this.name  =name ;
//    }
    
    public person(String name ) {
        p.name  =name ;
    }//也是一样的
它在构造器内部使用,表示该构造器正在初始化的对象;


    public void eat() {
        System.out.println("人吃饭");
    }
    
    public void info() {
        this.eat();
        System.out.println(this.name);
    }
同样成立。调用本类中的方法
       p1.info();
 在方法中使用,即表示这个方法所属对象的引用,this等于p1; this代表的就是p1.

       public void show(){
              System.out.println("我是一个人");
       }
           public void info() {
        this.eat();
        System.out.println(this.name);
//        show() 以前调用本类中的方法都是这样的写法。
                this.show(); //只是this隐藏了而已。

    }
this:
1、可以用来修饰属性,方法,构造器
2、this可以理解为当前对象或  当前正在创建的对象 例如:this.show();this.name;
(当前正在创建的对象,这句是在构造器里面是这样理解的,因为构造器是造对象用的,构造器内还没有生成对象)

构造器中第二次使用this相同属性,可以写this(属性)
    public person(String name ) {
        this.name  =name ;
    }

    public person(String name,int age) {
    // this.name = name ;
       this(name);(这是person类中为name的构造器)
       //使用的过程中是先调用person(name)这个构造器,然后在使用本构造器
       this.age =age;//构造器中不可以使用两个   this(属性)【指的是不可以使用两个this构造器】
    }
this(属性)可以用来显示调用当前类的重载的指定构造器:
 1、构造器内部必须在首行
 2、若一个类中有几个构造器,那么最多n-1个构造器中使用this(属性)
 

当形参与成员变量重名的时候,如果在方法内部需要使用成员变量,必须添加this来表明该变量是类成员
在任意方法内,如果使用当前类的成员变量或成员方法可以在其前面添加this,增强程序的阅读性。
this可以作为一个类中,构造器相互调用的特殊格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值