this关键字
1.this表示本类属性
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 Test{
public static void main(String[] args) {
Person per = new Person("张三",20);
System.out.println(per.getPersonInfo());
}
}
通过以上代码,我们可以看出当参数与类中属性同名时,类中属性无法被正确赋值。这就需要我们用到this关键字,这样便可以正确给对象属性进行赋值。
this.name = name ;
this.age = age ;
使用this . 属性名称表示直接从类中寻找同名属性。
以后在类中使用本类属性一定要加上this关键字。
2.this调用本类方法
a.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 Test{
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());
}
}
上述代码内容重复繁多,显得很冗余,在Java中,支持构造方法的相互调用。修改上述代码如下:
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 ;
}
在构造方法首行使用this(参数)表示调用本类的构造方法。
***this调用本类构造方法必须写在构造方法首行。(要求)
***this调用构造方法不能成“环”。
b.this调用本类普通方法
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 Test{
public static void main(String[] args) {
Person per = new Person("张三",20);
System.out.println(per.getPersonInfo());
}
}
若在本类中调用普通方法,一般将this加上(尤其是在有继承的情况下,使用this可以明确表示调用的是本类方法。)
3.this表示当前对象(谁调用谁就是当前对象)
当前调用的属性或方法是通过那个对象调用的,this就指代它。
static关键字 (与对象无关!!!)
1.修饰本类属性
称为静态属性(类属性),所有对象共享此属性值
要描述类似“国家”这种共享属性,可以使用static修饰属性。
静态属性一般通过类名直接调用,所有该类对象共享此属性值。
非static属性称为成员变量或对象属性,每个对象都有此属性且值都不一样。
2.修饰本类方法
使用static修饰方法称为静态方法(类方法),直接通过类名称调用,
与对象实例化无关。
静态方法常见于工具方法。
eg:java.util.Arrays.sort();
System.arraycopy();