利用java默认作用域实现类限制访问

大多数开发者在创建java类时,往往不假思索就是public,这样意味着所有人都可以访问。这样在大型项目开发中往往造成混乱,导致代码难以维护。

public 类

这是大家熟悉的,即没有限制所有地方都可以访问。

缺省类

针对非内部类,java类的修饰,可以是public和default(默认没有修改关键字)。default方式表示只能在当前包类访问,起到一定的隔离作用。

充分使用缺省类进行业务隔离

针对一个业务系统可以划分为若干个业务模块,针对每个业务模块代码放在相应的包中,除了实体类和需要公开的接口类定义成public,其他类采用默认方式,只能当前业务包中访问。 建议提供对外访问的类可以使用java8 function接口方式进行封装,减少开发工作量。

这样开发的优势有,对外接口和内部接口分离,避免后面业务维护造成耦合度太高。

java 模块化的局限性

一般我们划分项目除了业务方式外,还要从开发角度划分,如DAO层、业务层以及视图层,如果你把他们分别放置不同的包中,则难以实现隔离,因为java包本身没有继承的访问能力。所以OSGI规范针对java的模块化进行加强,eclipse项目即典型的模块化方式开发。

附录:java中public、private、protected、default的区别

在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes(即同一个包),认为都是自己的朋友friendly。

1、public

public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

2、private

private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。

3、protected

protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

4、default

java的默认访问权限,当没有使用上面提到的任何访问限定词时,就使用它,这种权限通常被称为包访问权限,在这种权限下,类可以访问在同一个包中的其他类的成员,也即可以访问我们前面说的朋友,在包之外,这些成员如同指定了private。

表格形式

作用域

当前类

同一包

friendly

其他包

public

protected

×

default

×

×

private

×

×

×

java 模块开发_java模块化开发相关推荐

  1. 组件化开发和模块化开发概念辨析

    网上有许多讲组件化开发.模块化开发的文章,但大家一般都是将这两个概念混为一谈的,并没有加以区分.而且实际上许多人对于组件.模块的区别也不甚明了,甚至于许多博客文章专门解说这几个概念都有些谬误. 想分清 ...

  2. mysql组件化_组件化开发和模块化开发概念辨析

    网上有许多讲组件化开发.模块化开发的文章,但大家一般都是将这两个概念混为一谈的,并没有加以区分.而且实际上许多人对于组件.模块的区别也不甚明了,甚至于许多博客文章专门解说这几个概念都有些谬误. 想分清 ...

  3. 组件化开发和模块化开发

    组件化开发和模块化开发实际上是两种编程思想,也可以被认为是两种解决方案.组件化开发注重重用,可以用作实现基础架构的技术方案.举个例子:加入现在我需要实现一个几何图形库,包括图形的生成.修改.删除等基本 ...

  4. 前端组件化开发和模块化开发的区别

    前端组件化开发和模块化开发的区别 首先,组件化和模块化的意义都在于实现了分治,目前我们开发的项目复杂度不断的上升,早已不是我们一个人能完成的工作,团队合作的话又会产生配合困难等各方面问题,组件化和模块 ...

  5. Android多模块覆盖率,Android模块化开发中统计aar库的代码覆盖率

    现在android 开发都喜欢用模块化的方式,然后以aar文件的方式导入到主项目,但是这对于统计代码覆盖率就有点麻烦了,因为统计时候都忽略这些第三方库,那么我们如何将这些aar文件纳入到代码覆盖率的统 ...

  6. java web试题_Java web开发经典面试题汇总(内附答案详解)

    原标题:Java web开发经典面试题汇总(内附答案详解) 1.说出Servlet 的生命周期,并说出Servlet 和CGI 的区别? 答:Web 容器加载Servlet 并将其实例化后,Servl ...

  7. java实践项目_Java项目开发实践

    第章项目开发基础() 项目开发实训目标() 实训知识目标() 实训能力目标() 实训素质目标() 项目开发技术() 图形用户界面编程技术() 输入输出编程技术() 网络编程技术() 数据结构编程技术( ...

  8. vue相关的组件化开发和模块化开发及工程化

    vue作为当前最流行的前端框架,随着更新迭代,组件化和模块化思想就成为了主流. 大多数招聘信息提到模块化开发,我自己理解vue的模块化:javascript模块化思想是利用es6的 import/ex ...

  9. java模块化发布选型_Java模块化开发

    模块化编程 将程序按照功能分为不同的模块 不同模块的程序写在不同的包中, 共同的代码抽取出来形成Util类,为方便调用一般为static的 项目初期,按照业务功能划分模块,即自上而下的方法.开发的过程 ...

最新文章

  1. 中國批准英特爾在東北投建晶片廠
  2. 基于 Laravel Route 的 ThinkSNS+ Component
  3. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 6丨统计各专业学生人数【难度中等】
  4. mysql每次查询1000条数据库_30多条mysql数据库优化方法,千万级数据库记录查询轻松解决...
  5. 一个简易的选择小时(时分秒)的插件
  6. 编程菜鸟的日记-初学尝试编程递归
  7. php三次握手,深入理解TCP协议及其源代码——三次握手(示例代码)
  8. ppt讲解中的过渡_ppt过渡页的设计技巧
  9. 一个完整机器学习项目流程总结
  10. 本地计算机添加网络打印机共享,共享好的打印机,如何添加到本地来使用?-win7添加打印机...
  11. An Introduction to Be-trees and Write Optimization 学习笔记
  12. 徐小贱c语言试卷,纹了这条锦鲤,我遇见了现在的老公 | 纹身大赏No.12
  13. 字符串匹配和KMP模式匹配(没太学懂,暂时不写)
  14. Win7系统安装Pycharm专业版
  15. reactive和ref区别
  16. docker run --device-write-bps doesn't effect
  17. python - 文件操作函数练习
  18. 什么是模块化?为什么要模块化
  19. my.宝石 --- --- ZC 收集
  20. 在WPS中MathType7使用出现please restart word to load mathtype addin properly的问题解决方法之一

热门文章

  1. mac 设置终端样式_如何将终端样式设置为freeCodeCamp或任何您想要的样式
  2. Python中的Series和DataFrame
  3. Scrapy框架学习(1)
  4. Part1 R语言的基本操作
  5. pythonpy文件打包成exe软件
  6. Python中的一些特殊函数
  7. 清空网站浏览记录就行啦?看Python如何实时监控网站浏览记录
  8. Python的小整数对象池
  9. 漫步微积分二十三——重力作用下的运动 逃逸速度和黑洞
  10. python batch normalization_Batch Normalization 详解