JAVASE语法零基础——this引用和构造方法

Java系列文章目录


在这里插入图片描述

Write once,Runanywhere.🔥🔥🔥

💥 💥 💥如果你觉得我的文章有帮助到你,还请【关注➕点赞➕收藏】,得到你们支持就是我最大的动力!!!
💥 💥 💥

版权声明:本文由【马上回来了】原创、在CSDN首发、需要转载请联系博主。
版权声明:本文为CSDN博主「马上回来了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

在这里插入图片描述

🚀🚀🚀 新的知识开始喽🚀🚀🚀
在这里插入图片描述



1.this引用

概念:this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中成员变量都是同该引用去访问的。
先看下面的代码,如果不用this引用会带来哪些问题:

class Data{//一个时间类
    //成员变量
    public int year;
    public int month;
    public int day;
    //成员方法
    public void setDay(int year,int month,int day){
        year = year;
        month = month;
        day = day;
    }
    public void printDay(){
        System.out.println(year+"/"+month+"/"+day);
    }
}
public class Test {
    public static void main(String[] args) {
        Data data1 = new Data();
        data1.setDay(2022,6,22);
        data1.printDay();
    }
}

在这里插入图片描述
运行结果:发现并没有给成员变量赋值,而是打印出成员变量的初始值。
在这里插入图片描述
这是因为根据局部变量优先的原则,setDay方法里的左边的成员变量会被当做是局部变量,即:
在这里插入图片描述
this引用:

class Data{//一个时间类
    //成员变量
    public int year;
    public int month;
    public int day;
    //成员方法
    public void setDay(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void printDay(){
        System.out.println(year+"/"+month+"/"+day);
    }
}
public class Test {
    public static void main(String[] args) {
        Data data1 = new Data();
        data1.setDay(2022,6,22);
        data1.printDay();
    }
}

在这里插入图片描述
运行结果:
在这里插入图片描述

2.构造方法

构造方法是一种特殊的成员方法,与普通的成员方法相比较:

1.方法名与类名相同
2.没有返回值
3.在对象创建时,编译器自动调用且在该对象的生命周期里只调用一次
4.一般有public修饰

上面那个Data类的代码,每次在创建对象后都需要我们去手动调用setDay方法才能设置出我们要的时间日期,如果我们要实例化出多个对象就用多次手动调用这个方法。比较繁琐,因此我们通过构造方法来实现简化操作。
看代码:

class Data{
    //成员变量
    public int year;
    public int month;
    public int day;
    //构造方法
    public Data(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    //成员方法
    public void printDay(){
        System.out.println(year+"/"+month+"/"+day);
    }
}
public class Test {
    public static void main(String[] args) {
        Data date1 = new Data(2022,6,22);
        date1.printDay();
    }
}

在这里插入图片描述
运行结果:
在这里插入图片描述
注意在实例化对象时,是必须得调用构造函数的,否者会编译失败的,上文讲解this引用那里Data没有写构造方法是因为,当程序员没有写构造方法时,编译器会自动提供一个没有参数的构造方法。
但是如果程序员自己写了构造方法,那么编译器就不会自动提供构造方法了。
再看一遍上面的代码:

class Data{//一个时间类
    //成员变量
    public int year;
    public int month;
    public int day;
    //构造方法
    public Data() {
        System.out.println("该方法被调用了");
    }

    //成员方法
    public void setDay(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void printDay(){
        System.out.println(year+"/"+month+"/"+day);
    }
}
public class Test {
    public static void main(String[] args) {
        Data data1 = new Data();
        data1.setDay(2022,6,22);
        data1.printDay();
    }
}

在这里插入图片描述
运行结果:
在这里插入图片描述

3.方法重载

方法重载三个条件:
1.方法名相同
2.参数值不同:指参数的类型、个数、顺序不同
3.返回值不做要求
构造方法可以重载

   //构造方法
    //带三个参数的构造方法
    public Data(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }
//带两个参数的构造方法
    public Data(int year, int month) {
        this.year = year;
        this.month = month;
    }

    //带一个参数的构造方法
    public Data(int year) {
        this.year = year;
    }
    //不带参数的构造方法
    public Data() {
    }

注意:编译器在重载构造方法时,只能识别参数的种类,不能识别参数的参数名
在这里插入图片描述
在这里插入图片描述

虽然构造方法可以重载,但是如果在实例化对象时没有合适构造方法,编译也会出错的:

class Data{//一个时间类
    //成员变量
    public int year;
    public int month;
    public int day;
    //构造方法
    public Data() {
        System.out.println("该方法被调用了");
    }

    //成员方法
    public void setDay(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void printDay(){
        System.out.println(year+"/"+month+"/"+day);
    }
}
public class Test {
    public static void main(String[] args) {
        Data data1 = new Data(2022,6,22);
        //data1.setDay(2022,6,22);
        data1.printDay();
    }
}

运行结果:
在这里插入图片描述

this(参数)调用别的合适的构造方法:
1.this(参数)必须位于构造方法的第一行
2.不能闭合成环
看代码:

class Data{//一个时间类
    //成员变量
    public int year;
    public int month;
    public int day;
    //构造方法
    public Data() {
        //System.out.println("该方法被调用了"); 这里代码不放放开注释,因为this(参数)必须在代码第一行
        this(2022,6,22);
    }

    public Data(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    //成员方法
    public void setDay(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public void printDay(){
        System.out.println(year+"/"+month+"/"+day);
    }
}
public class Test {
    public static void main(String[] args) {
        Data data1 = new Data();
        //data1.setDay(2022,6,22);
        data1.printDay();
    }
}

在这里插入图片描述
运行结果:
在这里插入图片描述
在这里插入图片描述
总结this引用的三个方法:
1.this.成员变量:成员方法内访问成员变量
2.this.成员方法:成员方法内访问其他的成员方法(也可以不用this,直接使用方法名)
3.this(参数列表):构造方法内调用与参数列表相同的构造方法

🌏🌏🌏今天的你看懂这里又学到了很多东西吧🌏🌏🌏

在这里插入图片描述

🌔 🌔 🌔下次见喽🌔 🌔 🌔
在这里插入图片描述

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马上回来了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值