Java基础——封装
最近学习Java面向对象方面的知识点,一直没时间更新博客,因为这块的知识点真的蛮绕的。一个知识点一个知识点的往外冒,而且对于我这个初学者来说区分构造器和方法就花费了一整天的时间。现在准备再重新过一遍知识点。
先背下来一个理念:
面向对象程序设计是将数据放在第一位的,然后再考虑操作数据的方法。
之前,再学习Java的优越性的时候,我们知道了Java是一种面向对象设计的程序设计语言。那到底什么是面向对象程序设计呢?要弄懂它,首先我们简单了解一下另一种程序设计。
一、面向过程程序设计:
面向过程程序设计就是自顶向下顺序执行,逐步求精;其程序结构是按照功能划分为若干个基本板块,这些板块形成一个树状结构;各模块之间的关系尽可能的简单,在功能上相对独立;每一板块内部均是由顺序、选择和循环三种基本结构组成的;其板块化实现的具体方法是使用与子程序。程序流程在写程序时就已决定。
(这个概念是我在学习面向对象时在网上找的,我把它和面向对象程序设计的概念抄在一张白纸上,其实我也不知道啥是面向过程程序设计,但是,当我学完一遍面向对象和类之后,再回来看这个概念时,是有收获的。没学过面向过程也不敢多言,仅仅学了一遍面向对象更不敢多加评论了。依照我的理解就是面向过程就像把某件事情的所有工作流程都弄成环环相扣的了,牵一发而动全身。而面向对象呢,它很聪明,它像一个制造大型机械的厂家,零件啥的它不一定都自己弄,但是它可以用尽办法去拼装(当然,拼装你也要遵循人家制定的规则),这样的好处在于,想改那块都不用担心整个工程跟着受牵连,尤其是在客户端那块。)
二、面向对象程序设计:
面向对象程序设计简称OOP,它是当今主流的程序设计范例,它已经取代了20世纪7年代的“结构化”过程化程序设计开发技术。面向对象就是把数据及对数据的操作方法放在一起,作为一个互相依存的整体,我们就叫它对象。对同类对象抽象出其共性,就形成了类。类中的大多数数据只能用于本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行沟通。程序流程由用户使用中决定。Java是完全面向对象的,必须熟悉OOP才能够编写Java程序。
(图)演示面向对象程序设计与面向过程程序设计的不同
下面这句话很重要:
面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。(这句话真的是太重要了,以后学习单例、封装、抽象类、接口的时候,就能体会的到了!)
三、类
类(class)是构造对象的模版或蓝图。由类 构造(construct)对象的过程成为创建类的实例(instance)。
在学习这里的时候,不免会有些惊慌,那么多类都需要记住啊?自己还要创建类?自己创建的类里面的内容能想全面吗?种种疑惑在心里挥之不去。其实啊,用Java编写的所有代码多位于某个类的内部。标准的Java库提供了几千类,可以用于用户界面设计、日期、日历和网络程序设计。尽管如此,我们在弄自己的项目时,也是需要根据具体情况的不同进行增加、删除和改动的。
四、封装
封装(encapsulation,有时候被成为数据隐藏),看视频课,他们把封装形容问get、set方法。从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。
对象中的数据称为实例域(instance field),操作数据的过程称作方法(method)。对于每个特定的类实例(对象)都有一组特定的实例域值。这些值的集合就是这个对象的当前状态(state)。
下面这句话很重要,背下来:
实现封装的关键在于绝对不能让类中的方法直接的访问其他类的实例域。程序仅通过对象的方法与对象的数据进行交互。
封装给对象赋予了'黑盒“特征,这是提高重用性和可靠性的关键。这意味着一个类可以全面地改变存储数据的方式,只要仍旧使用同样的方法操作数据,其他对象就不会知道或介意所发生的变化。
// 这句话是啥意思?就是说如果你哪天有需求想要定义一个Java的类,就不用担心其他的类会受到你的干扰了,你可以通过扩展一个类来建立一个你需要的新类。别忘了,实际上,在Java中所有的类都源自于一个Object。以后,我会继续介绍Object。
====封装的过程:
1.封装是将属性私有化(private);
2.你要提供get/set方法(get/set不一定都提出来,具体看你自己的需求。如果你不想让别人得到,就不提供get;如果你不想让别人设置,你就拒绝提供set。)
====访问符权限:
访问符 | 本类中 | 本包中 | 本包子类中 | 外包类 | 外包子类 |
public(常用) | 可以访问 | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 可以访问 | 不可以访问 | 可以访问 |
缺省 | 可以访问 | 可以访问 | 可以访问 | 不可以访问 | 不可以访问 |
private(常用) | 可以访问 | 不可以访问 | 不可以访问 | 不可以访问 | 不可以访问 |
代码示例:
public class XiaoNanHai{
private int age;
public void setAge(int age){
if(age>=15&&age<=35)
this.age=age;}else{
System.err.println"你输入的年龄不在指定范围内,请重新输入”);
}
}
Java基础——封装的更多相关文章
- Java基础-封装和继承
@ 目录 Java基础知识(封装和继承) 一. 封装 1.1 封装的目的 1.2 封装的好处 1.3 封装的步骤 1.4 封装的例子 1.5 小结 二. 继承 2.1 继承的介绍 2.2 生活中的继承 ...
- java基础--封装
封 装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. 好处:将变化隔离:便于使用:提高重用性:安全性. 封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共 ...
- Java基础—封装
封装是面向对象的核心特征之一,它提供了一种信息隐藏技术.类的包装包含两层含义:一是将数据和对数据的操作组合起来构成类,类是一个不可分割的独立单位:二是类中既要提供与外部联系的接口,又要尽可能隐藏类的实 ...
- Java基础-封装(09)
通过对象直接访问成员变量,会存在数据安全问题(比如年龄不能为负).这个时候,我们就不能让外界的对象直接访问成员变量. private关键字 是一个权限修饰符.可以修饰成员(成员变量和成员方法)被pri ...
- JAVA基础第二章-java三大特性:封装、继承、多态
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- Java10-java语法基础(九)——java的封装性
Java10-java语法基础(九)——java的封装性 一.Java的三大特性:封装.多态.继承 封装:通过类封装对象的数据成员和成员方法,保证只有可信的类或者对象能够访问这些方法和数据成员,对不可 ...
- Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
- Java基础系列1:Java基本类型与封装类型
Java基础系列1:Java基本类型与封装类型 当初学习计算机的时候,教科书中对程序的定义是:程序=数据结构+算法,Java基础系列第一篇就聊聊Java中的数据类型. 本篇聊Java数据类型主要包括两 ...
- Java基础之封装
封装(Encapsulation)是java面向对象的三大特性,之前学java迷迷糊糊,一直也没弄清楚什么是封装以及为什么要封装,直到这次看书才有一种被点醒的感觉. java中的封装是针对某个类而言的 ...
随机推荐
- Javascript一道面试题
实现一个函数,运算结果可以满足如下预期结果: add(1)(2) // 3add(1, 2, 3)(10) // 16 add(1)(2)(3)(4)(5) // 15 function add () ...
- 在线恶意软件和URL分析集成框架 – MalSub
malsub是一个基于Python 3.6.x的框架,它的设计遵循了当前最流行的互联网软件架构RESTful架构,并通过其RESTful API应用程序编程接口(API),封装了多个在线恶意软件和UR ...
- Laravel 中使用 Redis 数据库
一.前言 Redis 是一个开源高效的键值对存储系统,它通常用作为一个数据结构服务器来存储键值对,它可以支持字符串.散列.列表.集合.有序集合. 1. 安装 predis/predis 在 Larav ...
- 自定义list排序
使用扩展方法OrderBy,OrderByDescending,效果优良. 实现代码如下: private static void SortByExtensionMethod() { List< ...
- WebGIS开源解决方案之矢量数据导入
前几篇介绍了开源WebGIS开发环境的搭建,本篇开始陆续介绍这些软件的使用,WebGIS的开发,首要的问题是解决数据来源,本篇主要介绍矢量数据在开源空间数据库PostgreSQL中的存储.后续篇幅中再 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(十四)谈谈写博客的原因和项目优化
阶段总结 又到了优化篇的收尾阶段了,这其实是一篇阶段总结性的文章,今天是4月29号,距离第一次发布博客已经两个月零5天,这两个多月的时间,完成了第一个项目ssm-demo的更新,过程中也写了33篇博客 ...
- Rxjava学习小记
最近同事离职,接了个锅,里面的代码都是RxJava的味道,逼的自己不得不学习一波.看了网上的很多入门篇的博客,写的很不错.链接奉上: [Android]RxJava的使用(三)转换--map.flat ...
- 关于“Xshell连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次”的问题
用Xshell root连接时显示ssh服务器拒绝了密码,应该是应该是sshd的设置不允许root用户用密码远程登录 修改 /etc/ssh/sshd_config文件,注意,安装了openssh才会 ...
- 解析HTML
解析HTML 一.什么是HTML HTML是超文本标签语言,即网页的源码.而浏览器就是翻译解释HTML源 ...
- Arcengine 二次开发添加右键菜单
最近在搞arcengine 二次开发,遇到了好多问题,也通过网上查资料试着慢慢解决了,把解决的步骤记录下来,有需要帮助的可以看一下,也欢迎各位来批评指正. 想给自己的map application在图 ...