基础却常被忽略:全面讲解this实战技巧

软件求生 2024-12-03 09:43:14

 大家好,我是小米,一个热爱分享技术的 29 岁程序员。最近,一位朋友跟我诉苦,说他参加了一场 Java 社招面试,面试官问了一个看似简单却让人抓狂的问题——“请讲讲 this 关键字的用法。” “这不是基础到不能再基础的问题吗?居然问这个!”朋友心里这么想,但冷静下来才发现,虽然每天用 this,但真要系统解释却有点卡壳。于是,我决定整理一篇文章,帮大家理清楚 this 的各种妙用,顺便解答几个常见的面试陷阱。 this 是什么? this 是 Java 中的一个关键字,简单说,它代表当前对象的引用。当我们在类中调用它时,this 指向当前类的实例。它的主要作用包括: 区分类的成员变量和局部变量。 在构造方法中调用其他构造方法。 返回当前对象(链式调用)。 作为参数传递。 来看几个场景化的例子,理解它的用法。 区分成员变量和局部变量 先来看一个场景,小明是个初级开发,刚写完以下代码:

小明很疑惑,为什么他调用 setName("小米") 后,getName() 返回的还是 null?其实问题出在 name = name; 这行代码。 这里的两个 name 指的是同一个局部变量!如果想赋值给类的成员变量,必须用 this 来指明。 正确代码如下:

这就是 this 的最基础用法之一:区分同名变量。 在构造方法中调用其他构造方法 接下来,假设你要写一个 Person 类,有多个构造方法。面试官可能会问:“如何避免构造方法中代码重复?” 用 this 来调用另一个构造方法就是最佳答案! 来看代码:

上面的代码中,this(name, 0) 调用了第二个构造方法。这样既减少了重复代码,又方便统一管理逻辑。 注意: 构造方法中调用其他构造方法时,this 必须是方法的第一行。 不允许循环调用构造方法,否则会编译错误。 支持链式调用 面试中,很多人会提到链式调用。比如我们希望下面的代码可以运行:

实现链式调用的关键就在于方法返回 this。代码如下:

通过返回 this,我们可以在一个语句中完成多个调用,大大提升代码的可读性和优雅度。 作为参数传递 有时候,我们希望把当前对象传递给另一个方法或对象,这时候 this 就派上用场了! 比如,有一个 Printer 类,负责打印对象的信息。我们可以这样实现:

调用 person.print() 时,this 会将当前对象传递给 Printer 的 print 方法,从而实现打印。 面试陷阱:this 的几个误区 1. 静态方法中能不能使用 this? 不能!因为静态方法是属于类的,而 this 是属于实例的。在静态方法中,this 根本不存在。 错误示例:

2. this 可以出现在匿名内部类中吗? 可以!但是要注意 this 的含义。 匿名内部类中,this 指的是匿名类实例,而不是外部类实例。如果需要引用外部类,可以用 外部类名.this 的方式。 示例代码:

总结 通过今天的学习,我们知道了 this 的四种常见用法: 区分成员变量和局部变量。 在构造方法中调用其他构造方法。 实现链式调用。 作为参数传递。 同时,我们也提醒自己:静态方法中不能使用 this,匿名内部类中要注意 this 的指向。 小练习:试试看! 最后,留个小作业给大家:实现一个 Student 类,包含 name 和 score 两个属性,支持以下操作: 使用构造方法初始化对象。 通过链式调用设置 name 和 score。 打印对象信息。 欢迎在评论区留言你的答案,我会第一时间帮你点评! END 记住,写代码不在于记住多少,而在于动手实践!加油,我们下期见! 我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!

0 阅读:0
软件求生

软件求生

从事软件开发,分享“技术”、“运营”、“产品”等。