Java封装的概念详解

一:封装的概念

Java是一门面向对象的语言,面向对象就是一种以组件化模式进行代码开发的思想,面向对象的理解你需要学完整个课程才会有感觉,面向对象有

三个基本特征:封装、继承、多态。

今天学习的是封装,封装是一个非常广泛的概念,小到一个属性的封装,大到一个框架或者一个项目的封装,比如说我们后面学习的框架就是第三方封装好的api ( Application Programming Interface) 。今天我们看封装的最小概念(属性的封装)。

DEMO:观察代码

package com. bai . demo;public class Hello {   public static void main(String[] args) {      Person per=new Person( );      per . name="李四";      per .age=-10;      System. out . println("我的名字是:"+per . name) ;      System . out . println("我的年龄是:"+per.age) ;   }}

此时的代码在语法上没有错误,但是在逻辑上出现了问题,因为一个的年龄不.可能是负数,出现这一问题的根本原因是外部程序能直接访问Person类中的属性age,如果要让其属性不能被外部访问那么我们可以使用一个关键字来封装属性,这个关键字是“private”表示私有的。

DEMO:封装属性

package com. bai . demo;//定义了一个规范人信息的类public class Person {    //名字      String  name ;      //年龄      private int age;}

此时发现了外部程序不能访问age属性了,提示的错误是“这个属性不可见”那么如果一个属性不能访问就失去了本身意义,我们应该为这个封装的属性在内部提供方法(接口)来访问该属性,这样的方法需要两个:一个是取得该属性( getter方法),另外一个是为该属性赋值(setter 方法)

DEMO:提供setter和getter方法访问age属性

package com.bai . demo;//定义了一个规范人信息的类public class Person {    //名字      String name;      //年龄      private int age;      public void setAge(int myage) {        age=myage ;      }      public int getAge() {       return   age;   }  }  package com. bai . demo;public class Hello {  public static void main(String[] args) {    Person per=new Person( ) ;      Person per=new Person( ) ;      per. name="李四";      per. setAge(-10);      System. out. println("我的名字是:"+per . name) ;      System. out . print1n("我的年龄是: "+per. getAge());  }}
}

有同学就说:折腾了半天依然可以是负数呀,不是白搞了吗?其实上当我们通过方法来访问属性的时候我们可以在方法中做-一些逻辑判断,让数据更完全。比如说我们可以在方法中判断你输入的年龄是否合理。

DEMO: setter 方法中判断年龄

package com. bai . demo;//定义了一个规范人信息的类public class Person {  //名字.   String   name ;   //年龄    private int age;    public void setAge( int  myage) {     if(myage<=0||myage>200) {//如果传入 年龄为负数则使用默认值        age=10;     }else {       age=myage;  }}    public int   getAge() {      return   age ;  }}
package com. bai . demo ;public class Hello {  public static void main(String[] args) {      Person per=new Person( );      per. name="李四";      per.setAge(1000);      System. out . println("我的名字是: "+per . name);      System. out. println("我的年龄是: "+per. getAge());   } }

以上就是属性的封装,在开发中一个类的属性基本都要封装,尤其是简单Java类(JavaBean)需要封装,封装之后要为封装的属性提供setter个getter方法。

总结:

1、封装的好处:

●可以让程序内部结构更安全

●可以把重复的代码封装,之后再需要的地方进行调用,在一定程度上解决了代码的重复

2、今天学习的是封装的最小概念(属性的封装)

3、封装的属性要提供setter和getter方法

4、setter 和getter方法的书写规则:

●setter 方法: set+首写字母大写的属性名, 没有返回值(void),有参数。

●getter 方法: get+首写字母大写的属性名,有返回值,没有参数。

(0)

相关推荐

  • 阿里巴巴不建议 boolean 类型变量用 isXXX的理由?

    背景 平时工作中大家经常使用到boolean以及Boolean类型的数据,前者是基本数据类型,后者是包装类,为什么不推荐使用isXXX来命名呢?到底是用基本类型的数据好呢还是用包装类好呢? 例子: 1 ...

  • CTO:不要在代码中写 set/get 方法了,逮一次罚款...

       正文    CTO:what?你的 Java 代码中还充斥着大量的 set/get 方法 于是公司出了规定:不要在代码中写 set/get 方法了,逮一次罚款. 刚开始学习 Java 语言的时候 ...

  • 用好这个 IDEA 插件,写代码效率至少提升 5 倍!

    用好这个 IDEA 插件,写代码效率至少提升 5 倍! 还在编写无聊枯燥又难以维护的POJO吗?洁癖者的春天在哪里?请看Lombok! 在过往的Java项目中,充斥着太多不友好的代码:POJO的get ...

  • 初识Fastjson漏洞(环境搭建及漏洞复现)

    目前网上的资源整理不是针对入门玩家,都需要一定的java漏洞调试基础,本文从一个简单的FastJson 漏洞开始,搭建漏洞环境,分析漏洞成因,使用条件等.从入门者的角度看懂并复现漏洞触发,拥有属于自己 ...

  • 封装

    封装 该露的露,该藏的藏 我们程序设计要追求高内聚,低耦合 高内聚:类的内部操作细节自己完成,不允许外部干涉 低耦合:仅暴露少量的方法给外部使用 通常,应禁止直接访问一个对象中数据的实际表示,而应通过 ...

  • 科技·Kotlin从入门到精通,类和对象

    类和对象是两种以计算机为载体的计算机语言的合称.对象是对客观事物的抽象,类是对对象的抽象.类是一种抽象的数据类型.它们的关系是,对象是类的实例,类是对象的模板.类定义Kotlin类可以包含:构造函数和 ...

  • 五分钟 掌握 原型模式 (文末送书)

    回复"000"获取程序员必备电子书 大家好,我是老田,今天我给大家分享设计模式中的原型模式.用贴切的生活故事,以及真实项目场景来讲设计模式,最后用一句话来总结这个设计模式. 关于设 ...

  • 科技·Kotlin从入门到精通,继承

    Kotlin 中所有类都继承该 Any 类,它是所有类的超类,对于没有超类型声明的类是默认超类:class Example // 从 Any 隐式继承Any 默认提供了三个函数:equals()has ...

  • 【PPT】数字税的概念详解、全球进展和有关影响

    读BD最佳实践案例,赢DT未来! 18个行业,106个中国大数据应用最佳实践案例: (1)<赢在大数据:中国大数据发展蓝皮书>: 免费试读:https://item.jd.com/1205 ...

  • POW和 POS概念详解

    pow-工作量证明 工作量证明最初是一个经济名词,它是指系统为实现某一目标而设定的测量标准,一个简单的理解就是一个证明,证明你做了一定数量的工作,哈希运算是最常用的一种工作量证明机制,它通过计算碰撞出 ...

  • 核心交换机参数概念详解,搞不清的弱电人进来看看!

    核心交换机参数概念详解 一.背板带宽 背板带宽也称交换容量,是交换机接口处理器或接口卡和数据总线间所能吞吐的最大数据量,就像是立交桥所拥有的车道的总和.由于所有端口间的通信都需要通过背板完成,所以背板 ...

  • 汽车组件概念详解:硬件、软件与系统

    当我们讨论软件,硬件,功能层面的分解与集成,从属及映射关系时,会牵扯出元件,构件,中间件,组件,模块,系统等很多概念,乱不乱?非常乱.但如果无法区别这些概念,在沟通的基础语言上就会出现大量问题,这是不 ...

  • Java中的多态详解

    一.多态的概念 多态分为类的多态和方法的多态,类的多态就是一个类型可以有不同的表现形态,什么样的类型才会具备多态呢?只有被多个子类继承或者实现的父类才具备多态的特征,因为在运行期间可以根据具体的子类表 ...

  • 概念详解03 | 帝国主义概念考析

    编者按 历史概念是理解历史本质的关键.本专栏特选取历史教学中的若干重要概念,对于其含义.起源和演变的探究进行解析,希望对于一线历史教学有所助益. ✎原载 |历史教学(高校版)2007年第2期 ✎作者  ...

  • Java并发之AQS详解

    一.概述 谈到并发,不得不谈ReentrantLock:而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQ ...

  • 从零开始学Java(九)详解Java中的方法

    方法 1.什么是方法,有什么用? (可以先看一下一个程序如果没有方法,会出现什么问题?) 方法(英语单词:method)是可以完成某个特定功能的并且可以被重复利用的代码片段. 方法的出现,让代码具有了 ...

  • Java类和对象 详解(一)

    一.面向对象简述 面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面 ...