栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间:发布时间: 百科书网 趣学号
Java系列文章目录

Write once,Runanywhere.

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

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

 新的知识开始喽

文章目录
  • Java系列文章目录
  • 1.this引用
  • 2.构造方法
  • 3.方法重载



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();
    }
}


运行结果:

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



  下次见喽  

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/986593.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号