来了解一下java关键字
this关键字的作用
1.表示调用本类属性
class Person{
private String name;
private int age;
public Person(String name,int age){
name=name;
age=age;
}
public String getPersonInfo(){
return "姓名:"+name+",年龄:"+age;
}
}
public class Text{
public static void main(String[] args){
Person per=new Person("张三",20);
System.out.println(per.getPersonInfo());
}
}
如果把上面代码放到编译器里,就会编译出错。这是为什么呢?因为当参数与类中属性同名时,类中属性就无法正确被赋值。所以此时需要加上this关键字。使用this.属性名称表示直接从类中寻找同名属性,打破了程序的就近使用原则。
代码改变如下:
this.name=name;
this.age=age;
只要在类中使用本类属性就一定要加this关键字!!!
2.表示调用本类方法(两种情况)
1):调用普通方法
语法:this.方法名称(方法参数)
看一段代码:
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
this.print(); //调用普通方法
}
public String getPersonInfo(){
return "姓名:"+name+",年龄:"+age;
}
public void print(){
System.out.println("*********************");
}
}
public class Text{
public static void main(String[] args){
Person per=new Person("张三",20);
System.out.println(per.getPersonInfo());
}
}
若在本类方法中调用普通方法,一般将this加上(尤其是在有继承的情况下,使用this可以明确表示调用的是本类方法)!
2):表示构造方法
使用this表示调用构造方法必须注意两点:this调用构造方法的语句必须在构造方法首行;使用this构造方法不能成环,必须留有出口!!!
观察一下代码:
class Person{
private String name;
private int age;
public Person(){
System.out.println("***************产生一个新的Person对象*****************");
}
public Person(String name){
System.out.println("***************产生一个新的Person对象*****************");
this.name=name;
}
public Person(String name,int age){
System.out.println("***************产生一个新的Person对象*****************");
this.name=name;
this.age=age;
}
public String getPersonInfo(){
return "姓名:"+name+",年龄:"+age;
}
}
public class Text{
public static void main(String[] args){
Person per1=new Person();
Person per2=new Person("张三");
Person per3=new Person(“李四”,20);
System.out.println(per1.getPersonInfo());
System.out.println(per2.getPersonInfo());
System.out.println(per3.getPersonInfo());
}
}
这段代码看起来重复度很高,质量不高。如果用到this关键字表示调用构造方法,就会简洁很多,如下:
public Person(){
System.out.println("*********产生一个新的Person对象*******");
}
public Person(String name){
this(); //调用本类无参构造
this.name=name;
}
public Person(String name,int age){
this(name); //调用本类有参构造
this.age=age;
}
}
3.表示当前对象
当前调用的属性或方法是通过哪个对象调用的,this就指代它
class Person{
public void print(){
System.out.println("[PRINT]方法:"+this);
}
}
public class Test{
public static void main(String[] args){
Person p1=new Person();
System.out.println("[MAIN]方法:"+p1);
p1.print();
System.out.println("==============");
Person p2=new Person();
System.out.println("[MAIN]方法:"+p2);
p2.print();
}
}
下篇static关键字~~~