JAVA三大特征之封装

1. 封装概述

  • 封装:隐藏事物的属性和实现细节,对外提供公共的访问方式。

  • 封装的好处:

    • 隐藏了事物的实现细节

    • 提高了代码的复用性

    • 提高了安全性

  • 封装的原则:

    • 隐藏事物的属性

    • 隐藏事物的实现细节

    • 对外提供公共的访问方式

2. private关键字

  • 含义:私有的

  • 可以修饰的内容:

    • 修饰成员变量

    • 修饰成员方法

    • 修饰构造方法

    • 修饰内部类

  • 修饰之后的效果:被private修饰的成员,只能在本类中被访问。

    • 注意事项:private只是封装的一种体现形式,封装还可以使用其他的修饰符来完成。

  • 示例:

public class Demo {
    private String username = "张三";
    private String password = "123456";

    public void method1() {
        System.out.println(111);
    }

    private void method2() {
        System.out.println(222);
    }

    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.method1();
        demo.method2();
    }
}

3. Getter & Setter方法

  • 当属性被私有之后,外界无法直接访问,所以需要提供公共的访问方式,让外界可以间接的访问属性。对于当前类,就可以控制外界访问属性的方式。(我让你怎么访问,你就只能怎么访问)

  • 一般提供get方法,获取成员变量的值;提供set方法,设置成员变量的值。

  • 示例:

public class Demo {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String u) {
        username = u;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String p) {
        password = p;
    }

    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.setUsername("张三");
        demo.setPassword("12345");
        System.out.println(demo.getUsername());
        System.out.println(demo.getPassword());
    }
}

4. 变量访问原则和this关键字

  • 变量访问原则:

    • 就近原则:当在访问某个变量名称的时候,会先寻找最近的该变量名称的定义,如果寻找到了,就使用该变量,如果没有找到,才到更远的位置寻找该变量名称的定义。

    • 当局部变量和成员变量同名的时候,一定是先使用局部位置定义的变量,如果没有,才会使用成员位置定义的变量。

  • this关键字:

    • 表示当前类型当前对象的引用:哪个来调用this所在的方法,this就代表哪个对象

      • 作用:用于区分局部变量和成员变量同名的情况。使用this.属性名称的一定是成员变量,没有使用this.的变量,根据就近原则来确定使用哪个变量。

    • 示例:

public class Demo {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public static void main(String[] args) {
        Demo demo = new Demo();
        demo.setUsername("张三");
        demo.setPassword("12345");
        System.out.println(demo.getUsername());
        System.out.println(demo.getPassword());
    }
}

5. 构造方法

5.1 构造方法概述

  • 构造方法:构造函数,构造器,Constructor

  • 作用:用于给对象中的成员变量赋初始值。在创建对象的同时,JVM会自动调用构造方法,等对象创建完成的时候,对象中的成员变量就已经有指定的值了。

  • 语法结构:

修饰符 方法名称(参数列表) {
    方法体
}
  • 构造方法说明:

    • 构造方法的方法名称,必须和类名一模一样,连大小写都一样

    • 构造方法没有返回值类型,连void也没有

    • 构造方法没有return语句,如果一定需要return语句,就写一个return;return后面不能跟内容,加return没有实际的意义

    • 构造方法不需要手动调用,由 JVM 在创建对象的时候自动调用

    • 对象本身不能调用构造方法

    • 构造方法只调用一次

  • 示例:

public class Demo {
    private String username;
    private String password;

    public Demo() {
    }

    public static void main(String[] args) {
        Demo d1 = new Demo();
    }
}

注意事项:

  • 构造方法可以是有参数的,也可以是没有参数的。

    • 如果是没有参数的构造方法,外界无需传入任何的参数值,只能给成员变量赋固定值或者不赋值。

    • 如果是有参数的构造方法,外界在调用构造方法的时候,需要传入实际的参数值,通常用于赋值给成员变量。

  • 如果在类中没有定义任何的构造方法,那么系统会自动提供一个空参构造(空实现)。

  • 如果在类中手动定义了一个构造方法(无论是空参还是有参),系统都不再会提供任何的构造方法。

  • 构造方法的重载:构造方法都在同一个类中,构造方法的方法名称都和类名一致,参数列表不同,没有返回值类型,一般在类中,既需要空参构造,也需要有参构造,都手动定义出来。

  • 示例:

public class Demo {
    private String username;
    private String password;

    public Demo() {
    }

    public Demo(String username) {
      	this.username = username;
    }

    public Demo(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public static void main(String[] args) {
        Demo d1 = new Demo();
        Demo d2 = new Demo("张三");
        Demo d3 = new Demo("张三", "12345");
    }
}

5.2 构造方法和set方法的比较

  • 共同点:构造方法和set方法都是用于给成员变量赋值。不希望外界直接访问私有成员变量,通过构造方法或者set方法,间接的访问私有变量。

  • 区别:

    • 构造方法:构造方法是在创建对象的同时,由 JVM 自动调用执行,用于给属性赋值,只能执行一次。

    • set方法:set方法是在创建对象之后,由对象手动调用执行,用于给属性修改值,可以调用多次。

  • 使用场景比较:

    • 构造方法:只能在创建对象的时候被自动调用一次,代码更加简洁。一旦对象创建成功,就不能继续使用构造方法修改成员变量的值。

    • set方法:一般set方法使用更加灵活,使用更加频繁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值