封装概述

面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。 封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的 方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

原则

  • 属性隐藏起来,若需要访问某个属性,提供公共方法对其访问。

封装性在Java当中的体现:

  • 方法就是一种封装
  • 关键字private也是一种封装

封装的操作

权限修饰符

在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,
  • public:公共的。
  • protected:受保护的
  • default:默认的
  • private:私有的
不同权限的访问能力

可见,public具有最大权限。private则是最小权限。编写代码时,如果没有特殊的考虑,建议这样使用权限:
  • 成员变量使用 private ,隐藏细节。
  • 构造方法使用 public ,方便创建对象。
  • 成员方法使用 public ,方便调用方法。
注意:不加权限修饰符,其访问能力与default修饰符相同

private关键字

  • private是一个权限修饰符,代表最小权限。
  • 可以修饰成员变量和成员方法。
  • 被private修饰后的成员变量和成员方法,只在本类中才能访问

封装的步骤

1:使用 private 修饰成员变量,代码如下
package demo03;

public class MyStudent {
    //private 修饰成员变量
    private String name;
    private int age;
}

2:提供 getXxx 方法 / setXxx 方法,可以访问成员变量,代码如下:

package demo03;

public class MyStudent {
    //private 修饰成员变量
    private String name;
    private int age;

    //获取成员变量name值的方法
    public String getName() {
        return name;
    }

    //设置成员变量值name的方法
    public void setName(String name) {
        this.name = name;
    }

    //获取成员变量age值的方法
    public int getAge() {
        return age;
    }

    //获取成员变量age值的方法
    public void setAge(int age) {
        this.age = age;
    }
}

封装的优化

this关键字

含义:
  • this代表所在类的当前对象的引用(地址值),即对象自己的引用。记住 :方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。

格式:

  • this.成员变量名;

使用:

  • 当方法的局部变量和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。如果需要访问本类当中的成员变量,需要this关键字

构造方法

构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。

构造方法的定义格式 :

 注意事项:

  • 构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样
  • 构造方法不要写返回值类型,连void都不写
  • 构造方法不能return一个具体的返回值
  • 如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数、方法体什么事情都不做。
  • 一旦编写了至少一个构造方法,那么编译器将不再赠送。
  • 构造方法也是可以进行重载的。重载:方法名称相同,参数列表不同。

代码举例

public class Student {

    // 成员变量
    private String name;
    private int age;

    // 无参数的构造方法
    public Student() {
    }

    // 全参数的构造方法
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

标准代码——JavaBean

JavaBean 是 Java语言编写类的一种标准规范。符合 JavaBean 的类,要求类必须是具体的和公共的,并且具有无 参数的构造方法,提供用来操作成员变量的 set 和 get 方法。如下图所示:

需求

编写符合 JavaBean 规范的Student类。

代码实现

package demo03;

public class Student {
    // private 修饰成员变量 格式:private 数据类型 变量名 ;
    private String name;
    private int age;

    //构造方法用来初始化该对象,给对象的成员变量赋初始值。
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    // 这个成员方法,专门私语获取age的数据
    public String getName() {
        return name;
    }

    // 这个成员方法,专门用于向age设置数据
    public void setName(String name) {
        //this关键字优化
        this.name = name;
    }

    // 这个成员方法,专门获取age的数据
    public int getAge() {
        return age;
    }

    // 这个成员方法,专门用于向age设置数据
    public void setAge(int age) {
        this.age = age;
    }

}

定义测试类

package demo03;

public class StudentTest {
    public static void main(String[] args) {
        //无参构造使用,创建对象
        Student s = new Student();
        //通过set方法 设置数据
        s.setName("张三");
        s.setAge(18);
        System.out.println(s.getName() + "‐‐‐" + s.getAge());
        //带参构造使用,创建对象并且设置初识值
        Student s2 = new Student("李四", 18);
        //获取name和age属性
        System.out.println(s2.getName() + "‐‐‐" + s2.getAge());
    }

}

代码运行之后结果

 

Java之封装性的更多相关文章

  1. 体验Java的封装性

    package com.cnblogs.java; //体验Java的封装性 /* * 如下的人类年龄赋值-300岁,显然很不合理,这种直接对类的属性赋值,有时候虽然不合理但却会编译通过. * 所以我 ...

  2. Java10-java语法基础(九)——java的封装性

    Java10-java语法基础(九)——java的封装性 一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可 ...

  3. [ Java学习基础 ] Java的封装性与访问控制

    Java面向对象的封装性是通过对成员变量和方法进行访问控制实现的,访问控制分为4个等级:私有.默认.保护和公有,具体规则如下表: 1.私有级别 私有级别的关键字是private,私有级别的成员变量和方 ...

  4. Java中封装性的使用

    //Java面对对象基本特性之一:封装性 //作用:保护某些属性和方法不被外部所看见 //封装的实现:通过关键字private声明 //鼠标右键--->Source---->Generat ...

  5. Java的封装性、继承性和多态性

    封装 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 封装的优点: 便于使用者正确.方便的使用系 ...

  6. [改善Java代码]使用静态内部类提高封装性

    建议38: 使用静态内部类提高封装性 Java中的嵌套类(Nested Class)分为两种:静态内部类(也叫静态嵌套类,Static Nested Class)和内部类(Inner Class).内 ...

  7. java封装性、继承性及关键字

    方法的参数传递(重点.难点)1.形参:方法声明时,方法小括号内的参数   实参:调用方法时,实际传入的参数的值 2.规则:java中的参数传递机制:值传递机制 1)形参是基本数据类型的:将实参的值传递 ...

  8. Java面向对象(封装性概论)

     Java面向对象(封装性概论) 知识概要:                   (1)面向对象概念 (2)类与对象的关系 (3)封装 (4)构造函数 (5)this关键字 (6)static关键 ...

  9. Java包、权限访问修饰符、封装性

    包 概念: 物理上是文件夹:逻辑上是有逻辑关系的类的集合 作用: 避免类重名:控制访问权限 命名规范: 在包名中,可以使用.号来区分包的级别:包名一般情况下是小写 第一级 指该项目的类型,如com,o ...

随机推荐

  1. 【JS档案揭秘】第三集 深入最底层探秘原型链

    关于这部分我看过大量的文章,数不胜数,包括阮一峰的继承三部曲,还有各种慕课的视频教程,网上无数继承方法的对比.也对很多概念存在长期错误的理解.今天做一个正确的总结,用来给原型链和继承这块知识画上句号, ...

  2. C#中PadLeft,PadRight的用法

    今天在遇到一个需求的时候,需要一个字符串实现自增.是根据数据库中一个自增的int类型的值,实现自增的.但是要加上前缀.比如,数据库中有一个自增的值,为,2.那么这个自增的值后面的值就位3.4.5.6. ...

  3. synchronized到底锁住的是谁?

    本文代码仓库:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/sync 先来一道校招级并发编程笔试题 题 ...

  4. 【Spring Cloud】Spring Cloud Config 实现分布式配置中心

    Spring Cloud Config 实现分布式配置中心 一.分布式配置中心 分布式系统中,往往拥有大量的服务应用,而每个应用程序都需要有对应的配置文件来协助完成服务环境初始化.运行.因此生产了大量 ...

  5. Troubleshooting: High Version Count Issues

    --查询版本高的原因 select * from v$sql_shared_cursor where sql_id=''; Configuring Download the script in the ...

  6. java编译报错 错误: 编码GBK的不可映射字符

    解决方法: 1.  javac -encoding UTF-8 .\Test_Sql.java //加上参数指定utf-8 2.改变文件编码 使用 ANSI编码.

  7. linux离线安装mysql5.7

    下载安装包 下载地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.27-1.el7.x86_64.rpm-bundle.tar 上传到 / ...

  8. InnoDB On-Disk Structures(二)--Indexes (转载)

    转载.节选于 https://dev.mysql.com/doc/refman/8.0/en/innodb-indexes.html This section covers topics relate ...

  9. mybatis基础 笔记

    Mybatis依赖<!--测试--> <dependency>      <groupId>junit</groupId>      <artif ...

  10. freemarker从入门到精通

    目录 一:概述 二:Freemarker的Helloworld 三:freemarker模板语法 1.访问map中的key 2.访问POJO中的属性 3.取集合中的数据 4.判断 5.日期 6.Nul ...