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


    我们新建第一个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中所有类的父类。

  • 相关阅读:
    C++中 destory() 和deallocate()以及delete函数的相关性和区别性
    由STL所想到的 C++显示调用析构函数
    MINIX3 内核整体架构回顾及内核定 性分析
    有一个无效 SelectedValue,因为它不在项目列表中
    SqlParameter.Value = NULL 引发的数据库异常
    前端解决跨域问题的8种方案(最新最全)
    SQL语句优化技术分析 整理他人的
    暂时未整理 已打印
    .Net_把文件数据添加到数据库中(面试题)
    ASP.NET中application对象的用法(面试题)
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/9506887.html
Copyright © 2020-2023  润新知