面向对象之构造方法and this关键字

面向对象之构造方法and this关键字

构造方法介绍

需要在创建对象的同时明确对象的属性值

l  构造方法的格式:

修饰符构造方法名(参数列表)

{

}

构造方法的体现:

1.  构造方法没有返回值类型。也不需要写返回值。因为它是为构建对象的,对象创建完,方法就执行结束。

2.  构造方法名称必须和类名保持一致。

3.  构造方法没有具体的返回值。

构造方法的代码体现:

 1 class Person {
 2 
 3     // Person的成员属性age和name
 4 
 5     private int age;
 6 
 7     private String name;
 8 
 9  
10 
11     // Person的构造方法,拥有参数列表
12 
13     Person(int a, String nm) {
14 
15         // 接受到创建对象时传递进来的值,将值赋给成员属性
16 
17         age = a;
18 
19         name = nm;
20 
21     }
22 
23 }

public class Person {
    private String name;
    private int age;
    public Person(){
        name="小猪佩奇";
        age=16;
    }
    //构造方法的重载
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    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 class Test {
    //构造方法调用:创建对象new的时候调用,而且一个对象只能调用一次
    //构造方法:1.如果你这个类里面,一个构造方法也没有,那么这个类在编译时候,
                    //你的编译器会自动给你添加一个空参构造方法
                    //public Person(){}
    //2.但如果你的这个类中有哟个或者多个构造方法,那么编译器就不给你添加了
    public static void main(String[] args) {
        Person p=new Person();
        Person p1=new Person("琪琪国王",8);
        System.out.println(p1.getName());
        System.out.println(p1.getAge());

    }

}

图解:

面向对象之构造方法and this关键字

构造方法和一般方法区别

构造方法在对象创建时就执行了,而且只执行一次。

一般方法是在对象创建后,需要使用时才被对象调用,并可以被多次调用。

this关键字

构造方法之间的调用,可以通过this关键字来完成。

1.  构造方法调用格式:

this(参数列表);

 构造方法的调用

class Person {

    // Person的成员属性

    private int age;

    private String name;

 

    // 无参数的构造方法

    Person() {

    }

 

    // 给姓名初始化的构造方法

    Person(String nm) {

        name = nm;

    }

    // 给姓名和年龄初始化的构造方法

    Person(String nm, int a) {

        // 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可

        // 调用其他构造方法,需要通过this关键字来调用

        this(nm);

        // 给年龄初始化

        age = a;

    }
}

 this的原理图解

可以在成员变量名前面加上this.来区别成员变量和局部变量

class Person {
    private int age;
    private String name;

    // 给姓名和年龄初始化的构造方法
    Person(String name, int age) {
        // 当需要访问成员变量是,只需要在成员变量前面加上this.即可
        this.name = name;
        this.age = age;
    }

    public void speak() {
        System.out.println("name=" + this.name + ",age=" + this.age);
    }
}

class PersonDemo {
    public static void main(String[] args) {
        Person p = new Person("张三", 23);
        p.speak();
    }
}

  this的应用

需求:在Person类中定义功能,判断两个人是否是同龄人

class Person {

    private int age;

    private String name;


    // 给姓名和年龄初始化的构造方法

    Person(String name, int age) {

        // 当需要访问成员变量是,只需要在成员变量前面加上this.即可

        this.name = name;

        this.age = age;

    }

 

    public void speak() {

        System.out.println("name=" + this.name + ",age=" + this.age);

    }

 

    // 判断是否为同龄人

    public boolean equalsAge(Person p) {

        // 使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较

        // 由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替

        /*

         * if(this.age == p.age) { return true; } return false;

         */

        return this.age = p.age;

    }

}