Java之封装性、getter方法setter方法、以及构造函数的作用

1、封装性(private)

首先我们来看一个例子:

public class People {
    int age;
    String name;
}
public class Test {
    public static void main(String[] args) {
        People people = new People();
        people.name = "张三";
        people.age = 28;
        System.out.println(people.name);
        System.out.println(people.age);

        people.age = -1000;
        System.out.println(people.age);
    }

}

测试结果:
张三
28
-1000

人怎么可能有负数的年龄,这样很不合理。其他类随便访问,而且随便修改值,这样很不安全。

为什么要封装?好处是?

  • 封装把复杂的事物变成简单的事物,通过一个操作入口。
  • 封装之后才会形成真正的对象,真正的独立体。
  • 封装意味着可以重复使用,适应性强、安全性高。

封装步骤:

  1. 所有属性私有化,使用private关键字就行修饰。(private表示私有,修饰的数据只能在本类中访问)
  2. 有private修饰但是我还想在其它类访问怎么办——>使用getter/setter方法(可以会有疑问,既然能通过getter/setter在其它类也能访问,那封装来干嘛。别急看第二大点)

2、getter/setter方法

下面的例子通过private来就行封装,所以其他类通过(引用.变量)的方式访问不了了,必须通过(引用.方法)来访问,而方法里面可以写限制的条件,这样就保证了安全性。

public class People {
    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if( age < 0 || age>150){
            System.out.println("你赋值的年龄不合法");
        }else{
            this.age = age;
        }
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public class Test {
    public static void main(String[] args) {
        People people = new People();
        people.setName("张三");                       //setter方法用来赋值
        people.setAge(28);

        System.out.println(people.getName());        //getter方法用来取值
        System.out.println(people.getAge());

        people.setAge(-1000);						//这个条件被限制了,所以没有改变到值
        System.out.println(people.getAge());		//输出原来的值

    }

}

测试结果:
张三
28
你赋值的年龄不合法
28

建议:setter方法和getter方法采用自动生成。如果不是自动生成,必须按照他的语法规则来写。

3构造方法

构造函数(constructor)是一种特殊的方法,只不过他是与new运算符一起使用在创建对象的语句中 。
每一个类都会自动生成一个构造方法,只是不给你看见而已,而且构造函数方法可以被重载。

其作用具体有:

  1. 用来在创建对象
  2. 为对象成员变量赋初始值

上面我们知道setter可以为变量赋值,而构造方法的作用2也有赋值功能。
当有很多变量时就要写很多的setter方法(这样太麻烦了),直接把他们变成构造方法。
代码可以改成:

public class People {
    private int age;
    private String name;

    public int getAge() {
        return age;
    }
/*
    public void setAge(int age) {
        if( age < 0 || age>150){
            System.out.println("你赋值的年龄不合法");
        }else{
            this.age = age;
        }
    }
*/
    public String getName() {
        return name;
    }
/*
    public void setName(String name) {
        this.name = name;
    }
*/
    public People(int age, String name) {				//默认的构造方法是空的,这里重载了构造方法并带有形参;
        if( age < 0 || age>150){
            System.out.println("你赋值的年龄不合法");
        }else{
            this.age = age;
        }
        this.name = name;
    }
}
public class Test {
    public static void main(String[] args) {
        People people = new People(28,"张三");			//这里通过new调用带有形参的构造方法,创建了对象并赋值
/*
        people.setName("张三");                       //setter方法用来赋值
        people.setAge(28);
*/
        System.out.println(people.getName());        //getter方法用来取值
        System.out.println(people.getAge());

        People people1 = new People(-1000,"张三");
        System.out.println(people.getAge());

    }

}
测试结果:
张三
28
你赋值的年龄不合法
28

建议:构造方法采用自动生成(生成时可以挑选哪个变量作为你的形参)。如果不是自动生成,必须按照他的语法规则来写。

  • 32
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值