仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 6701|回复: 21
打印 上一主题 下一主题

[学习教程] JAVA网页编程之J2SE 5.0的新特征---Autoboxing

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:49:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
net程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net比。java程序员都是代码完成的,所以java程序员常戏称.net程序员是操作员,呵呵。j2seAutoboxing
AsanyJavaprogrammerknows,youcan’tputanint(orotherprimitivevalue)intoacollection.Collectionscanonlyholdobjectreferences,soyouhavetoboxprimitivevaluesintotheappropriatewrapperclass(whichisIntegerinthecaseofint).Whenyoutaketheobjectoutofthecollection,yougettheIntegerthatyouputin;ifyouneedanint,youmustunboxtheIntegerusingtheintValuemethod.Allofthisboxingandunboxingisapain,andcluttersupyourcode.Theautoboxingandunboxingfeatureautomatestheprocess,eliminatingthepainandtheclutter.

Thefollowingexampleillustratesautoboxingandunboxing,alongwithgenericsandthefor-eachloop.Inameretenlinesofcode,itcomputesandprintsanalphabetizedfrequencytableofthewordsappearingonthecommandline.

importjava.util.*;//PrintsafrequencytableofthewordsonthecommandlinepublicclassFrequency{publicstaticvoidmain(String[]args){Map<String,Integer>m=newTreeMap<String,Integer>();for(Stringword:args){Integerfreq=m.get(word);m.put(word,(freq==null?1:freq+1));}System.out.println(m);}}javaFrequencyifitistobeitisuptometodothewatusi{be=1,do=1,if=1,is=2,it=2,me=1,the=1,to=3,up=1,watusi=1}

TheprogramfirstdeclaresamapfromStringtoInteger,associatingthenumberoftimesawordoccursonthecommandlinewiththeword.Thenititeratesovereachwordonthecommandline.Foreachword,itlooksupthewordinthemap.Thenitputsarevisedentryforthewordintothemap.Thelinethatdoesthis(highlightedingreen)containsbothautoboxingandunboxing.Tocomputethenewvaluetoassociatewiththeword,firstitlooksatthecurrentvalue(freq).Ifitisnull,thisisthefirstoccurrenceoftheword,soitputs1intothemap.Otherwise,itadds1tothenumberofprioroccurrencesandputsthatvalueintothemap.Butofcourseyoucannotputanintintoamap,norcanyouaddonetoanInteger.Whatisreallyhappeningisthis:Inordertoadd1tofreq,itisautomaticallyunboxed,resultinginanexpressionoftypeint.Sincebothofthealternativeexpressionsintheconditionalexpressionareoftypeint,sotooistheconditionalexpressionitself.Inordertoputthisintvalueintothemap,itisautomaticallyboxedintoanInteger.

TheresultofallthismagicisthatyoucanlargelyignorethedistinctionbetweenintandInteger,withafewcaveats.AnIntegerexpressioncanhaveanullvalue.Ifyourprogramtriestoautounboxnull,itwillthrowaNullPointerException.The==operatorperformsreferenceidentitycomparisonsonIntegerexpressionsandvalueequalitycomparisonsonintexpressions.Finally,thereareperformancecostsassociatedwithboxingandunboxing,evenifitisdoneautomatically.

Hereisanothersampleprogramfeaturingautoboxingandunboxing.ItisastaticfactorythattakesanintarrayandreturnsaListofIntegerbackedbythearray.InameretenlinesofcodethismethodprovidesthefullrichnessoftheListinterfaceatopanintarray.Allchangestothelistwritethroughtothearrayandvice-versa.Thelinesthatuseautoboxingorunboxingarehighlightedingreen:

//ListadapterforprimitiveintarraypublicstaticList<Integer>asList(finalint[]a){returnnewAbstractList<Integer>(){publicIntegerget(inti){returna[i];}//ThrowsNullPointerExceptionifval==nullpublicIntegerset(inti,Integerval){IntegeroldVal=a[i];a[i]=val;returnoldVal;}publicintsize(){returna.length;}};}

Theperformanceoftheresultinglistislikelytobepoor,asitboxesorunboxesoneverygetorsetoperation.Itisplentyfastenoughforoccasionaluse,butitwouldbefollytouseitinaperformancecriticalinnerloop.

Sowhenshouldyouuseautoboxingandunboxing?Usethemonlywhenthereisan“impedancemismatch”betweenreferencetypesandprimitives,forexample,whenyouhavetoputnumericalvaluesintoacollection.Itisnotappropriatetouseautoboxingandunboxingforscientificcomputing,orotherperformance-sensitivenumericalcode.AnIntegerisnotasubstituteforanint;autoboxingandunboxingblurthedistinctionbetweenprimitivetypesandreferencetypes,buttheydonoteliminateit.

用java开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。
透明 该用户已被删除
沙发
发表于 2015-1-21 15:25:49 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
老尸 该用户已被删除
板凳
发表于 2015-1-21 20:03:14 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-1-26 21:08:34 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
变相怪杰 该用户已被删除
5#
发表于 2015-2-3 12:41:50 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
兰色精灵 该用户已被删除
6#
发表于 2015-2-4 16:02:20 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
小女巫 该用户已被删除
7#
发表于 2015-2-8 12:20:28 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
小魔女 该用户已被删除
8#
发表于 2015-2-10 23:21:37 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
再现理想 该用户已被删除
9#
发表于 2015-3-1 17:20:12 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
乐观 该用户已被删除
10#
发表于 2015-3-10 21:15:53 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
莫相离 该用户已被删除
11#
发表于 2015-3-17 10:08:22 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
若相依 该用户已被删除
12#
发表于 2015-3-21 01:08:10 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
再见西城 该用户已被删除
13#
发表于 2015-4-11 11:52:44 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
金色的骷髅 该用户已被删除
14#
发表于 2015-5-3 11:37:34 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
若天明 该用户已被删除
15#
发表于 2015-5-5 21:56:37 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
爱飞 该用户已被删除
16#
发表于 2015-5-6 14:10:54 | 只看该作者
是一种为 Internet发展的计算机语言
因胸联盟 该用户已被删除
17#
发表于 2015-6-18 20:49:40 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
海妖 该用户已被删除
18#
发表于 2015-6-22 22:48:15 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
活着的死人 该用户已被删除
19#
发表于 2015-7-7 23:17:14 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
飘飘悠悠 该用户已被删除
20#
发表于 2015-7-8 05:14:13 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-28 17:03

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表