标签:com new student 数据 遇到 比较 类方法 .com 提高
前言
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(参数,...)表示调用有参构造函数
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.属性也就很容易理解了,就是当前对象的属性。
小结
标签:com new student 数据 遇到 比较 类方法 .com 提高
原文地址:https://www.cnblogs.com/myworld7/p/9981530.html