dart语言和java语言_Java不是文明语言吗?
dart语言和java语言
尽管过去我做过很多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语言
dart语言和java语言_Java不是文明语言吗?相关推荐
- 论述c语言和java语言的区别,java语言和c语言的区别有哪些
java语言和c语言的区别有单文件的编译时间java比c语言快:c语言可以直接操作内存,java不能直接操作:c语言可以封装动态库,java不行:c语言有指针,java没有指针:c语言可以直接操作串口 ...
- c++和java哪个好学_【技术科普】C语言和java语言有些什么区别?
C语言和java语言有些什么区别? 可以打个比方吧: C语言就像一个初创公司的老板,由于人少经费少,从技术.财务.市场等都需要自己管,经常把自己累的跟狗一样: Java语言就像一个上市大公司的老板,人 ...
- java程序设计 c语言_C语言和Java编程有什么区别?
C语言和Java编程有什么区别?Java从根本上说是c之后的一种改进语言,纯面向对象的一种编程语言(当然比起Ruby还是差一点),有了C语言的基础固然对学习Java有帮助,因为在某种程度上Java和C ...
- c语言字符串与字符什么意思,C语言和Java中的字符串异同点是什么?
2018-04-06 在Turbo C 语言和Java语言中字符串和字符串数组的异同点 1.Turbo C 语言 在C语言中字符串和字符数组基本上没有区别,都需要结束符:如:char s[4]={'a ...
- 数学语言和java基础语言的对应
数学语言和java基础语言是对应的.在数学中,使用变量需要假设一个,在java中也需要声明一个.数学:设x=9设整数x=9,设y属于N,y=2x设整数k=x-9+yjava:int x=9;int y ...
- python语言与c语言java的区别_c语言和java有什么区别
区别:1.单文件的编译时间java比C语言快:2.C语言可以直接操作内存,java不能直接操作:3.C语言可以封装动态库,java不行:4.C语言有指针,java没有指针:5.C语言可以直接操作串口, ...
- python和c语言和java有什么区别_python和c的区别 python、java和c语言的区别?
Python和c语言有什么区别如果我的坚强任性,会不小心伤害了你.你能不能温柔提醒,我虽然心太急,更害怕错过你 前者为 脚本语言 需要虚拟机 解释执行 ..一般情况下 不能生成exe(要使用打包工具) ...
- java和c语言的语法区别_c语言和java的语法区别是什么?
c语言和java的语法区别 单文件的编译时间java比C语言快: C语言可以直接操作内存,java不能直接操作: C语言可以封装动态库,java不行: C语言的代码不容易跨平台,java的代码容易跨平 ...
- java c语言语法对比_c语言和java的语法区别是什么
c语言和java的语法区别是什么 发布时间:2020-06-10 11:53:18 来源:亿速云 阅读:172 作者:Leah c语言和java的语法区别是什么?针对这个问题,今天小编总结这篇有关c语 ...
最新文章
- 字符串的模式匹配 (朴素模式匹配算法 ,KMP算法)
- @Accessors
- CentOS6 英文系统安装ibus
- web-5. 超链接的使用
- CRNN:端到端不定长文字识别算法
- 系统测试集成测试单元测试_单元和集成测试的代码覆盖率
- 都 2021 年了,Serverless 能取代微服务吗?
- .NET Core,PostgreSQL和文档数据库
- 将列表打印为表格数据
- 数学之美系列好文,强烈推荐
- apollo 横纵向控制改成MPC控制方式
- 卫星对地观察模型系统操作说明
- VC模拟鼠标的两种方式(SendMessage、mouse_event)
- 工控变成用c语言还是plc,浅析工控机与PLC的区别
- C++关键字分析系列
- 电商系统常用的产品颜色,尺码选择JS程序实现
- 关于码距、检错、纠错
- Mac(Big Sur系统)安装tunnelblick(vpn)步骤
- redis+lua脚本
- html+css+javascript制作爱尚音乐播放页面
热门文章
- vue利用级联选择器实现全国省市区乡村五级菜单联动
- ssm(Spring+Spring mvc+mybatis)Service层接口——IDeptService
- 2015蓝桥杯省赛---java---C---6(奇妙的数字)
- android java split_Java中的split函数的用法
- python基础教程zip密码_python基础教程Python实现加密的RAR文件解压的方法(密码已知)...
- 转:java网络编程-HTTP编程
- 代理模式(多线程实现状态监控)
- jms面试题_最新的20多个JMS面试问答(2020)
- java 反射 速度_Java反射,但速度更快
- java ab工具_(ab)使用Java 8 FunctionalInterfaces作为本地方法