【Java基础篇】封装(Encapsulation)
【Java基础篇】封装(Encapsulation)
- 1. 封装含义
- 2. private(私有)关键字
- 3. 构造函数
- 3.1 什么是构造函数
- 3.2 构造函数的重载
- 3.3 构造函数的调用
- 3.4 构造函数的访问权限
- 3.4 构造函数的作用
- 3.5 构造函数的小细节
- 4 构造代码块{ }
- 5 this关键字
- 6 super关键字
- 7. static关键字
- 8. 类的执行顺序(对象初始化过程)
- 9. main方法是静态的
- 10. instanceof关键字
- 11. final(最终)
1. 封装含义
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
- 好处:
- 将变化隔离。
- 便于使用。
- 提高重用性。
- 提高安全性。
- 封装原则:
- 将不需要对外提供的内容都隐藏起来。
- 把属性都隐藏,提供公共方法对其访问。
2. private(私有)关键字
- private关键字:
- 是一个权限修饰符。
- 用于修饰成员(成员变量和成员函数)
- 被私有化的成员只在本类中有效。
- 常用之一:
- 将成员变量私有化,对外提供对应的set ,get 方法对其进行访问。
- 提高对数据访问的安全性。
注意: 私有仅仅是封装的一种表现形式。之所以对外提供访问方式,就因为可以在访问方式中加入逻辑判断等语句。对访问的数据进行操作。提高代码健壮性
3. 构造函数
3.1 什么是构造函数
- 构造函数(Constructor)是一个特殊的函数。
- 函数名和类名相同
- 没有返回值类型。注意:没有返回值类型不等同于
void
,void
也是一种返回值类型。不能使用return
关键字返回任何值。 - 在使用
new
关键字创建对象之后自动调用
3.2 构造函数的重载
构造函数的重载和普通函数相同,函数名相同,参数列表不同即可。
3.3 构造函数的调用
- 构造函数在
new
关键字创建对象时调用 - 构造函数可以在该类其他构造函数的第一个语句使用
this
关键字调用。
3.4 构造函数的访问权限
- 在定义构造函数时,如无特殊需要,应使用public关键字修饰构造函数。
- 在一些特定情况下,我们不想让别人创建该类对象,那么可以使用
private
修饰构造函数,例如单例设计模式。
3.4 构造函数的作用
可以用于给对象进行初始化。
3.5 构造函数的小细节
1、当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。当在类中自定义了构造函数后,默认的构造函数就没有了。
2、构造函数和一般函数在写法上有不同。在运行上也有不同。构造函数是在对象一建立就运行。给对象初始化。而一般方法是对象调用才执行,是给对象添加对象具备的功能。一个对象建立,构造函数只运行一次。而一般方法可以被该对象调用多次。
3、什么时候定义构造函数呢?
- 当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。
4 构造代码块{ }
A. 作用:
1、 给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。
2、和构造函数的区别:
- 构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。
- 构造代码块的作用:它的作用就是将所有构造方法中公共的信息进行抽取。
B. 构造代码块要注意的细节:
1、构造函数的代码是位于成员变量的显式初始化语句、构造代码块语句之后执行的。更符合
2、成员变量的显式初始化语句与构造代码块的语句的先后执行顺序是按照当前代码的顺序执行的。
3、成员变量的初始化语句和构造代码块的代码其实是在构造函数中完成的。
5 this关键字
特点:this关键字代表的是所属函数的调用者对象
问题: 存在着同名的成员变量与局部变量时,在方法内部默认是访问局部变量的数据,如何才能访问成员变量呢?
this关键字的作用:
一个类存在着同名的成员变量与局部变量时,在方法内部默认是访问局部变量的数据,我们可以通过this关键字指定访问成员变量的数据。
this关键字可以在构造函数中调用其他的构造函数初始化对象使用。
this关键字要注意的细节:
- 如果在一个函数中访问一个成员变量,而且没有存在同名的局部变量时,那么java编译器会默认在变量的前面加上this关键字的。
- this关键字调用其他的构造函数时,this语句必须 位于构造函数中的第一个语句。
- this关键字调用构造函数的时候不准出现相互调用的情况,因为是一个死循环的调用方式。
6 super关键字
super关键字代表的是父类的引用空间。
super关键字的作用:
- 如果子父类存在着同名的成员时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员。
- 创建子类对象时,默认会先调用父类无参的构造函数, 通过super关键字可以在子类的构造函数中指定调用父类的构造函数。
super调用父类的构造函数要注意的细节:
- super关键字调用构造函数的时候,必须是构造函数中的第一个语句。
- super、this关键字调用调用构造函数的时候,不能同时出现在同一个构造函数。(因为两个都需要是第一个语句)
7. static关键字
注意: 静态函数不能出现this以及super关键字。
原因: 因为静态函数可以使用类名直接调用,而这时候可能还没有对象存在,this又要代表当前对象
1、static特点
- 随着类的加载而加载,静态会随着类的加载而加载,随着类的消失而消失。说明它的生命周期很长。
- 优先于对象存在。静态是先存在,对象是后存在。
- 被所有实例(对象)所共享。
- 可以直接被类名调用
2、静态变量(类变量)和实例变量的区别:
- 存放位置
- 类变量随着类的加载而加载存在于方法区中.
- 实例变量随着对象的建立而存在于堆内存中.
- 生命周期
- 类变量生命周期最长,随着类的消失而消失
- 实例变量生命周期随着对象的消失而消失.
3、静态优缺点
- 优点:对对象的共享数据进行单独空间的存储,节省空间 例如Person 都有国籍。该数据可以共享可以被类名调
- 缺点:生命周期过长访问出现局限性。(静态只能访问静态)
4、什么时候定义静态变量:
静态变量(类变量)当对象中出现共享数据;例如:学生的学校名称。学校名称可以共享。对象的数据要定义为非静态的存放在对内存中(学生的姓名,学生的年龄)
5、 什么时候定义静态函数:如果功能内部没有访问到非静态数据(对象的特有数据。那么该功能就可以定义为静态)
6、非静态的成员变量与静态成员变量的区别
- 数量上的区别:
- (n份)非静态成员变量是在每个对象中都维护一份数据
- (1份)静态成员变量只会在方法中维护一份数据。
- 访问方式上的区别:
- 非静态的成员变量只能使用对象进行访问.
- 静态成员变量可以使用对象、类名进行访问。
- 存储位置上的区别;
- 非静态成员变量是存储在堆内存中。
- 静态成员变量是存储在方法区中。
- 命周期的区别:
- 非静态成员变量是随着对象的创建而存在,随着对象的消失而消失。
- 静态成员变量是随着类文件的加载而存在,随着类文件(字节码文件)的消失而消失。
- 作用上的区别:
- 非静态成员变量的作用是用于描述一类事物的属性。
- 静态成员变量的作用是提供一个共享数据给所有对象使用的。
8. 类的执行顺序(对象初始化过程)
- 类内容(静态变量,静态初始化块) => 实例内容(变量,初始化块,构造器)
- 父类的(静态变量,静态初始化块) => 子类的(静态变量,静态初始化块) => 父类的(变量,初始化块,构造器) => 子类(变量,初始化块,构造器)
9. main方法是静态的
public static void main(String[] args)
public
保证该类在任何情况下,jvm都对其方法可见static
被jvm
调用,不用创建对象,直接类名访问。void
被jvm
调用,不需要给jvm返回值。main
一个通用名称,虽然不是关键字,但是被jvm识别String[] args
以前用于接收键盘录入的
10. instanceof关键字
- 作用:判断一个对象是否属于指定的类型。(什么实例属于什么)
- instanceof关键字的使用前提: 判断的对象与指定的类型必须存在继承的关系,或者是实现的关系。
- instanceof关键字的使用格式:对象 instanceof 类名
11. final(最终)
1、final关键字要注意的细节 :
- final关键字修饰一个基本类型变量时, 该变量不能重新赋值。
- final关键字修饰一个引用类型变量时,其引用重新指向新的对象。
- final修饰一个方法时,该方法不能被重写。
- final修饰一个类的时候,该类不能被继承。
2、 常量的修饰符: public static final.
3、常量命名规范: 所有字母大写,单词与单词之间使用下划线分隔 。
【Java基础篇】封装(Encapsulation)相关推荐
- Java基础篇——三大特性(封装)
Java三大特性我会用自己理解给大家一一介绍,有兴趣的可以关注一下,可以让你学到一些基础但是又非常实用的东西,基本上都是自己的一些理解和实践结果,对于新手来说可以避免走弯路(后期会出Java的其他重要 ...
- Java基础篇--面向对象(Object Oriented)
Java基础篇--面向对象(Object Oriented) 1. 面向对象概念 1.1 什么事面向对象 1.2 理解面向对象 1.3 面向对象的特点 1.4 面向对象开发设计特征 2. 类与对象 2 ...
- 菜鸟学习笔记:Java基础篇7(包装类、时间相关类、文件类、异常处理类)
菜鸟学习笔记:Java其他常用类 基本数据类型包装类 时间处理和文件处理相关类 Date时间类 SimpleDateFormat Calendar日历类 文件类 异常机制 异常的概念 Java异常处理 ...
- 菜鸟学习笔记:Java基础篇5(抽象类与接口、回调函数、内部类)
菜鸟学习笔记:Java面向对象篇下 抽象类 接口 回调函数 内部类 成员内部类 匿名内部类 抽象类 通过前面知识的学习,抽象类这个概念应该不难理解,但比较容易和后面要说的接口混淆,而且在面试中也比较爱 ...
- 菜鸟学习笔记:Java基础篇4(面向对象三大特征)
菜鸟学习笔记:Java面向对象篇中 继承 概念 方法重写(override) Object类 Super关键字 组合 final关键字补充 封装 访问控制符 多态 继承 概念 继续上一篇的例子: #m ...
- 菜鸟学习笔记:Java基础篇3(面向对象思想、程序执行过程内存分析、面向对象重要概念)
菜鸟学习笔记:Java面向对象篇上 Java面向对象的思想 Java程序执行过程内存分析 Java垃圾回收机制 构造方法 方法重载(overload) static关键字 this关键字 Java面向 ...
- Java基础篇--设计模式
目录 前言 设计模式 创建型模式 单例模式 工厂方法模式 抽象工厂模式 建造者模式 原型模式 结构型模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 亨元模式 代理模式 行为型模式: 访问者模 ...
- Android面试题Java基础篇
Android面试题Java基础篇,由本人整理汇总,后续将继续推出系列篇,如果喜欢请持续关注和推荐,更多精彩内容可以关注微信公众号(Android高级编程):android-tech 系列文章目录: ...
- java基础篇---第一天
今日开始在心中正式开始在培训班开始培训.一下是在培训的过程中发现自己在自学过的过程中发现的问题.这篇是java基础篇. 第一天 : 1)配置java环境变量 1.在系统变量中新建JAVA_HOME:j ...
最新文章
- QingStor 对象存储服务正式商用
- Nature子刊:用机器学习揭露人类基因调控背后的“语法”
- Cloudify — 安装部署与基础使用
- win这个傻逼系统,高PPI上默认的情况下是放大的,放大了之后逻辑分辨率不跟着放大。
- java字符串10_十个最常见的Java字符串问题
- session may be lost when use window.open to open a new window
- TensorFlow:简单的卷积层、池化层(采样层)示例
- jwt判断token是否过期_前端也得搞懂 JWT 这个知识点
- 直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解
- 阶段项目:学生信息管理系统数据库设计
- NET的JIRA活动时间线REST API
- 搜狗2020年测试工程师笔试题
- [dhtmlx]group task 失效问题解决
- 【OpenCV应用】python处理行李图像匹配项目——sift函数
- 如何将网页实现变灰效果?
- windows系统c语言编译环境,在Windows平台搭建C语言开发环境
- cxp文件查看 欧姆龙_欧姆龙CX-Programmer软件的使用举例 手把手教您CXP的编程
- js正则表达式验证省份证信息
- 图像检索:颜色聚合向量(CCV)及matlab实现
- 2021-09-10 网安实验-文件修复-BMP图片隐写
热门文章
- 神州数码交换机CS6200命令(一)
- 蓝桥杯2019 c/c++ B组真题
- 2020华为软挑热身赛代码开源-思路大起底(华为软件精英挑战赛编程闯关)
- Ubuntu、Linux、Unix的联系与区别
- 数值分析 解线性方程组的直接法(一)
- 计算机组成原理位移量,计算机组成原理大题解析.doc
- 记录我看的密码学方案中的技术,Shamir秘密共享,Schnorr零知识证明,EIGamal密码体制
- matlab二阶滤波器设计,基于matlab的各类滤波器设计
- OLEDB简介,OLEDB与ODBC的关系
- C语言的scanf函数在visualstudio中的错误