this关键字与static关键字

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();


猜你喜欢

转载自blog.csdn.net/qq_42711862/article/details/88619038