【软件工程师从0到1】- 封装 (知识汇总)

前言

介绍:大家好啊,我是hitzaki辰。

社区:(完全免费、欢迎加入)日常打卡、学习交流、资源共享的****************************知识星球。********************************

自媒体:我会在b站/抖音更新视频讲解 或 一些纯技术外的分享,账号同名:hitzaki辰。

正文开始,抓紧上车!


一 - 封装的目的

1.隐藏类的实现细节

2.让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对实例变量的不合理使用

3.可进行数据检查,从而有利于保证对象信息的完整性

4.便于修改提高代码的可维护性。

二 - 权限修饰符

public(公有的) > protected(受保护的) > (default)(缺省的) > private(私有的)

(default并不是关键字 default,而是根本不写)

1 - private

1.作用域: 只在该类的内部可见,出了该类不可见,无法使用。(子类也无法访问)

2.修饰:

private不能修饰外部类,可以修饰内部类。

被private修饰的成员变量或成员方法,不能被类的调用者使用。

阿里编程规约:类中,无特殊说明,成员变量全用private封装。

修饰成员变量实现私有化,再使用设置器setter、访问器getter来访问。

优点:提高代码复用, 提高程序的安全性。

(方法,类,属性的私有化... 都是封装的体现)

2 - default

作用域:只有同一个包内才能访问。(同一个直接包,子包不算)

3 - protected

作用域:同一个包内 或 子类

应用:设计模式中的模板方法

使用它修饰多个行为方法:protected 返回 行为n(){}

最终public action方法按顺序调用所有行为方法。

子类可以对各个行为方法进行重写,以此改变action的行为,并且这些单独的行为方法还不会对外暴露。

4 - public

作用域:全部

三 - java的"包"

java的包是用来组织文件的一种虚拟文件系统,它是跨平台的,与操作系统无关。

因为不同的人会以不同的目的定义相同的类名或接口名,Java解决此问题的主要方法是包,Java中组织类和接口的方式也是包。

1)把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

2)包如同文件夹一样,文件放在文件夹 ,而类和接口放在包下,包和文件夹一样,都是层次结构。

3)包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

4)以 . 分隔表层次结构,比如java.lang.String,java为上层包名,lang为下层包名, {带完整包名的类称为完全限定名。}

(Java API 中所有类、接口都位于包java、javax下, java是标准包、 javax是扩展包)

1 - 声明程序所在包

1)在外部类的首部 (前面不能有除注释外的其他语句), 必须编写类所属哪个包, 格式: package 包名;

2)包名的前缀通常由多个单词组成, 所有单词的字母小写, 单词与单词之间使用.隔开 ,

3)一般命名为"域名.项目名.模块名..."。 (因为Java规范要求包命名的唯一性,因此常使用域名命名,这样不会冲突)

比如org.xuanchen.wschool.service ,这是这个模块所有代码都有的包前缀,它一定是唯一的,其次再根据业务细分出子包,如controller、service。

2 - 通过包使用类

1)通过完全限定名使用

2)通过完全限定名导入后 再使用, import 完全限定名;

3)import java.util.*; 将导入这个包下的所有直接类。 (不包含子包下的类) (不可以import java.*.*; )

4)静态导入: 在JDK 1.5之后引入的新特性,可直接将类的公开静态方法和成员导入到自己这里,此后直接根据方法名使用。

如 import java.util.Arrays.*; 此后可以直接sort(arr);

3 - jar包

打包的一般都是编译后的代码, 将1到多个编译后的文件打包为1个文件,方便其他程序调用。

Java的打包命令为jar,打包后的文件拓展名为jar,称为jar包。

使用下列方式打包:

1)先找到编译后的文件 .class 的根目录

2)在cmd运行命令: jar -cvf <包名>.jar <最上层包名>

1)jar包其实就是一个压缩文件,可以使用解压缩的工具打开。

2)Java类库、第三方类库 都是以jar包的形式提供,使用时将其jar包加入类路径即可。

结尾

感谢你看到这里,如果感觉内容不错的话请点赞支持一下!

如果小伙伴对我的讲解有疑问,欢迎评论区讨论。

相关推荐
公贵买其鹿12 分钟前
List深拷贝后,数据还是被串改
java
xlsw_3 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹4 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭5 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫5 小时前
泛型(2)
java
超爱吃士力架5 小时前
邀请逻辑
java·linux·后端
南宫生5 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石5 小时前
12/21java基础
java
李小白665 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp5 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea