11关键字this的使用
一、this是什么
在Java中this的作用和词意很接近:
- 在方法内部使用,即这个方法所属对象的引用;
- 在构造器内部使用,表示该构造器正在初始化的对象。
this表是当前对象,可以调用类的属性、方法和构造器。
二、什么时候使用this关键字
当方法内需要用到调用盖房的对象是,就用this。
具体的,可以用this来区分属性和局部变量如比:this.name = name;
三、this修饰属性、方法
this理解为当前对象或者当前正在创建的对象。
在类的方法中,可以使用“this.属性”或者“this.方法”的方式,调用当前对象的属性或方法。但是,通常情况下,选择省略“this.”。特殊情况下,如果方法的形参和类的属性同名时弄西显式的使用“this.变量”的方式来表明此变量是属性而非形参。
在类的构造器中,可以使用“this.属性”或者“this.方法”的方式,调用当前对象的属性或方法。但是,通常情况下,选择省略“this.”。特殊情况下,如果方法的形参和类的属性同名时弄西显式的使用“this.变量”的方式来表明此变量是属性而非形参。
public class PersonTest {
public static void main(String[] args) {
Person p1 = new Person("Tom");
p1.setAge(18);
p1.show();
p1.study();
}
}
class Person{
//属性
private int age;
private String name;
//构造器
public Person(String name) {
this.name = name;
}
public Person(int age) {
this.age = age;
}
public Person() {
this.eat();
}
//方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show() {
System.out.println("姓名:" + this.getName() +";年龄:" + this.getAge());
}
public void eat() {
System.out.println("会吃饭");
}
public void study() {
System.out.println("会学习");
this.eat();
}
}
四、this修饰构造器
在类的构造器中可以显示的使用“this(形参列表)”的方式,来调用本类中指定的其他构造器;
构造器中不能通过“this(形参列表)”的方式调用自己;
如果一个类中有N个构造器,最多有n-1构造器中使用了“this(形参列表)”;
规定:“this(形参列表)”必须什么在当前构造器的首行;
构造器内部,最多只能声明一个“this(形参列表)”。
public class PersonTest {
public static void main(String[] args) {
Person p2 = new Person("Jerry", 22);
p2.show();
}
}
class Person{
//属性
private int age;
private String name;
//构造器
public Person() {
this.study();
System.out.println("this修饰构造器");
}
public Person(String name) {
this();
this.name = name;
}
public Person(String name, int age) {
this(name);
this.age = age;
}
//方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show() {
System.out.println("姓名:" + this.getName() +";年龄:" + this.getAge());
}
public void eat() {
System.out.println("会吃饭");
}
public void study() {
System.out.println("会学习");
this.eat();
}
}
五、练习
添加必要的构造器。综合应用构造器的重载、this关键字。
public class Boy {
private String name;
private int age;
public Boy() {
}
public Boy(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void marry(Girl girl) {
System.out.println("我想娶" + girl.getName());
}
public void shout() {
if (this.age >= 22) {
System.out.println("可以合法结婚了!");
} else {
System.out.println("可以先谈恋爱~~");
}
}
}
public class Girl {
private String name;
private int age;
public Girl() {
}
public Girl(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void marry(Boy boy) {
System.out.println("我想嫁给" + boy.getName());
boy.marry(this);
}
public int compare(Girl girl) {
return this.age - girl.age;
}
}
public class BoyGirlTest {
public static void main(String[] args) {
Boy boy = new Boy("罗密欧",21);
boy.shout();
Girl girl = new Girl("朱丽叶", 18);
girl.marry(boy);
Girl girl1 = new Girl("祝英台", 19);
int compare = girl1.compare(girl);
if (compare > 0) {
System.out.println(girl1.getName() + "年龄大");
} else if (compare < 0) {
System.out.println(girl.getName() + "年龄大");
} else {
System.out.println("年龄一样大");
}
}
}