【Java】this关键字

<font color="Teal"><b>前言</b></font>编程

<hr> this关键字属于Java中比较复杂的关键字之一,如果学习过C++或者其余的一些面向对象语言也会遇到this这个关键字而且都会看到this的含义就是表示当前对象。什么叫作表示当前对象?this在Java中的用法是怎样的呢?将分为下面几点介绍。函数

  • this调用属性
  • this调用方法
  • this表示当前对象

<br> <font color="Teal"><b>this调用属性</b></font> <hr> 当咱们写参构造函数时,会倾向于将形参名取与将要赋值的属性名相同,这样就更容易看见形参就知道它是给哪一个属性赋值。学习

class Student{
  private String name;
  private int age;
  public Student(String name, int age){
  }
}

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

class Student{
  private String name;
  private int age;
  public Student(String name, int age){
    name = name;
    age = age;
  }
}

若写成这样,当构造Student这个对象并输出该对象的姓名和年龄时会发现,name为null, age为0。<br> 形成这样的缘由是由于有<b>局部可见性</b>。一般使用{}括起来的一个数据块叫作一个做用域范围。在同一个做用域范围定义了两个同名的变量则会报错;如果在该做用域定义了一个与该做用域范围以外同名的变量则是能够的,在这个做用域同时使用这两个变量,则在这个做用域中定义的变量会屏蔽做用域范围以外的那个变量,即做用域中定义的变量才会有效。<br> 这样说完感受有点绕。一句话来讲,<u>在同一做用域内,做用范围小的变量会屏蔽同名的做用范围大的变量。</u><br> 如果想要Student类中的属性能够被正确初始化,那么则须要使用this关键字。code

class Student{
  private String name;
  private int age;
  public Student(String name, int age){
    this.name = name;
    this.age = age;
  }
}

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

<br> <font color="Teal"><b>this调用方法</b></font> <hr> this不只能够调用类中的属性还能够调用类中的方法。<br> 类中的方法有普通方法和构造方法。blog

  1. 在本类的普通函数中调用其余普通函数,能够在函数前面加上this也能够不加,可是为了代码严谨性推荐加上this。<br>递归

  2. 普通方法中不能够调用构造函数,构造函数的调用只能出如今第一次建立对象为对象进行初始化时调用!<br>作用域

  3. 在构造函数中调用普通方法,通常不推荐调用在方法内部使用了属性的普通方法。由于构造函数尚未执行完,属性没有被彻底初始化,这时使用属性可能会出现异常。<br>class

  4. 构造函数之间能够相互调用,构造函数之间相互调用就必定须要使用this关键字!<br> 使用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
*/

<b>构造函数之间为何要相互调用呢?</b><br> 由于要减小构造函数中代码的重复问题,提升代码的重用性。因此,构造函数之间相互能够调用也就理所固然了。<br> <b>构造函数之间相互调用有一些限制须要注意:</b><br>

  • this()或者this(参数,...)须要被放在构造函数内部的首行
  • 进行构造方法相互调用的时候,必定要保留调用的出口!<br> 至少保留相互调用之间的一个构造函数没有使用this调用其余构造函数,此构造函数做为出口。避免递归调用!

<br> <font color="Teal"><b>this表示当前对象</b></font> <hr> 咱们须要知道同一个类的对象它们的<b>属性是属于不一样空间的</b>,可是这些对象是<b>共享类中的方法</b>。因此它们须要一种方式代表是它们本身在调用该方法而不是其余的对象。 因此,<font color="Crimson">当对象调用方法时,该对象会做为一个隐含实参传入到非静态方法中,在非静态方法中使用this来指向它,代表是它在调用该方法</font>。<br> 查看下面例子,能够发现this就是指向的是当前正在调用类中方法的对象。 ![](https://img2018.cnblogs.com/blog/1099419/201811/1099419-20181119095016951-783364698.png)

因此前面使用this.属性也就很容易理解了,就是当前对象的属性。

<br> <font color="Teal"><b>小结</b></font> <hr> 介绍了Java中this主要使用的三个方面:①类中的属性调用要加上this:this。属性的方式。②this用来构造函数之间的相互调用,必定要保留调用出口③this表示当前对象,指的是当前正在调用类方法的对象。

相关文章
相关标签/搜索