1.1封装的基础实现。
        封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。封装是一种信息隐藏技术,在java中通过关键字private实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。
    1.2封装的作用
        ① 对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
        ②对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。

/*封装性   说的是 安全性 不让外部对象直接调用或者是修改
  需要解决的是 把属性保护起来 JAVA 关键字 private  
  但是 太安全了  外部无法访问  
  如想现在需要通过对象操作类中的属性在java 中有个要求 可以使用 setter,getter 设置或 取得属性
  以public String name 封装为例
    设置属性 public void setName(String n):  名称 要首字母大写
    取得属性 public void getName():    
*/

// 以后只要是类中的属性全部都要使用private 封装 封装后的是属性必须按照要求编写 setter,getter 方法

class Person { //现在定义一个类
//定义类中的两个属性
private String name; // 表示人的姓名
private int age; // 表示人的年龄
public void tell(){
System.out.println("姓名:" + name +"年龄:" + age);
}
public void setName(String n){
name = n;
}
public void getName(){
return name;
}
public void setAge(int a){
if(a >= 0&&a <= 100){
age = a;
}
}
public void getAge(){
return age;
}
}
public class T{// 另一个类
public static void main (String args[]){
Person per = new Person();
per.setName("少爷"+"\n");
per.setAge(-3);
per.tell();
}
}

/*  private 声明的属性只能够被类的内部做访问
    private 声明的属性必须有对应的 setter,getter 方法
*/

>>>
    在JAVA中所有面向对象的概念都是以类与对象的关系为主的。那么下面通过一个具体的程序来研究一下,为什么需要有封装性。
    范例:观察如下程序代码

class Person { //现在定义一个类
//定义类中的两个属性
String name: // 表示人的姓名
int age: // 表示人的年龄
public void tell(){
system.out.println("姓名:" + name +"年龄:" + age):
}
}
public class T{// 另一个类
public static void main (String args[]){
Person per = new Person():
per.neme = "少爷":
per.age = -30:
per.tell():
}
}
// 姓名:少爷,年龄:-30

现在的代码没有语法错误,但是从显示的角度来讲,这个代码是有错误的,而且问题严重。这样的错误严格来讲就属于业务错误。那么造成这种出错的原因是什么?
        最大的错误在于当前类中的属性可以直接被类外部的对象调用。所以,此时就认为这样的操作属于不安全的操作
    那么现在最需要解决的问题设计将内部的属性保护起来,即,不让外部直接操作。为此在JAVA中提供有一个 private 关键字,利用此关键字可以实现封装。

    加入 private 之后,就表示此时 name 与 age 两个属性只能够被person类访问。
    范例;错误调用

    现在发现,使用了private 定义的属性,类的外部不能够直接进行访问了,所以安全性是最高的
    那么如果现在需要通过对象操作类中的属性,那么JAVA 中就有了一个明确额要求:可以使用 setter,getter 方法设置或取得封装内容,以 privare String name 封装属性为例:
        设置数据:public void setName(String n );
        取得数据:public String getName();
    以 private int age ;封装属性为例:
        设置数据:public void setAge(int a);
        取得数据:public int getAge();
    范例:修改程序,使得外部可以访问私有属性

    开发原则:以后只要是类中的属性全部使用 private 封装,封装后的属性必须严格按照要求编写 setter,getter 方法,不管当前代码是否调用了 getter,必须提供
    如果非要进行一些检测操作,则可以修改 setter 方法(只是现在临时说明)



// 姓名:哪吒,年龄:0

/*  private 声明的属性只能够被类的内部做访问
        private 声明的属性必须有对应的 setter,getter 方法
    */

>>>>>
    private 声明的属性只能够被类的内部所访问;
    private 声明的属性必须有对应的 setter,getter 方法,而且方法名称要求按照严格标准编写

---------------------------------------------

封装的简单例子:
先来个例子看看;

public class Man{
//对属性的封装,一个人的姓名,年龄,妻子都是这个对象(人)的私有属性
private String name;
private int age;
private Woman wife;
//对该人对外界提供方法的封装,可以设定妻子,姓名,年龄也可以获得男人的姓名和年龄
  // 方法封装
  public void setWife(Woman wife){
   this.wife = wife;
  }
  public String getName(){
   return name;
  }
  public void setName(String name){
  this.name = name;
  }
  public int getAge(){
   return age;
  }
  public void setAge(int age){
   this.age = age;
  }
}
public class Woman{
  // 属性封装
  private String name;
  private int age;
  private Man husband;
  // 方法封装
  public String getName(){
   return name;
  }
  public void setName(String name){
   this.name = name;
  }
  public int getAge(){
   return age;
  }
  public void setAge(int age){
   this.age = age;
  }
  public Man getHusband(){
   return husband;
  }
  public void setHusband(Man husband){
   this.husband = husband;
  }
}

/**
仔细看就会发现,Man类没有提供getWife的方法,这是因为男人不想让自己的妻子被外界访问,接下来呢,就是封装可以把一个对象的属性私有,而提供一些可以被外界访问的属性的方法,比如说,name属性,Man和Woman类都有相应的get和set方法,外界都可以通过这些方法访问和修改。同时对一些对象不想让外界访问的属性,就不提供其方法,比如说Man的wife属性,就没有get方法。外界是不能得到Man类的wife属性的
*/
上面那例子可能没有突出封装的好处,下面来个超简单的表达下:

public class Show{
public static void show(String str){
System.out.println(str);
}
}

上面就是对 System.out.println();的封装。
调用的时候 :

public class Use{
public static void main(String[] args){
Show.show("封装");
}
}

这样用的时候就不用使:System.out.println("封装");

菜鸡的Java笔记 第十一 - java 封装性的更多相关文章

  1. 【Java笔记】配置文件java.util.Properties类的使用

    配置文件的路径:项目名/src/main/resources/mmall.properties mmall.properties的内容是键值对.例如假设写了ftp服务器的一些信息. ftp.serve ...

  2. Java笔记12:Java对象排序

    代码: import java.util.Arrays; import java.util.Comparator; class Person { private String name; privat ...

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

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

  4. 菜鸡的Java笔记 第二十一 final 关键字

    使用final定义类,属性,方法            final在一些书中被称为终结器,意思是:利用final定义的类不能够有子类,利用final定义的方法不能够被覆写,利用final定义的变量就成 ...

  5. 菜鸡的Java笔记 第二十三 - java 抽象类的概念

    abstractClass 抽象类的概念        1.抽象类的基本定义        2.抽象类的使用原则                不会抽象类与接口,java = 没学           ...

  6. 菜鸡的Java笔记 第八 - java 面向对象

    面向对象的特点以及开发过程.    java中最大的特点是其支持面向对象编程设计思想.在面向对象之前广泛流传的是面向过程的编程思想,例如:C语言的开发就属于面向过程    如果要想更简单的去理解面向过 ...

  7. 菜鸡的Java笔记 第七 - java 数组

    数组的基本概念     笔试中经常出现的试题或是问题    1.1 概念        数组指的是一组相关变量的集合         如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ...

  8. 菜鸡的Java笔记 第六 - java 方法

    前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式.而完整的组成方式将随着学习逐步渗透. 1.方法的基本定义 方法(Method)在一些书中也会有人将其说是  函数(Funct ...

  9. 菜鸡的Java笔记 第五 - java 程序逻辑控制

    程序主要分为三种逻辑:顺序,分支,循环. if 分支语句 if分支语句是最为基础的分支操作,但是其有三种使用形式: if语句 if.....else   语句 if....else...if...el ...

随机推荐

  1. 初探webpack之编写plugin

    初探webpack之编写plugin webpack通过plugin机制让其使用更加灵活,以适应各种应用场景,当然也大大增加了webpack的复杂性,在webpack运行的生命周期中会广播出许多事件, ...

  2. Ubuntu安装 配置GCC和Vim

    VMware14.0和Ubuntu镜像安装 https://mp.weixin.qq.com/s/045wrbdv92PkUQn2abddvA 适应屏幕设置 按照下列流程检查虚拟机设置 查看 -> ...

  3. 8086的复位与启动 CPU执行指令的步骤

    东北大学-计算机硬件技术基础 CPU执行指令的步骤 取指令 Fetch 指令译码 Decode 执行指令 Execute 回写 Write-back 修改指令指针 取指令 将CS和IP的内容通过地址加 ...

  4. JavaScript04

    分离绑定事件 使用分离方式绑定元素事件可以使用页面元素与JavaScript代码完全分离,有利于代码分工和维护,是目前开发主流,分为两步: 1.获取需要绑定事件的元素 语法:根据id属性值取元素节点 ...

  5. [no_code][Beta]发布声明报告

    $( "#cnblogs_post_body" ).catalog() 软件下载 一个全新的超简易的OCR表单识别工具 轻松拍照,实现手写表格识别 一键打开,支持多种应用打开你的表 ...

  6. the Agiles Scrum Meeting 4

    会议时间:2020.4.12 20:00 1.每个人的工作 今天已完成的工作 yjy:基本完成广播功能,修复bug issues:小组任务1-增量开发组 Bug:冲刺 wjx:继续实现注销功能的后端 ...

  7. SpringBoot整合Prometheus

    SpringBoot整合Prometheus 一.需求 二.实现步骤 1.引入jar包 2.application.prometheus文件配置 3.查看指标数据 4.接入到 prometheus 中 ...

  8. elasticsearch嵌套对象的映射

    在es中,我们有时候可能需要映射,{ "field" : "xx" , "field01" : [] }这样格式的嵌套对象,默认情况下es会 ...

  9. [经验] 电源抑制比(PSRR)的测量原理及解决方法

    PSRR(Power supply rejection ratio)又称电源抑制比,是衡量电路对于输入电源中纹波抑制大小的重要参数,表示为输出纹波和输入纹波的对数比,单位为分贝(dB)[1],其计算公 ...

  10. 六个好习惯让你的PCB设计更优(转)

    PCB layout工程师每天对着板子成千上万条走线,各种各样的封装,重复着拉线的工作,也许很多人会觉得是很枯燥无聊的工作内容.看似软件操作搬运工,其实设计人员在过程中要在各种设计规则之间做取舍,兼顾 ...