当前位置: 首页 > news >正文

域名网站平台网站设计公司怎么样

域名网站平台,网站设计公司怎么样,做电子杂志用什么网站,今天时政新闻热点是什么前言最近在读slf4j的源码,同时在B站录一套读源码的课程(av:BV1KD4y197Jf),其中一个简单的IDE编码规范的提示,因为多问了几个为什么导致一系列Java基础知识的追踪和验证,最近竟然发现《Java编程思想》书中的内容竟然也有不严谨或者…

前言

最近在读slf4j的源码,同时在B站录一套读源码的课程(av:BV1KD4y197Jf),其中一个简单的IDE编码规范的提示,因为多问了几个为什么导致一系列Java基础知识的追踪和验证,最近竟然发现《Java编程思想》书中的内容竟然也有不严谨或者说不一定对的地方。

这个追踪问题的答案的过程非常有意思,整合了不少工具、书籍以及Java基础知识。下面我们就来看看到底是什么问题。

IDE的提示信息

在slf4j的LoggerFactory类中有几个静态方法,方法的修饰为private final static。而IDE会提示,private的方法不用final修饰。

这个提示看起来很合理,既然方法为private的了,也就说是私有的,不可被继承,当然不可改变了,也就不需要再用final进行修饰了。

2126a9854b1c579245bdc5c8ff75235a.png

此刻问了自己一个为什么?虽然看起来是这么回事,但底层是如何实现的呢?是不是意味着private修饰的成员方法默认就是final的?

关于private方法不能被重写我们就不举例说明了,很显然的事。下面就来求证一下“private修饰的成员方法是不是默认就是final的”。

Java编程思想对final的定义

《Java编程思想》第4版,第267页中有描述“final和private关键字”的一段内容:

“类中所有的private方法都隐式的指定为是final的……可对private方法添加final修饰词,但这并不能给该方法增加任何额外的意义。”

从本质上来讲private是用来表示可见性的,而final是用来表示禁止覆盖的。JVM真的会对private隐式的指定为final吗?下面我们就写一段代码,并利用工具来进行证明一下。

追踪过程

首先我们定义一个类,在类中定义两个方法,一个private修饰,一个private final修饰:

public class FinalMethod {  private void test1(){  }  private final void test2(){  }}

然后,我们对类进行编译,看看编译之后的字节码中到底是如何实现的。

在class文件中,有专门描述方法的方法表,方法表第一项就是访问标志access_flags。这个标志用于识别一些类或接口层次的访问信息。具体标志位以及标志的含义如下:

f763e23386516b23d3c626e591b05d56.png

关于access_flags可以参考《深入Java虚拟机》介绍类文件结构的章节。补充了基础知识之后,我们就通过工具来看看上面的类编译之后是什么样子。

这里用到一款开源的字节码浏览器工具:jclasslib bytecode viewer。下载链接:https://github.com/ingokegel/jclasslib/releases 。

通过该工具打开FinalMethod的class文件,先看test1方法:

ca51ee85955ae6c18fa967ee66d5a114.png

可以看到该方法的access_flags访问标准为0x0002[private],对照上表的名称也就是ACC_PRIVATE。

那再看test2方法的access_flags的值:

41d2464c33a7431b8b2962bb672334f5.png

可以看到对应的值为0x0012,对照上表并没有发行有这么一个值,它是怎么来的呢?其实access_flags如果有多个修饰的话,是会进行或(|)运算的,也就是0x0002 | 0x0010,结果不就是0x0012。对应的Flag名称就是ACC_PRIVATE和ACC_FINAL。

结论分析

通过上面的分析,如果说被private修饰的方法都隐式的指定为final的了,那么,编译的字节码应该是一致的才对。但通过上面的分析,很显然两者是有区别的。

也就是说,虽然我们知道private修饰的方法不用再使用final进行修饰了,但本质上它与private final修饰的方法还是有所区别的,不能一概而论。

小结

其实单从使用层面来讲,本篇文章的分析并没有太多的意义,使用时通过private修饰了,就不用再使用final了。只是说明slf4j源码在这个层面上是需要进行一定的优化的。

但如果你留意这个分析过程所牵涉的知识和工具,你是不是发现会收获很多?比如class文件的结构、访问标志、算法,以及字节码浏览器等等。

平时工作或学习中,多问一个为什么可能就会串联出一连串的知识点、工具和方法论,这也是学习和实践的一部分。

34ee9d89e93c99f5274f9ce49510291b.png

http://www.lbrq.cn/news/2764153.html

相关文章:

  • 网站服务公司代买空间有无义务软文代写接单平台
  • 金融公司网站制作免费建站哪个网站最好
  • 自己网站建设多少钱站长资源平台
  • 网站布局f网络营销策略
  • 西安手机网站制作公司北京、广州最新发布
  • 网站建设公司兴田德润实惠外贸推广是做什么的
  • 巨野住房和城乡建设局网站短视频精准获客系统
  • 做3d图的网站ip域名解析查询
  • 新建的网站如何做seo百度输入法免费下载
  • 网站开发需要哪些证书高端网站建设公司排行
  • 用wordpress建的大部网络推广优化工具
  • 网站开发商换了武汉网络推广公司排名
  • 网站的网站制作网站设计
  • 阿里云做网站送服务器网站建设方案书模板
  • 怎么做网站赚钱吗免费网站建站页面
  • 和文化有关的吉网站建设模板线上推广外包公司
  • 成都广告公司招聘广告制作安装百度seo整站优化
  • 网站建设有哪些需要注意的关键细节今日特大新闻新事
  • 企业策划公关公司靠谱seo整站优化外包
  • 临沂网站建设制作南宁网络推广平台
  • wordpress分享卡片插件seo研究中心超逸seo
  • 可以举报一个做网络网站发大财吗长沙网络营销顾问
  • 宁晋县建设局网站搜索引擎推广的优势
  • 哈尔滨网站设计公司地址推广产品的渠道
  • wordpress页面教程视频教程seo查询百科
  • 时间管理系统 网站开发深圳网络营销模式
  • 威海高新园区建设运营有限公司网站百度广告位价格
  • 丽水网站建设专业的公司沈阳seo网站推广
  • 建设银行普卡申请网站在线网页制作系统搭建
  • 深圳做网站建设公司企业网站建设
  • 图解快速排序C语言实现
  • 从哲学(业务)视角看待数据挖掘:从认知到实践的螺旋上升
  • 大厂 | 华为半导体业务部2026届秋招启动
  • 软考 系统架构设计师系列知识点之杂项集萃(129)
  • 【redis、ruoyi-vue】基于ruoyi-vue实现数据redis的增删改查
  • Windchill 11.0使用枚举类型自定义实用程序实现生命周期状态管理