章节三、5-Getters-Setters和this关键字part01

时间:2024-01-21 09:07:27

我们新建第一个Car类:

package introduction;

public class Car {
    
    //颜色
    private String color;
    //生成商
    private String make;
    //型号
    private String model;
    //年份
    private int year;

    //车拥有一个加速度的功能
    public void run() {
    System.out.println("加速度了.....");
    }
}

创建第二个类来对car类进行引用和实例化:

package introduction;

public class ClassDemo {

    public static void main(String[] args) {
}
}

 

一、实例化对象:

package introduction;

public class ClassDemo {

    public static void main(String[] args) {

    //创建car类型的对象时应该有一个car类型的引用来指向car对象
    //new是一个创建对象的关键字
    Car bmw = new Car();
}
}

 

二、实例化后调用car类型中的行为(方法),格式为“实例化后的对象名.方法名”:

package introduction;

public class ClassDemo {

    public static void main(String[] args) {

    //创建car类型的对象时应该有一个car类型的引用来指向car对象
    //new是一个创建对象的关键字
    Car bmw = new Car();
    
    //实例化之后创建对这个对象的引用
    bmw.acceleration();
}
}

打印查看实例化后引用是否成功:

成功引用了car类中的方法

 

 三、访问car类中的成员变量

1、由于car类中的 成员变量权限都是都是“私有的”,所以在其它类中,比如新建的第二个类ClassDemo无法直访问,如果强行调用的话,执行程序时会报错

 

2、如果是权限是公共的则能够直接访问(为了进行演示,我们暂时将生产商的权限由私有的变成公共的):

//生成商
    public String make;

在ClassDemo中调用时与调用car类中的方法是一样的:

bmw.make = "法拉利";

3、由于成员变量权限为私有的,但你还是想调用它,那么在其它类调用时只能采取曲线救国的方式,如下:

我们在该类中写一个方法来接收其它类的传值,并且提供公共的外部访问方式,对私有的数据通过方法的方式来进行访问,也就是set、get方法。

首先写一个方法来接收该类中传进来的值(car类),

package introduction;

public class Car {
    
    //颜色
    private String color;
    //生成商
    public String make;
    //型号
    private String model;
    //年份
    private int year;

    //车拥有一个加速度的功能
    public void acceleration() {
    System.out.println("加速度了.....");
    }
    /*
     * 为了能够区分下面这段话,这里我们将表示生产商的make定义为make1,setMake中的make
     * 定义为make2,此处为了方便其它类调用,所以取名相同。
     * 因为需要给make2这个变量赋值,但上面已经定义了make1是一个字符串类型的变量,
     * 所以这里同样需要一个字符串类型的变量来进行接收,也取名叫make2,方便给make2赋值,
     * 同时也方便调用者进行区分,
     * 如果在方法主体中写成make2=make2,那么表示的都是setMake中的参数列表的中make,
     * 这个make2是局部变量,make1是成员变量。
     * 所以为了区分这两个make,就有了关键字this,
     * 使用格式为“this.”,使用了该关键字后就能够区*部变量和成员变量,
     * 在成员变量前面加上this后变为“this.make=make”
    */
    public void setMake(String make) {
        //哪个对象来调用setMake方法,这个this就给哪个对象里的成员变量赋值
        this.make = make;
    }
}

 然后提供公共访问方式(get)package introduction;public class Car {    //颜色

    private String color;
    //生成商
    public String make;
    //型号
    private String model;
    //年份
    private int year;

    //车拥有一个加速度的功能
    public void acceleration() {
    System.out.println("加速度了.....");
    }
    /*
     * 为了能够区分下面这段话,这里我们将表示生产商的make定义为make1,setMake中的make
     * 定义为make2,此处为了方便其它类调用,所以取名相同。
     * 因为需要给make2这个变量赋值,但上面已经定义了make1是一个字符串类型的变量,
     * 所以这里同样需要一个字符串类型的变量来进行接收,也取名叫make2,方便给make2赋值,
     * 同时也方便调用者进行区分,
     * 如果在方法主体中写成make2=make2,那么表示的都是setMake中的参数列表的中make,
     * 这个make2是局部变量,make1是成员变量。
     * 所以为了区分这两个make,就有了关键字this,
     * 使用格式为“this.”,使用了该关键字后就能够区*部变量和成员变量,
     * 在成员变量前面加上this后变为“this.make=make”
    */
    public void setMake(String make) {
        //哪个对象来调用setMake方法,这个this就给哪个对象里的成员变量赋值
        this.make = make;
    }
    //因为make是字符串类型,所以返回的make也是字符串类型
  //get的目的是为了返回这个成员变量的值给调用者
   public String getMake() { return this.make; } }

然后我们切换到ClassDemo类中调用set和get方法,查看访问私有权限的make变量是否成功:

package introduction;

public class ClassDemo {

    public static void main(String[] args) {
    //1、实例化car    
    Car bmw = new Car();    
    //2、调用set方法,对make变量进行赋值,赋值为“bmw”
    bmw.setMake("bmw");
    //3、调用get方法,打印返回的值,查看调用访问是否成功
    System.out.println(bmw.getMake());    
    }

}

运行结果为:

在用eclipse工具编写java程序时,如果要使用到set和get方法,eclipse中能够自动创建get和set方法:

工具栏source--->Generate Getters and Setters...--->然后把私有成员都勾选上(已经写完get和set的私有变量不会出现在这里)--->Insertion point选项选择:After 'getMake()'--->Sort by选项选择:Fields in getter/setter pairs(表示get和set方法成对出现)--->点击ok--->查看自动创建set和get方法是否成功。

package introduction;

public class Car {
    
    //颜色
    private String color;
    //生成商
    public String make;
    //型号
    private String model;
    //年份
    private int year;

    //车拥有一个加速度的功能
    public void acceleration() {
    System.out.println("加速度了.....");
    }
    /*
     * 为了能够区分下面这段话,这里我们将表示生产商的make定义为make1,setMake中的make
     * 定义为make2,此处为了方便其它类调用,所以取名相同。
     * 因为需要给make2这个变量赋值,但上面已经定义了make1是一个字符串类型的变量,
     * 所以这里同样需要一个字符串类型的变量来进行接收,也取名叫make2,方便给make2赋值,
     * 同时也方便调用者进行区分,
     * 如果在方法主体中写成make2=make2,那么表示的都是setMake中的参数列表的中make,
     * 这个make2是局部变量,make1是成员变量。
     * 所以为了区分这两个make,就有了关键字this,
     * 使用格式为“this.”,使用了该关键字后就能够区*部变量和成员变量,
     * 在成员变量前面加上this后变为“this.make=make”
    */
    public void setMake(String make) {
        //哪个对象来调用setMake方法,这个this就给哪个对象里的成员变量赋值
        this.make = make;
    }
    //因为make是字符串类型,所以返回的make也是字符串类型,
    //get的目的是为了返回这个成员变量的值给调用者
    public String getMake() {
        return this.make;
    }
    //创建成功
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public String getModel() {
        return model;
    }
    public void setModel(String model) {
        this.model = model;
    }
    public int getYear() {
        return year;
    }
    public void setYear(int year) {
        this.year = year;
    }
}
        

 

四、Object是java中所有类的父类。