java中的this关键字

本文详细介绍了Java中的this关键字的三种用途:调用当前类的属性、方法以及表示当前对象。通过实例展示了this在构造方法中的应用,包括构造方法之间的相互调用,以及在消息发送逻辑中的使用。强调了this在提高代码可读性和构造方法重用性上的作用。
摘要由CSDN通过智能技术生成

java中的this关键字

this描述的是本类结构调用的关键字,在java中this关键字可以描述三种结构的调用:

  • 当前类中的属性:this.属性。

  • 当前类中的方法(普通方法和构造方法):this()、this.方法名称()。

  • 描述当前对象。


1、this调用本类属性

构造方法或普通方法中可通过this访问当前类的成员属性时对成员属性进行初始化。

范例:通过"this.成员属性"访问

class Person {
    private Stirng name;    //人的姓名
    private int age;       //人的年龄
 
    /**
    *定义构造方法,该方法参数名称与成员属性名称相同
    **/
    public Person (String name ,int age) {
        this.name = name;       //使用this属性标注本类属性
        this.age  = age;        //使用this属性标注本类属性
    }
    //setter、getter略
    public void tell () {
        System.out.println("姓名:" + this.name + "、年龄:" + this.age);
    }   
}
public class JavaDemo {
    Person per = new Person("张三" ,12);
    per.tell();
}
/**
*程序执行结果:
*姓名:张三、年龄:12
**/
 

注意:只要调用类中成员属性,都建议使用"this.成员属性"的方式来进行表示。


2、this调用本类方法

2.1 、调用本类普通方法

可以使用"this.方法名称()"调用,并且可以在构造方法和普通方法中使用。

范例:使用this调用本类普通方法

class Person {
    private Stirng name;    //人的姓名
    private int age;       //人的年龄
    public Person (String name ,int age) {
        this.setName(name);     //调用本类setName()方法
        setAge(age);            //不适用"this.方法()"也表示调用本类方法
    }
    //setter、getter略
    public void tell () {
        System.out.println("姓名:" + this.name + "、年龄:" + this.age);
    }   
}
public class JavaDemo {
    Person per = new Person("张三" ,12);      //实例化Person类对象
    per.tell();                             //输出信息
}
/**
*程序执行结果:
*姓名:张三、年龄:12
**/

该程序中,由于是在本类中,所以对是否使用"this.方法()"没用明确要求,但是还是采用"this.方法()"的形势更加合理。


2.2、调用本类构造方法

当一个类中存在若干个构造方法时,可以利用this()的形式实现构造方法之间的互相调用。

构造方法的互相调用可以提升构造方法中执行代码的可重用性。

范例:使用this()实现本类构造方法的互相调用

class Person {
    private Stirng name;    //人的姓名
    private int age;       //人的年龄
    public Person {                 //【构造方法重载】无参函数
        System.out.println("*** 一个新的Person类对象实例化了***");
    }
    public Person (String name)     //【构造方法重载】单参函数
    {
        this();             //调用本类无参函数
        this.name = name ;  //设置name的值
    }
    public Person (String name ,int age) {  //【构造方法重载】双参函数
        this(name) ;        //调用本类单参函数
        this.age = age ;            //设置age值
    }
    public void tell () {
        System.out.println("姓名:" + this.name + "、年龄:" + this.age);
    }   
}
public class JavaDemo {
    Person per = new Person("张三" ,12);      //实例化Person类对象
    per.tell();                             //输出信息
}
/**
*程序执行结果:
*姓名:张三、年龄:12
**/

注意:

1、所有类的构造方法是在对象在实例化的时候被默认调用,而且在普通方法调用之前调用,所以用this()调用构造方法的操作,一定要放在构造方法的首行。否则会报错。

2、如果一个类中存在多个构造方法,而且这些构造方法都使用了this()互相调用,那么至少保留一个构造方法没有调用其它构造方法,以作为程序的出口

3、this表示当前对象

对于正在访问类中方法的对象就可以成为当前对象,可以用this表示

范例:实现消息发送逻辑

class Message {
    private Channel channel ;       //保存消息发送通道
    private String content ;        //消息内容
    //【4】调用此构造实例化,此时channel = 主类ch
    public Message (Channel channel, String content) {
        this.channel = channel ;        //保存消息通道
        this.content = content ;        //设置content属性
    }
    public void send () {
        if(this.channel.isConnect() ) {     //
            System.out.println("【消息发送】content=" + this.content);
        }
        else {
            System.out.println("【error】没有可用的连接通道,无法发送消息");
        }
    }
}
class Channel {
    private Message message ;       //信息发送有Message负责
    //【2】实例化channel对象,调用构造方法,接收要发送的消息内容
    public Channel (String content) {
        //【3】实例化Message,但是需要将主类中的ch传递到Message中、this = ch
        this.message = new Message(this,content);       
        this.message.send();
    }
    public boolean isConnect () {       //判断连接是否创建
        return true;
    }
}
public class JavaDemo {
    public static void main(String args[]) {
        //【1】实例化一个Channel类对象,并且传入需要发送的消息内容
        Channel channel = new Channel("我好喜欢你!") ;       //实例化Channel对象并发送消息
    }
}
/**
*程序运行结果:
*【消息发送】content = 我好喜欢你!
**/

本程序在Channel内部实例化了Message类对象,由于消息发送需要通过通道来实现,所以将Channel的当前对象this传递到了Message类,并利用Message.send()方法实现消息发送处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值