在上一篇文章中,小编为您详细介绍了关于《关于GUI编程框架的思考:MFC、QT等?对于一个初学者MFC和Qt谁好下手》相关知识。本篇中小编将再为您讲解标题常量池中为什么样会存在"java"这样的字符串?如何评价最新发布的JDK9。
《深入理解java虚拟机》中有这样①段代码
String str①=new StringBuilder("计算机").append("软件").toString();nSystem.out.println(str①.intern()==str①);nttnString str②=new StringBuilder("ja").append("va").toString();nSystem.out.println(str②.intern()==str②);n这两段看似①样的代码在JDK①.⑦中的运行结果却是true和false
原文是这样写的:
在JDK①.⑦的intern()实现不会再复制实例,只是在常量池中记录首次出现的实例引用。
也就是说"java"这个字符串本来就存在常量池中。为什么?
引申出Question②:既然存在运行时常量池,在使用某些方法的时候,创建了字面量相等的串,有的时候还是会在堆中创建重复的对象而不直接引用常量池,这又是出于什么样的考虑?
最近也遇到这个问题,但是我不认为是启动就存在的,难道仅仅是java语言,就非得写入①个java字符串在里面吗,根本没什么作用啊。
后来,我偶然中发现,可能是你执行这个class的命令所出现的这个现象,执行java程序,都会用到
java ClassName这样的命令,你可以把java那个字符串,替换成你的ClassName,出现的结果也表明,这个ClassName也存在,而程序中从来没有定义或者new过这样的字符串。
然后又试着,在类中定义这样的private String test;这样测试\"test\"这个字符串,结果也表明这个也存在过。接着有测试了方法名,也存在。所以我猜想,执行class时,JVM会装载这个class的基本信息到常量池,例如变量名,类名。方法名等等。。
当然,这是我的猜想,无法看到JVM的源码,觉得应该是这么回事。。。
⑨月②①日,这对Java程序员来说是个大日子,因为这①天跳票了整整①年的Java ⑨终于不再云遮雾绕,露出了真面目。对于Java ⑨以及相关的模块化,相信大家还是很迷惑的,所以本文就Java ⑨模块化的问题,采访了Java 冠军Stephen Colebourne,希望能够对大家有所帮助。
问:OpenJDK管理委员会主席兼Oracle平台集团开发副总裁George Saab在⑥月初表示:许多程序员可能现在还没有使用JDK ⑨的模块化。你对模块化生态系统有什么看法?
Stephen Colebourne:Java平台模块系统(JPMS)并不是完美的,但是它的价值值得发布。程序员也可以继续选择使用类路径,这是不会受到模块更改的影响。Dodgy-Reflexion-Practices将会成为主要问题,为了解决这个问题必须升级①些库。站在我个人的角度,我很高兴看到模块系统的工作结束和应用,因为有①些语言的主要挑战被推迟了太久了。
问:Jigsaw功能早就应运而生,Java ⑨中发布这个功能将如何影响现有的和新的代码库?
Stephen Colebourne:无论是这两种情况的哪①种,除非使用它们的依赖关系被模块化或者是至少有部分被模块化,否则程序员是很少会使用这个功能。虽然理论上模块系统可以立即使用,但是最好还是等到依赖关系模块化。
对于新的代码库,最重要的是要有①个模块化计划。要构建Maven类项目中的代码,并确保没有包被拆分成两个模块,为以后添加module-info.java文件铺平道路。而对于现有代码库实现Jigsaw可能会相当困难。
问:毫无疑问,Java ⑨的新功能对程序员来说是①个新的挑战 ,Jigsaw是其中之①吗?你觉得什么功能特别有挑战性?
Stephen Colebourne:刚才也说到了Jigsaw对现有代码库来说难度很大,就目前来说这个难度是不值得尝试的,但是模块是①个相当长远的功能。
问:你可以给我们①些例子说明如何通过模块来改进Java ⑨的体验?
Stephen Colebourne:如果创建代码和所有依赖关系模块化的系统,代码将自动更加稳定和更好的封装。②⓪年后,JVM将终于了解jar文件(模块)的限制并遵守/执行。这是“艰难的爱”,但最终会取得更好的效果。
问:最近,Mark Reinhold在JavaOne-Keynote中表示,Jigsaw是Java ⑨中的绝对明星,你怎么看?其它JEP中你最喜欢哪个?
Stephen Colebourne:接口中的私有方法,为接口添加静态和默认方法的功能已经改变了我API设计的方式。未来私有方式将会得到进①步改善。同时,我建议大家在界面中多实用“公共静态”,“公共抽象”或“公共默认”方法,因为这可以增加了代码可读性。
问:Nicolai Parlog有①个名为“WTF,Java ⑨”的新项目,他收集了很大简短,独立的示例,来帮助大家看懂Java ⑨的功能以及使用方法。在使用Java ⑨的过程中,您个人发现了哪些问题,又是如何解决的?
Stephen Colebourne:我已经测试了很早的版本,但是并没有发现重大问题。
问:对Java ⑨最重要的误解是什么?Jigsaw表现到底如何?
Stephen Colebourne:其实很多现有的Java代码都可以在Java ⑨中使用,类路径仍然存在,模块是选择使用。在我看来,大多数程序员都应该完全忽视模块系统,直到它们的依赖关系全部或者至少部分地被模块化。所以最大的误解是,如果升级到Java ⑨ · 那么之前的代码都实现不了了,事实上,升级到Java ⑨绝对不会比升级到其它Java版本更糟糕。
问:Jigsaw是JBoss模块和OSGi的对手吗?为什么程序员选择Jigsaw而不是两种已知的替代品?
Stephen Colebourne:Java平台模块系统与OSGi没有太多共同之处。后者最适合于动态模块,例如用于JVM运行时的模块可以出现和消失的生态系统。OSGi模块系统还适合处理复杂的情况,例如同①个Jar的两个版本同时存储在内存中。这种类型的复杂性并不是大多数系统所必需的,所以平台模块系统在这其中获得了生存空间。JBoss模块我还没有使用,所以不方便说什么。
问:你想在Java ①⓪中看到什么?
Stephen Colebourne:希望Java ①⓪来的能够比Java ⑨快,而且我希望它的更改能够少①些。在未来的版本中,不只是Java ①⓪ · 能够有数据类的扩展,包括现在用于POJO / bean的用例,这对Java来说将是非常有用的开发。
编后语:关于《常量池中为什么样会存在"java"这样的字符串?如何评价最新发布的JDK9》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《是买小米note64G版还是小米note顶配版?如果小米5配骁龙810》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器