java快速封装入门代码

java快速封装入门代码_第1张图片

package com.elf;

public class Encapsulation01 {
    public static void main(String[] args) {
        //如果要使用快捷键alt+r, 需要先配置主类
        //第一次,我们使用鼠标点击形式运算程序,后面就可以用
        Person person = new Person();
        person.setName("lilei");
        person.setAge(30);
        person.setSalary(30000);
        System.out.println(person.info());
        System.out.println(person.getSalary());

        //如果我们自己使用构造器指定属性
        Person smith = new Person("smith", 80, 50000);
        System.out.println("====smith的信息======");
        System.out.println(smith.info());


    }
}

/*
那么在java中如何实现这种类似的控制呢?
请大家看一个小程序(com.hspedu.encap: Encapsulation01.java),
不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认
年龄, 必须在 1-120, 年龄, 工资不能直接查看 , name的长度在 2-6字符 之间

 */
class Person {
    public String name; //名字公开
    private int age; //age 私有化
    private double salary; //..

    public void say(int n, String name) {

    }

    //构造器 alt+insert
    public Person() {
    }

    //有三个属性的构造器
    public Person(String name, int age, double salary) {
//        this.name = name;
//        this.age = age;
//        this.salary = salary;
        //我们可以将set方法写在构造器中,这样仍然可以验证
        setName(name);
        setAge(age);
        setSalary(salary);
    }

    //自己写setXxx 和 getXxx 太慢,我们使用快捷键

    //然后根据要求来完善我们的代码.
    public String getName() {
        return name;
    }

    public void setName(String name) {
        //加入对数据的校验,相当于增加了业务逻辑
        if (name.length() >= 2 && name.length() <= 6) {
            this.name = name;
        } else {
            System.out.println("名字的长度不对,需要(2-6)个字符,默认名字");
            this.name = "无名人";
        }
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        //判断
        if (age >= 1 && age <= 120) {//如果是合理范围
            this.age = age;
        } else {
            System.out.println("你设置年龄不对,需要在 (1-120), 给默认年龄18 ");
            this.age = 18;//给一个默认年龄
        }
    }

    public double getSalary() {
        //可以这里增加对当前对象的权限判断
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    //写一个方法,返回属性信息
    public String info() {
        return "信息为 name=" + name + " age=" + age + " 薪水=" + salary;
    }
}

java快速封装入门代码_第2张图片
防护机制失效,写的set方法,被构造器破解。

package com.elf;

public class e {
    public static void main(String[] args) {
        //如果要使用快捷键,需要先配置主类
        Per per = new Per();
        per.setName("Jac88888888888888k");
        per.setAge(569999);
        per.setSalary(30000);
        System.out.println(per.info());
        System.out.println(per.getSalary());
    }
}

class Per {
    public String name;
    private int age;
    private double salary;//设成私有封装
    /*public void setName(String name) {//提供公有的public void set属性(类型 参数名)
                                     // 对属性进行判断并赋值。也可加入对数据验证的逻辑。
        this.name = name;           //属性 = 参数名
    }
    public String getName(String name) {//提供公有的public 数据类型 get属性()
        //用于获取属性的值,权限判断
        return name;
    }*/

    public String getName() {
        return name;
    }

    public void setName(String name) {
        //对数据的校验,相当于增加了业务逻辑
        if (name.length() >= 2 && name.length() <= 6) {
            this.name = name;
        } else {
            System.out.println("名字的长度不对,需要(2-6)个字符,默认名字");
            this.name = "无名人";
        }
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        //判断
        if (age >= 1 && age <= 120) {
            this.age = age;
        } else {
            System.out.println("你设置的年龄不对,需要在1——120,给默认年龄18");
            this.age = 18;//给一个默认年龄
        }
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    //写一个方法,返回属性信息
    public String info() {
        return "信息为 name=" + name + "\n\t\tage=" + age + "\n\t\tsalary=" + salary;
    }
}

java快速封装入门代码_第3张图片

package com.elf;

public class e {
    public static void main(String[] args) {
        //如果要使用快捷键,需要先配置主类
        Per per = new Per();
        per.setName("Jac88888888888888k");
        per.setAge(569999);
        per.setSalary(30000);
        System.out.println(per.info());
        System.out.println(per.getSalary());
        //如果自己使用构造器指定属性
        Per smitn = new Per("smitn", 2000, 50000);
        System.out.println("=====smitn的信息====");
        System.out.println(smitn.info());
    }
}

class Per {
    public String name;
    private int age;
    private double salary;//设成私有封装
    //构造器alt+insert
    public Per() {//无参构造器
    }
    public Per(String name, int age, double salary) {//带3个属性的构造器
        this.name = name;
        this.age = age;
        this.salary = salary;
    }
    /*public void setName(String name) {//提供公有的public void set属性(类型 参数名)
                                     // 对属性进行判断并赋值。也可加入对数据验证的逻辑。
        this.name = name;           //属性 = 参数名
    }
    public String getName(String name) {//提供公有的public 数据类型 get属性()
        //用于获取属性的值,权限判断
        return name;
    }*/

    public String getName() {
        return name;
    }

    public void setName(String name) {
        //对数据的校验,相当于增加了业务逻辑
        if (name.length() >= 2 && name.length() <= 6) {
            this.name = name;
        } else {
            System.out.println("名字的长度不对,需要(2-6)个字符,默认名字");
            this.name = "无名人";
        }
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        //判断
        if (age >= 1 && age <= 120) {
            this.age = age;
        } else {
            System.out.println("你设置的年龄不对,需要在1——120,给默认年龄18");
            this.age = 18;//给一个默认年龄
        }
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    //写一个方法,返回属性信息
    public String info() {
        return "信息为 name=" + name + "\n\t\tage=" + age + "\n\t\tsalary=" + salary;
    }
}

优化后java快速封装入门代码_第4张图片

package com.elf;

public class e {
    public static void main(String[] args) {
        //如果要使用快捷键,需要先配置主类
        Per per = new Per();
        per.setName("Jac88888888888888k");
        per.setAge(569999);
        per.setSalary(30000);
        System.out.println(per.info());
        System.out.println(per.getSalary());
        //如果自己使用构造器指定属性
        Per smitn = new Per("smitn", 2000, 50000);
        System.out.println("=====smitn的信息====");
        System.out.println(smitn.info());
    }
}

class Per {
    public String name;
    private int age;
    private double salary;//设成私有封装
    //构造器alt+insert
    public Per() {//无参构造器
    }
    public Per(String name, int age, double salary) {//带3个属性的构造器
//        this.name = name;
//        this.age = age;
//        this.salary = salary;
        //将set方法写在构造器中,仍然可以构造数据,并验证
        setName(name);//因构造器会调用set方法,所以传进去的值也会根据set设置去验证
                      //依然可以起到防护机制
        setAge(age);
        setSalary(salary);
    }
    /*public void setName(String name) {//提供公有的public void set属性(类型 参数名)
                                     // 对属性进行判断并赋值。也可加入对数据验证的逻辑。
        this.name = name;           //属性 = 参数名
    }
    public String getName(String name) {//提供公有的public 数据类型 get属性()
        //用于获取属性的值,权限判断
        return name;
    }*/

    public String getName() {
        return name;
    }

    public void setName(String name) {
        //对数据的校验,相当于增加了业务逻辑
        if (name.length() >= 2 && name.length() <= 6) {
            this.name = name;
        } else {
            System.out.println("名字的长度不对,需要(2-6)个字符,默认名字");
            this.name = "无名人";
        }
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        //判断
        if (age >= 1 && age <= 120) {
            this.age = age;
        } else {
            System.out.println("你设置的年龄不对,需要在1——120,给默认年龄18");
            this.age = 18;//给一个默认年龄
        }
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    //写一个方法,返回属性信息
    public String info() {
        return "信息为 name=" + name + "\n\t\tage=" + age + "\n\t\tsalary=" + salary;
    }
}

你可能感兴趣的:(JAVA基础,java,开发语言,jvm)