Java中this和static关键字的全面剖析

在Java语言中,我们刚开始接触类与方法时,少不了见到this和static关键字,本篇博客将详细的介绍这两个重要的关键字中的this;
 

先概述一下this的功能:

(1):this表示本类属性
(2):this表示本类方法
(3):this表示当前对象


(1)下面来看一段代码:

class Person{
    private String name;
    private int age;
    public Person(String name, int age){
        name = name;   //若不使用this关键字,将会导致就近原则,录入不了初始值
        age = age;
    }
    public String getMessage(){
        return name + " " + age; 
    }
}

public class Class2{
    public static void main(String[] args){
        Person per = new Person("peter", 18);
        System.out.println(per.getMessage());
    }
}

若将这段代码输出,将会得到结果:  null  0
导致这个结果是为什么呢?
原因在于这两段代码:
name = name;
age = age;

这两段代码并没有达到我们想要的结果,这里的age和name并不是我们类中定义的属性,而是就近原则⭐而来的形参,所以相当于形参给形参赋值,而我们的属性并没有赋值;最后打印出来的就是初始值了。

正确写法:

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

有了this关键字,则this.name表示的是本类属性name;

⭐规范:只要在类中方法访问类中属性,一定要加this关键字;⭐


(2)this调用构造方法

来看这样定义的一个类:

class Person{
    private String name;
    private int age;
    //构造方法重载
    public Person(){
        System.out.println("*********************");
    }
    //构造方法重载
    public Person(String name){
        System.out.println("*********************");
        this.name = name;
    }
    public Person(String name, int age){
        System.out.println("*********************");
        this.name = name;   //若不使用this关键字,将会导致就近原则,录入不了初始值
        this.age = age;
    }
    public String getMessage(){
        return name + " " + age; 
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
}

这个类当中有三个构造方法,使用了构造方法重载,但每个构造方法中都有一句
System.out.println("************************“);
这样显得很不规范,我们在编程时,同样的代码千万不能重复出现⭐,否则很不规范,降低开发效率;

那如何来解决这个问题呢,当然想到了我们的关键字this

class Person{
    private String name;
    private int age;
    //构造方法重载
    public Person(){
        System.out.println("*********************");
    }
    //构造方法重载
    public Person(String name){
        this();
        //System.out.println("*********************");
        this.name = name;
    }
    public Person(String name, int age){
        this(name);
        //System.out.println("*********************");
        //this.name = name;   //若不使用this关键字,将会导致就近原则,录入不了初始值
        this.age = age;
    }
    public String getMessage(){
        return name + " " + age; 
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAge(int age){
        this.age = age;
    }
}

注意:(1)this调用构造方法⭐必须⭐放在构造方法首行,否则报错!!!
          (2)this调用构造方法不能成“环”!!

this调用普通方法就是:this.方法名
这里不再详细的讲如何调用普通方法,很简单!


(3)this表示当前对象:
看一段代码,就不再详细讲解了

//        this表示当前对象
class Person{
    public void fun(){
        //this表示当前对象
        //this表示当前调用fun方法的对象
        System.out.println("当前对象为" + this);
    }
}
public class Class2{
    public static void main(String[] args){
        Person per1 = new Person();
        per1.fun();
        System.out.println(per1);
        System.out.println("-------------------------------");
        Person per2 = new Person();
        per2.fun();
        System.out.println(per2);
    }
}

这段代码的结果为:

当前对象为Person@1db9742
Person@1db9742
-------------------------------
当前对象为Person@106d69c
Person@106d69c


下一篇将会详细讲解static关键字!!!?

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值