黑马程序员——面向对象之this关键字

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

为什么要使用this关键字?

情况1.当局部变量和成员变量同名的时候,使用this来区分这两变量。
例:

class Person
{
    private String name;
    Person(String name)
    {
        name =name;
    }
    public void show()
    {
        System.out.println("name="+name);
    }
}

class PersonDemo3
{
    public static void main(String [] args)
    {
        Person p1=new Person("zhangsan");
    }
}

第18行新建了一个Person对象并初始化,“zhangsan”这个值是传给构造函数Person(Sting name)中的局部变量name的。函数里面再将“zhangsan”付给成员变量name。name =name;
这个语句的本意是将构造函数里面的局部变量name传给成员name,但实际上这个表达式是局部变量name赋值给了自己。因为当成员变量和局部变量同名时,java首先使用局部变量,局部变量无该名称则在成员变量里面查找,再无则报错。所以最终name的值还是为null,而不是“zhangsan”。
为了解决这个问题

  • 可以将构造函数的形参名改为与name不同 的名字
Person(String n)
    {
        name =n;
    }
虽然解决了问题,但是构造函数的形参没有直观含义,不推荐。
  • 引入this关键字
Person(String name)
    {
        this.name =name;
    }

这时的this代表其所在函数所属对象的引用,代码中执行到this的时候Person(String name)这个构造函数正在被对象p1引用,因此this.name就代表p1.name。不仅解决了问题,也提高了代码的可读性。

Person(String name)
    {
        p1.name =name;
    }

情况1结论:this代表它所在函数所属对象的引用。简单说:哪个对象在调用this所在的函数,this就代表哪个对象。

情况2.当在函数内需要用到调用该函数的对象时,用this
当一个类中创建了多个构造函数,当这些函数之间的功能有包含重复的现象,这时候可以相互调用函数。

class Person
{
    private String name;
    private int age;

    Person(String name)
    {
        this.name =name;
    }

    Person(String name,int age)
    {
        this.name = name;
        this.age = age;
    }

}

class  PersonDemo4
{
    public static void main(String[] args) 
    {
        Person p1 = new Person("zhangsan");
        Person p2 = new Person("lisi",20);
    }
}

代码中,构造函数Person(String name,int age)里面有初始化name和age,这里面初始化name与构造函数Person(String name)功能一致。因此,构造函数Person(String name,int age)可简化为:

Person(String name,int age)
    {
        this(name);//构造函数之间不能使用Person(name)
        this.age = age;
    }

情况2结论:
this语句 用于构造函数之间进行互相调用。

注意事项:this语句只能定义在构造函数的第一行,因为初始化要先执行。
例子:

Person(String name)
    {
        this.name ="zhangsan";
    }

Person(String name,int age)
    {
        this.name=name;
        this(name);//传入的是"lisi",20,但是实际上p.name=zhangsan。因此需要把该语句放到函数内第一行。
        this.age = age;
    }
class  PersonDemo4
{
    public static void main(String[] args) 
    {
        Person p = new Person("lisi",20);
    }
}

另外,要避免构造函数之间循环引用,不然会造成死循环。
错误示例:

Person()
    {
        this.name ="zhangsan";
    }
Person(String name)
    {
        this(name);
    }
打开链接下载源码: https://pan.quark.cn/s/331a85e1b463 在数字化时代背景下,软件授权与保护显得极为关键,微狗(MicroDog)作为一款硬件加密狗,其主要功能是保障软件的合法使用,避免盗版和未经授权的访问。为了达成这一目的,微狗驱动发挥着不可或缺的作用。驱动程序充当硬件与操作系统之间的沟通纽带,确保两者能够和谐协作。现阶段,64位微狗驱动(UMI64位)已经兼容Windows 11、Windows 10以及Windows 7操作系统,为不同的系统环境提供坚实可靠的支持。 随着Windows操作系统的持续升级,对驱动程序的兼容性需求也在逐步提高。微狗驱动UMI64位版本正是为了应对兼容性问题而研发的。它不仅适配最新版的Windows 11,同时也与过去几年中普遍应用的Windows 10和Windows 7保持兼容。如此全面的系统支持,使得微狗加密狗能够在多种环境中稳定运作,确保软件授权管理不受操作系统版本的限制。 在这个驱动中,特别强调了支持UMI V4.1版本。UMI可能代表Unique Machine Identifier,即用于标识特定硬件设备的唯一序列号。提及UMI V4.1表明该驱动能够精准识别并支援微狗加密狗的此特定型号。同时,这也暗示驱动可能与其他版本的微狗硬件兼容,这意味着用户可以在不同版本的微狗加密狗之间切换而不必频繁更换驱动程序。 UMI64位标签凸显了驱动程序的核心特征,即它专为64位系统进行优化。相较于32位系统,64位系统在处理海量数据、运行大型应用时展现出显著优势,例如能够支持更大的内存地址空间。随着软件复杂性的提升,对硬件资源的需求持续增长,因此64位系统能够提供更优越的性能和稳定性。UMI系列硬件与...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值