java关键字作用域_Java关键字——This

本文详细介绍了Java中的this关键字,包括其在调用属性、方法和表示当前对象时的用法。通过实例解析了this如何解决局部变量与成员变量冲突,并讨论了构造函数间的相互调用及其注意事项。
摘要由CSDN通过智能技术生成

java——this关键字

前言

this关键字属于Java中比较复杂的关键字之一,若是学习过C++或者其他的一些面向对象语言也会遇到this这个关键字并且都会看到this的含义就是表示当前对象。什么叫做表示当前对象?this在Java中的用法是怎样的呢?将分为下面几点介绍。下面就与课课家小编一起接受知识的洗礼吧!

this调用属性

this调用方法

this表示当前对象

this调用属性

当我们写参构造函数时,会倾向于将形参名取与将要赋值的属性名相同,这样就更容易看见形参就知道它是给哪个属性赋值。

class Student{

private String name;

private int age;

public Student(String name, int age){

}

}

在构造函数中赋值的时候,会很容易写成下面这样:

class Student{

private String name;

private int age;

public Student(String name, int age){

name = name;

age = age;

}

}

若写成这样,当构造Student这个对象并输出该对象的姓名和年龄时会发现,name为null, age为0。

造成这样的原因是因为有局部可见性。通常使用{}括起来的一个数据块叫做一个作用域范围。在同一个作用域范围定义了两个同名的变量则会报错;若是在该作用域定义了一个与该作用域范围之外同名的变量则是可以的,在这个作用域同时使用这两个变量,则在这个作用域中定义的变量会屏蔽作用域范围之外的那个变量,即作用域中定义的变量才会有效。

这样说完感觉有点绕。一句话来说,在同一作用域内,作用范围小的变量会屏蔽同名的作用范围大的变量。

若是想要Student类中的属性可以被正确初始化,那么则需要使用this关键字。

class Student{

private String name;

private int age;

public Student(String name, int age){

this.name = name;

this.age = age;

}

}

在我们编程时,访问类的属性最好使用this。

this调用方法

this不仅可以调用类中的属性还可以调用类中的方法。

类中的方法有普通方法和构造方法。

在本类的普通函数中调用其他普通函数,可以在函数前面加上this也可以不加,但是为了代码严谨性推荐加上this。

普通方法中不可以调用构造函数,构造函数的调用只能出现在第一次创建对象为对象进行初始化时调用!

在构造函数中调用普通方法,一般不推荐调用在方法内部使用了属性的普通方法。因为构造函数还没有执行完,属性没有被完全初始化,这时使用属性可能会出现异常。

构造函数之间可以相互调用,构造函数之间相互调用就一定需要使用this关键字!

使用this()表示调用无参构造函数,this(参数,...)表示调用有参构造函数

public class Student{

private String name = null;

private int age = 0;

public Student() {

System.out.println("Student():name="+name+",age="+age);

}

public Student(String name, int age) {

this(); //若使用Student()则会报错:没有定义这个方法。被当做普通方法来解释

this.name = name;

this.age = age;

System.out.println("Student(String name, int age):name="+name+",age="+age);

}

public static void main(String[] args) {

Student stu = new Student("Sakura",20);

}

}

/*

output:

Student():name=null,age=0

Student(String name, int age):name=Sakura,age=20

*/

构造函数之间为什么要相互调用呢?

因为要减少构造函数中代码的重复问题,提高代码的重用性。所以,构造函数之间相互可以调用也就理所当然了。

构造函数之间相互调用有一些限制需要注意:

this()或者this(参数,...)需要被放在构造函数内部的首行

进行构造方法相互调用的时候,一定要保留调用的出口!

至少保留相互调用之间的一个构造函数没有使用this调用其他构造函数,此构造函数作为出口。避免递归调用!

this表示当前对象

我们需要知道同一个类的对象它们的属性是属于不同空间的,但是这些对象是共享类中的方法。所以它们需要一种方式表明是它们自己在调用该方法而不是其他的对象。

所以,当对象调用方法时,该对象会作为一个隐含实参传入到非静态方法中,在非静态方法中使用this来指向它,表明是它在调用该方法。

小编:更多相关知识请点击课课家提供的链接,也可以选择课课家教育系统性学习Java。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值