类与对象——this关键字

来了解一下java关键字
this关键字的作用
1.表示调用本类属性

class Person{
     private String name;
     private int age;
     public Person(String name,int age){
          name=name;
          age=age;
     }
     public String getPersonInfo(){
          return "姓名:"+name+",年龄:"+age;
     }
}
public class Text{
     public static void main(String[] args){
           Person per=new Person("张三",20);
           System.out.println(per.getPersonInfo());
     }
}

如果把上面代码放到编译器里,就会编译出错。这是为什么呢?因为当参数与类中属性同名时,类中属性就无法正确被赋值。所以此时需要加上this关键字。使用this.属性名称表示直接从类中寻找同名属性,打破了程序的就近使用原则。
代码改变如下:

this.name=name;
this.age=age;

只要在类中使用本类属性就一定要加this关键字!!!

2.表示调用本类方法(两种情况)
1):调用普通方法
语法:this.方法名称(方法参数)

看一段代码:

class Person{
     private String name;
     private int age;
     public Person(String name,int age){
          this.name=name;
          this.age=age;
          this.print();   //调用普通方法
     }
     public String getPersonInfo(){
          return "姓名:"+name+",年龄:"+age;
     }
     public void print(){
          System.out.println("*********************");
     }
}
public class Text{
     public static void main(String[] args){
           Person per=new Person("张三",20);
           System.out.println(per.getPersonInfo());
     }
}

若在本类方法中调用普通方法,一般将this加上(尤其是在有继承的情况下,使用this可以明确表示调用的是本类方法)!

2):表示构造方法
使用this表示调用构造方法必须注意两点:this调用构造方法的语句必须在构造方法首行;使用this构造方法不能成环,必须留有出口!!!

观察一下代码:

class Person{
     private String name;
     private int age;
     public Person(){
          System.out.println("***************产生一个新的Person对象*****************");
     }
     public Person(String name){
          System.out.println("***************产生一个新的Person对象*****************");
          this.name=name;
     }
     public Person(String name,int age){
          System.out.println("***************产生一个新的Person对象*****************");
          this.name=name;
          this.age=age;
     }
     public String getPersonInfo(){
          return "姓名:"+name+",年龄:"+age;
     }
}
public class Text{
     public static void main(String[] args){
           Person per1=new Person();
           Person per2=new Person("张三");
           Person per3=new Person(“李四”,20);
           System.out.println(per1.getPersonInfo());
           System.out.println(per2.getPersonInfo());
           System.out.println(per3.getPersonInfo());
     }
}

这段代码看起来重复度很高,质量不高。如果用到this关键字表示调用构造方法,就会简洁很多,如下:

public Person(){
        System.out.println("*********产生一个新的Person对象*******");
 }
 public Person(String name){
        this();  //调用本类无参构造
        this.name=name;
 }
 public Person(String name,int age){
         this(name);   //调用本类有参构造
         this.age=age;
 }
}

3.表示当前对象
当前调用的属性或方法是通过哪个对象调用的,this就指代它

class Person{
      public void print(){
           System.out.println("[PRINT]方法:"+this);
      }
}
public class Test{
       public static void main(String[] args){
               Person p1=new Person();
               System.out.println("[MAIN]方法:"+p1);
               p1.print();
               System.out.println("==============");
               Person p2=new Person();
               System.out.println("[MAIN]方法:"+p2);
               p2.print();
       }
}

下篇static关键字~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值