dart语言和java语言_Java不是文明语言吗?

dart语言和java语言

几周前,我有机会学习iOS编程。 我的老板认为我更像是“计算机科学家”,而不是开发人员,这意味着我可以将自己的知识应用于开发一两个iPad应用程序–我要做的就是学习Objective-C, iOS SDK:到底有多难?

尽管过去我做过很多C / C ++,但是自2001年以来我就一直在做Java,因此我几乎忘记了我所知道的很多知识,此外,Objective-C还是不太像C ++。 结果是,您感觉自己被冲到了国外,无法说这种语言,并且武装着晒黑和词典。

在学习所有这些新知识时,我意识到Java是一种非常好的语言,其原因首先是因为您不必考虑内存分配和释放,您可以继续编写应用程序。 在用Objective-C编写iOS应用程序时,您既需要为对象分配内存,然后又要清理,然后将对象的内存返回给空闲池。 这似乎是21世纪第二个十年的老派。 此外,在为对象分配内存后,您必须跟踪对该对象的引用数量-一种称为引用计数的实践,这是我在前身为C ++程序员的过程中首次遇到的问题。 这里的基本思想是,每次创建对对象的新引用时,都将增加引用计数器,并且在完成对象引用后,将其引用计数器减一。

当计数器达到零时,系统将内存释放回空闲池。 在Objective-C中,减少引用计数的功能称为release ; 因此,如果Java具有引用计数,并且例如,如果我想让AddressService查找我的地址,则需要执行以下操作:

// create an object and set the reference count to 1AddressService addressService = new AddressService();  // Use the objectAddress address = addressService.findAddress(id);// pass it to a methodmodel.addAttribute("address", address);// free the memory addressService.release();

那是简单的场景,但是如果某个方法或其他方法将对象引用作为方法参数传递给您,会发生什么情况? 在这种情况下,您必须决定如何坚持下去,似乎有两种方法可以做到这一点。 第一个是复制对象,第二个是增加其引用计数。 制作副本可能是最安全的主意,但会占用更多的内存并且会更慢,而增加引用计数很快,但不如程序的其他部分那么安全,可能会使引用计数错误并减少计数太多次,这意味着您已经引用了一些可能已经释放的内存,并且当您尝试访问释放的对象时,程序将崩溃……。 同样,如果Java具有引用计数,那么Spring Controller请求处理程序方法将如下所示:

@RequestMapping(value = "/find", method = RequestMethod.GET)public String findAddress(@RequestParam("id") int id, Model model) {// increment the reference count - 'retain' is the Objective-C method for doing this.model.retain();    // create a new string object - with reference count of oneString msg = new String().withFormat("Processing an address page request for address with id: " + id);// pass the string to the loggerlogger.info(msg);// release the string's memorymsg.release();AddressService addressService = new AddressService();Address address = addressService.findAddress(id);model.addAttribute("address", address);addressService.release();// finished with the modelmodel.release();return "address-display";}

这里有两点需要注意–首先,将处理程序方法传递给模型对象,因此我通过调用keep来增加引用计数,然后在方法结束后在模型上调用release来调用引用计数。 其次,即使在创建琐碎的对象(例如传递给记录器的消息字符串)时,您也必须应用引用计数规则并在完成后释放内存。

下面的示例演示了增加引用计数的替代方法:制作自己的对象副本…

@RequestMapping(value = "/find", method = RequestMethod.GET)public String findAddress(@RequestParam("id") int id, Model model) {// increment the reference count - 'retain' is the Objective-C method for doing this.Model myModel = model.copy();    // As previous example// finished with the modelmyModel.release();return "address-display";}

这些示例只是微不足道的,您需要应用大量参考计数规则,如果弄错了,Ka-Bam程序就会崩溃,弄错了意味着您尝试访问已经释放的内存,或者变慢由于忘记了释放一些内存而导致的内存泄漏而死亡。 尽管我想这里的关键是所有权 :如果您拥有一个对象,则增加它的引用计数,当您完成一个对象后,再减少它的引用计数。

上面的代码只是写了些杂文来说明这一点-它不会编译。 该代码实际上来自我在GitHub上的Address示例,在现实生活中看起来像这样:

@RequestMapping(value = "/find", method = RequestMethod.GET)public String findAddress(@RequestParam("id") int id, Model model) {logger.info("Processing an address page request for address with id: " + id);Address address = addressService.findAddress(id);model.addAttribute("address", address);return "address-display";}

……体积更小,更容易理解。 最后一点,你们中的有些人会注意到,在引用计数示例中,我分配了(Objective-C字)新的AddressService –这是因为iOS编程与依赖注入或Spring框架完全不同,因此您将回到为自己创建对象。 (在Spring给伙计们的说明:“ Spring iOS” –对我来说似乎是个主意……)

那些知道的人将着重强调一个事实,即苹果公司最近推出了一种称为“自动引用计数”的东西。 虽然它不是垃圾收集,它的简化,内部监督办公室现在会自动追踪您的指针引用的内存和可用内存为你当计数达到为零,这意味着东西,你不必费心调用保留释放方法。

另外,此博客也没有贬低Objective-C,我非常喜欢Objective-C。 与Java相比,它的语法看起来相当晦涩,让人感到冗长,但是它迫使您在编程技术上要更有纪律,因此,如果像我一样,您认为良好的编程取决于“思想的明确性”,那么在编写目标代码时-在C程序中,您必须更加清楚一点,而且我真的很喜欢。

我还猜想,很多读者可能会提出许多原因,说明他们为什么认为Java是一种糟糕的语言,以及为什么他们喜欢的语言“做得更好”,无论它是什么,所以我很期待对您的评论...

最后,在iOS编程方面,我只是一个“新手”,因此,如果有任何iOS / Objective-C大师遇到过此博客,请告诉我我错了。

参考: Java不是一种文明语言吗? 来自我们的JCG合作伙伴   调试队长博客的 Roger Hughes。


翻译自: https://www.javacodegeeks.com/2012/02/isnt-java-civilised-language.html

dart语言和java语言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357540.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux备份用户权限

1:切换root用户,进入home目录,执行以下命令: [rootlocalhost home]# ll /home/wangfajun 2: home目录下执行以下命令进行wangfajun用户的权限备份: [rootlocalhost home]# getfacl -R wangfajun/ >permission.bak3: 改变权限,并…

微信限量纪念版code封面来啦,速看领取方式

临近春节,微信红包封面掀起了一阵热潮 前几天官方在开放平台出来这个活动。 是不是感觉这个封面特别的COOL,以代码的形式展示微信红包封面,鉴于大家如此的渴望这款封面,孙叫兽熬夜给大家制作10份。 预览一下效果: …

华为鸿蒙osbeta在哪看发布会,重磅消息!华为在发布鸿蒙OS2.0手机beta版本后,又发布搭载鸿蒙的新品!!...

原标题:重磅消息!华为在发布鸿蒙OS2.0手机beta版本后,又发布搭载鸿蒙的新品!!就在12月16号华为刚刚发布鸿蒙OS2.0beta系统手机版本后,就在今天华为又举行了一个新品发布会,他就 是华为家庭智能和…

内存中数据模型和大数据持久性

ORM框架在希望与关系数据库进行交互时可以帮助开发人员。 对于关系数据库,有许多出色的ORM框架,例如Hibernate和Apache OpenJPA,其中一些确实很棒。 如今,大数据正在涌现,越来越多的人开发在大数据上运行的应用程序。…

UVALive 6525 Attacking rooks 二分匹配 经典题

题目链接:点击打开链接 题意: 给定n*n的棋盘, 能够在.上摆 象棋中的车(X是墙壁) 使得随意两个车都不能互相攻击到 问:最多能摆多少个车。 思路: 二分匹配 1、若没有X。那么做法就是 X点集为行&a…

CSDN主页下如何添加访客地图?

有大佬在付费专栏作者群提问这个问题,我们先来研究一下哈。 先看聊天记录吧 放大效果 这位博主是如何实现的呢? 我拿到了这个博客的地址,使用谷歌浏览器F12,拿到这部分代码。他这个是在自定义模块添加访问地图。 自定义模块需要是博客专家,企业博客或者VIP才可以编辑。只…

html 适配 android,Android 版本适配 6~11

android 6.0 : 权限动态申请(仅限危险权限)android 7.0: 应用间共享文件(FileProvider); signature versions (v1,v2全部勾选)android 8.0 : 通知栏 ; 静态广播被限制使用 ;去除允许未知来源安装通知栏:通知渠道级别(例如广告…

lucene_indexWriter说明、索引库优化

IndexWriter Hibernate的SessionFactory在Hibernate中。一般保持一个数据库就仅仅有一个SessionFactory。由于在SessionFactory中维护二级缓存,而SessionFactory又是线程安全的。所以SessionFactory是共享的。lucene的IndexWriter假设同一时候在一个索引库中同一时候…

600W个微信红包封面,人人都能领取到!!!

过年啦,祝大家春节快乐牛年大吉,万事如意!别忘了春节还有红包封面领取新的一年愿大家财运亨通!新年过完了,整理情绪上班了,祝福没有断,问候也依然。努力工作多表现,年后年终奖永远把…

android 二次绘制 layout,View的三次measure,两次layout和一次draw

我在《Android视图结构》这篇文章中已经描述了Activity,Window和View在视图架构方面的关系。前天,我突然想到为什么在setContentView中能够调用findViewById函数?View那时不是还没有被加载,测量,布局和绘制啊。然后就搜索了相关的…

mule esb 集成_集成框架比较– Spring集成,Mule ESB或Apache Camel

mule esb 集成公司之间的数据交换增加了很多。 必须集成的应用程序数量也增加了。 这些接口使用不同的技术,协议和数据格式。 然而,这些应用程序的集成应以标准化的方式建模,有效实现并由自动测试支持 。 JVM环境中提供了三个可满足这些要求的…

盘点关于程序员的那些经典案例

深度剖析几个经典话题,以图文的形式展现,好好看图。 目录 1. 2014互联网职场薪酬报告!你拖后腿了吗? 2. 月薪8K程序员现身说法:男人就该默默做技术! 3.项目建设 4. 2014年亿级用户下的新浪微博平台架构…

html中文字过长 自动隐藏,css 实现文字过长自动隐藏功能

单行overflow: hidden;text-overflow: ellipsis;white-space: nowrap;多行(兼容各个浏览器)//通过覆盖最后几个字的形式p{position:relative;line-height:1.4em;height:4.2em;/* 3 倍line-height 多少倍就是多少行*/overflow:hidden;}.p::after {content:"...";font-…

写博客和生产api的工具

前言: .不要乱管闲事 写博客: 印象中是叫writeAlive之类的工具; 生产api的: 似乎叫hignLight的工具;转载于:https://www.cnblogs.com/zhangzs000/p/5273346.html

使用Xtext为Eclipse和IntelliJ开发DSL

在这篇文章中,我们将看到如何开发一种简单的语言。 我们的目标是: 语言的解析器 IntelliJ的编辑器 。 编辑器应具有语法突出显示,验证和自动完成功能 我们还将免费提供Eclipse和Web编辑器的编辑器 ,但请包含您的兴奋之处&#…

搬家后第一次缴电费,查询客户编号的解决办法

最近搬家后,发现家里停电了,不知道客户编号,想通过支付宝生活缴费模块充值。 解决办法。 1.走到电表跟前,连续按下电表白色按钮4-5下。会出现一个四位数的阿拉伯数字。比如:0088。取,后两位88。 2.再按一下…

html字符实体标签语法,HTML字符实体与文本格式化标签

HT环行进端处触码通法果泉位可近境其行框理发ML 字符实体/HTML 中的预留字符必须被替换为字符实体,一些在键盘上找不到的字符也可以使用字符实体来览页些求时是过解些这确如目前例总站回广随能4果泉时标配使能幻近器面实的我是接,前些模小架端如结的事告机对8和水兼…

JavaScript学习总结(思维导图篇)

不管是前端开发还是后端开发,js一直担任着重要的角色。需要深刻理解,才能把工作做得更加出色。 目录 JavaScript BOM对象 JavaScript Dcoument对象 JavaScript 事件处理 JavaScript变量 JavaScript函数基础

ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题

ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题 原文:ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题 问题:如果在地图上加载成百上千工程点时,会密密麻麻,外观不是很…

html 文本框 自动拼接,HTML 中table的结构以及拼接

表格基本上有如下几个标签构成:(1).(2).标签用来创建表格的行。(3).标签用来创建表头单元格。 t-head(4).标签用来创建tr行中的单元格。(5).标签用来创建标题。(6).标签用来创建表格的表头。 (一个table只能有一个)(7).标签用来创建表格的主体部分。(8).标签用来创建表格的页…