/*
- java关键字之this
- 1,this可以修饰属性,方法,构造器。
- 2,当this修饰属性和方法时,this可以理解为当前对象(在方法内)或正在创建的对象(在构造器内)
- 2.1在类的方法中,我们可以使用“this.属性”或者“this.方法”的方式,调用当前对象属性或方法。
- 但是通常情况下,都会选择省略“this”。特殊情况下,如果方法的形参与类的属性重名时,必须显示的
- 使用“this.变量”的方式来表明此变量为属性而非形参。
- 2.2在类的构造器中时,我们可以使用“this.属性”或者“this.方法”的方式,调用当前正在创建的对象属性或方法。
- 但是通常情况下,都会选择省略“this”。特殊情况下,如果构造器方法的形参与类的属性重名时,必须显示的
- 使用“this.变量”的方式来表明此变量为属性而非形参。
- 3 this修饰构造器
- 3.1 可以在类的构造器中使用“this(形参列表)”的方式,调用本类中 其他重载的构造器
- 3.2 “this(形参列表)”必须声明在构造器的首行
- 3.3 在类的一个构造器中,最多只能声明一个“this(形参列表)”。
- 3.4 构造器中不能用“this(形参列表)”的方式调用自身,会形成死循环
- 3.5 如果一个类中声明了n个构造器,则最多有n-1个构造器中使用了“this(形参列表)”。否则会形成循环调用,出现死循环
- 3.6 构造器调用“this(形参列表)”后依然是创建了一个对象,只是借用了其它构造器的逻辑。
*/
package com.atguigu.contact;
public class Object_This {
String name;
int age;
public Object_This() {
}
public Object_This(int age) {
if(age < 0 || age >150) {
System.out.println("数据非法,重新设置");
return;
}
this.age = age;
}
public Object_This(String name) {
super();
this.name = name;
}
public Object_This(String name,int age) {
this(age);
this.name = name;
}
public void setName(String name) {//形参与属性同名,必须使用this指明哪个是属性
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void getInfo() {
System.out.println(this.name + this.age);//此处this可以省略
}
public void test() {
this.getInfo();//this修饰方法,表明调用当前对象的getInfo方法,输出当前对象的属性,此处this可以省略
}
public static void main(String[] args) {
Object_This o = new Object_This("KK",180);
o.getInfo();
Object_This o1 = new Object_This("KK",21);
o1.getInfo();
Boy b = new Boy();
b.setName("Jerray");
Girl g = new Girl();
Girl g1 = new Girl();
g.setAge(21);
g1.setAge(25);
g.setName("Tom");
g.marry(b);
g.marry(new Boy());
System.out.println(g.compare(g1));
System.out.println(g1.compare(g));
System.out.println(g.compare(g));
}
}
//this练习
class Boy{
private String name;
private int age;
public Boy() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void marry(Girl girl) {
System.out.println(name + " marry " + girl.getName());
shout();
}
public void shout() {
System.out.println("I LOVE YOU!!!");
}
}
class Girl{
private String name;
private int age;
public Girl() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void marry(Boy boy) {
System.out.println(name + " marry " + boy.getName());
boy.marry(this);//此处使用this说明调用的是当前对象,如果使用new Girl()作为参数会指向新对象。
}
public int compare(Girl girl) {//对象比较是对对象属性的比较,返回int值
//当返回值为正数,当前对象大,返回值为负数,当前对象小,返回值为0,则当前对象与形参对象一样大小
if(this.age > girl.age) {
return 1;
}else if(this.age < girl.age){
return -1;
}else {
return 0;
}
//或者 return this.age - girl.age;
}
}