封装概述

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

原则

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

封装性在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. 关于华为模拟器eNSP-防火墙USG6000V怎么重装镜像

    一.首先关闭eNSP软件 二.打开Oracle VM VirtualBox 三.单击VirtualBox “管理 - 虚拟介质管理”,将vfw_usg.vdi下面的子链接释放然后删除 四.最后回到主界 ...

  2. iOS字符串处理_替换(去掉空格换行)、截取

    以下代码主要实现了:1.截取"@@"前的字符串:  2.去掉字符串中的"##":  3.去掉字符串中的空格和换行. 希望相互学习相互指正. -----ViewC ...

  3. Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

    使用Qt写了个窗口,运行报错,无法正常运行python程序,获得的报错信息如下: Process finished with exit code 139 (interrupted by signal ...

  4. navicat for mysql 连接 mysql 出现Client does not support authentication protocol requested by server解决方案

    一 .桌面左下角windows图标--搜索框内输入cmd,结果如图所示,点击cmd.exe,或者使用快捷键Windows键(在键盘上有个Windows标志的按键)+R输入cmd后回车. 二. 在出来的 ...

  5. hibernate opensission.createSQLquery 问题

    在进行分页查询的时候,通常会用到,页码,每页容量等等的参数进行操作,如下图: query.list()的时候会执行得到所需要的集合的值,在这个过程中, 如果使用自定义的返回参数,比如将日期做一些基本处 ...

  6. Linux中fuser命令用法详解

    描述: fuser可以显示出当前哪个程序在使用磁盘上的某个文件.挂载点.甚至网络端口,并给出程序进程的详细信息. fuser显示使用指定文件或者文件系统的进程ID. 默认情况下每个文件名后面跟一个字母 ...

  7. php中文乱码原因和维修方法

    一.首先是PHP网页的编码 1.如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb2312”),静态页面添加,所有文 ...

  8. PAT 1003 Emergency 最短路

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  9. ASP.NET Core 2.2 WebApi 系列【七】泛型仓储模式和工作单元

    在之前的泛型仓储模式实现中,每个增删改都调用了SaveChanges方法,导致每次更新都提交了事务. 在实际开发过程中,我们经常遇到同时操作多张表数据,那么按照之前的写法,对数据库提交了多次操作,开启 ...

  10. GO-&获取地址与*解引用

    &变量 获取变量在内存空间的地址 *变量地址 获取变量的值 一.普通数据 package main import "fmt" func main(){ b :=1111 c ...