我们正在和一位朋友讨论有关Java代码设计和效率的问题。

他认为,方法应该优先保密,因为性能方面的原因以及覆盖时的类一致性保护。

我认为方法应该最好被保护以实现完全的可定制性,并且一旦用户想要改变其部分行为,就可以避免时间的修改和释放。

我们知道composition over inheritance的偏好,所以我在这里主要关注性能比较。

一个简单的测试(见下文)证明父类拥有受保护方法的扩展类不会比具有私有方法的父类慢。甚至有时(我不太了解性能变化)更快。

elapsed:8051733.063 microseconds for A (private)

elapsed:8036953.805 microseconds for B (protected)你认为下面提到的测试足够强大,可以进行比较吗?

public class VerifPerfProtected {

public static void main(String[] args) {

int ncalls = 1000000000; //10^9

ChildrenClassA a = new ChildrenClassA();

ChildrenClassB b = new ChildrenClassB();

long start = System.nanoTime();

a.manyCalls(ncalls);

long stop = System.nanoTime();

System.out.println("elapsed:" + (stop - start)/1000.0 + " microseconds for A (private)");

start = System.nanoTime();

b.manyCalls(ncalls);

stop = System.nanoTime();

System.out.println("elapsed:" + (stop - start)/1000.0 + " microseconds for B (protected)");

}

public static class ParentClassA{

public void manyCalls(int n){

for (int i = 0; i < n; i++) {

callAmethod();

}

}

public void callAmethod(){

aPrivateMethod();

}

private void aPrivateMethod(){

int a=0;

for (int i = 0; i < 5; i++) {

a++;

}

}

}

public static class ParentClassB{

public void manyCalls(int n){

for (int i = 0; i < n; i++) {

callAmethod();

}

}

public void callAmethod(){

aProtectedMethod();

}

protected void aProtectedMethod(){

int a=0;

for (int i = 0; i < 5; i++) {

a++;

}

}

}

public static class ChildrenClassA extends ParentClassA{

}

public static class ChildrenClassB extends ParentClassB{

}

}

java私有 公开 保护_性能与设计相关的java中的私有/受保护方法相关推荐

  1. java积分管理系统代码_【全套设计下载】JAVA某店POS积分管理系统(源代码+论文)...

    [全套设计下载]JAVA某店POS积分管理系统(源代码+论文) 摘 要 开发一个大而复杂的POS积分管理软件系统,将它进行适当的分解,不但可以降低其复杂性,还可以减少开发工作量,降低开发成本,提高软件 ...

  2. wps怎么关闭视图保护_怎么在PPT2013中清除编辑受保护视图功能?

    软件大小: 67.82MB 软件版本: 10.1.0.7400 软件类型: 办公工具 查看详情 直接下载 怎么在PPT2013中清除编辑受保护视图功能?下面小编就为大家带来了在PPT2013中清除编辑 ...

  3. java 弱引用定位_手把手教你定位常见Java性能问题

    概述 性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就没办法出现性能问题,包括笔者自己遇到的性能问题也不多,所以为了提前储备知识,当出现问题的时候不会手忙 ...

  4. java窗体显示字体_文字字体设计窗体 实验!求大神

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExpl ...

  5. java编写文件系统的方法_操作系统课程设计模拟文件系统Java

    [实例简介] 一个操作系统课程设计,使用java语言模拟磁盘文件系统实现,实现了FAT算法 [实例截图] [核心代码] e692cc3b-c785-40f6-babe-2f9d5383f034 └── ...

  6. java契约式编程_契约式设计 Design by contract

    在我职业之初,我想得最多的是:当调用一个方法时,传入的参数,我是进入该方法前检查呢?还是进入到该方法后检查?特别是在某个方法中,为了保证该方法能顺利执行,之前的条件检查.if-else-简直是噩梦.所 ...

  7. pythonui教学视频_分享软件开发相关视频教程(Java、C++、Python、UI设计、HTML5、iOS)...

    以下是我收藏的关于开发及其他教程,基本都是花钱在网上买的,网盘没有加密的,虽然特别爱学习,但并不可能有这么多的精力学习这么多,技术总是很快就被新的淘汰掉,放在网盘中确实太浪费呀,分享出去吧,希望想学习 ...

  8. java grpc 服务路由_.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

    原标题:.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容 英文:devblogs.microsoft.com 来源:艾心 译文:cnblogs.com/ediso ...

  9. java.policy无法修改_如何配置Policy文件进行Java安全策略的设置

    中国人最喜欢访问的网站 只要注册ofo就送你10块钱,还等什么,快来注册吧 Java语言具有完善的安全框架,从编程语言.编译器.解释程序到Java虚拟机,都能确保Java系统不被恶意的代码或敌对的编译 ...

  10. java 内存溢出分析_用一段时间后java内存溢出问题分析(转)

    几乎每个月都有出现因为内存溢出的问题,除了需要多分配内存外, 是不是要考虑对代码进行一些处理.. 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 1.尽量在合适的场合使用单例 使 ...

最新文章

  1. R语言应用calibrate包的textxy函数向R原生绘图结果中添加文本标签:添加多个文本标签、改变文本标签的字体、改变文本标签的字体颜色
  2. mysql 语句除法_SQL的查询语句(除法)
  3. 设计模式复习-工厂方法模式
  4. websocket协议
  5. Android 欢迎页面的编写
  6. JavaScript 预解析机制
  7. mysql_分组查询
  8. java的demo打印功能_java实现打印功能demo
  9. 如何实现卫星通信的稳定链接?
  10. 通过eclipse对apk加密混淆的方法
  11. grpc-go源码剖析二十之grpc客户端帧接收器是如何处理不同的帧的?
  12. 3款别出心裁的电脑软件,个个精选,让你眼前一亮
  13. 特殊的数独身数,:水仙花数, 四叶玫瑰数, 五角星数, 六合数 ,北斗七星数, 八仙数, 九九重阳数 ,十全十美数...
  14. 整理外企常用英语及其缩写
  15. ubutu16.04台式机没有声音处理方法
  16. 没有内涵段子可以刷了,利用Python爬取段友之家贴吧图片和小视频(含源码)
  17. 软件测试用例设计之Pairwise算法
  18. 路径中 斜杠/和反斜杠\ 的区别
  19. 使用pandas读取excel
  20. python写微信小程序源码示例_python实现微信小程序用户登录、模板推送

热门文章

  1. 单例模式的两种实现方法:饿汉式和懒汉式以及民间懒汉式和登记式
  2. JS开发工具WebStorm使用快捷键
  3. java线程--倒计时器CountDownLatch
  4. GitHub使用笔记
  5. 翻书插件:bookblock.js
  6. 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析...
  7. SQL 2008 群集配置详尽攻略[3]—主节点备节点数据库安装
  8. LVDS 屏 format
  9. (转)DPDK内存管理 02 -----初始化
  10. Linux内核的Kmemleak实现内存泄露检测