长沙 软件工程师待遇 待遇好不好?学习技术...

长沙Android工程师月薪多少钱_华清远见_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
内容提供机构
更多优质内容和服务
长沙Android工程师月薪多少钱_华清远见
0|0|暂无简介|
华清远见教育集团,成立于2004年,是国内早期...|
总评分0.0|
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
还剩1页未读,点击继续
华清远见IT培训
文库认证机构官网
华清远见教育集团,成立于2004年,是国内早期的IT职业培训机构,13年的时间里,紧跟企业用人需求,先后开设了嵌入式、JAVA,HTML5,物联网、大数据、Android、UI、...长沙软件培训学校
长沙软件培训,长沙软件培训学校欧柏泰克软件专修学院www.cshope.net
  :Android成功的六大要素:
&&& Android开放联盟激活了整个产业链
  如果说苹果的成功得益于自己的封闭系统的话,那么Android的后来者之上更是体现了开放联盟精神。开放联盟将整个手机产业链的聚集到了一起,从整个硬件&,配件到系统集成商,到运营商以及上层的应用开发商,再到最终的用户实现个性化定制等等,整个产业链的每个参与者都能够从中获取一定的收益,可以说Android整个市场的大蛋糕正是这些产业链的参与者共同努力的结果,因此每一个人都有机会分得一杯羹,而且这个力量是无穷尽的,远比苹果和微软的封闭,半封闭模式机会更大。
  用户数量庞大,引领广告市场发展
  Google作为一家互联网公司,广告是他的主要收入来源,而Android也延续了Google的生存和发展模式,极大的发挥了免费应用+植入广告的模式,给开发商带来了收益,同时也将免费模式在中国市场得到更加有效的推广和发展,国内已经有不下几十家移动广告平台给开发者带来了丰厚的收益。移动广告平台和互联网的广告联盟相似,在PC互联网时代,GOOGLE通过ADSENSE广告平台将众多广告投放得广告分发到放置了ADSENSE广告的中小网站上,成就霸业。
  实现了移动终端在高端、中端和低端的通杀
  如果说苹果iOS笼络了全球的高端用户,那么Android平台可以说实现了通杀。在国内随处可见的是千元智能机的广告,这些智能手机已经完全可以满足用户的日常移动互联网需求。Android将以往MTK固守的低端市场一举冲垮。在中端市场,诺基亚曾经占据相当大的市场份额,但是随着Android系统战胜Symbian系统之后,诺基亚已经丧失了这部分市场。在苹果固守的高度市场,也同样受到MOTO,HTC以及三星等高端智能机的冲击。
  Android开源战略得到最广泛的拥护
  开源策略使得Android在大量的分布上有优势。Google通过一个免费的很有竞争力的平台抓住了HTC,三星以及摩托等公司的心,而不像微软那样收取巨额的授权费。这件礼物拯救了他们,并且将智能机带到了更多人的口袋中。无需合约,你就可以拿到一款100美元以下的Android手机。当然也有 Verizon的两年合约价300美元的Droid Bionic。&跟iOS不一样,Android的所有产品不是一个尺寸的。除了价格范围,Android的灵活性可以让不同的制造商用自己的方法来进行各种创新。
  Android开启用户疯狂刷机之路
  对于智能手机用户来讲,iOS用户更关注越狱,而Android用户更加关注刷机。开放的系统使得各个有实力的公司都可以在Android系统底层进行修改,增加一些特色的功能,引发用户一阵刷机热潮。很多论坛和网站也因为Android的刷机教程吸引了大量的用户,给自己赢得了一个发展空间,其中不乏我们现在知名的机锋网,安卓网等,也是在吸引刷机用户方面一步步发展,后来成为了国内知名的Android智能手机玩家论坛。
  基于Android系统的各种OS满足用户个性化和可定制化
  得益于Android的开放精神,基于Android系统的定制化也在国内市场蓬勃发展,而且凭借各自领域的优势,对用户展开了争夺战。目前已有多家国内企业涉足手机操作系统领域,从企业类型上大致可以分为四类:运营商、互联网厂商、手机制造厂商、独立第三方操作系统开发商。其中有中国移动的Phone,中国联通的沃phone,点心OS,联想乐OS,小米科技的MIUI,以及阿里巴巴集团的阿里云OS。这些OS都在积极的建立自己的生态圈,谋求在智能手机领域更加广阔的发展。
 :学习.NET技术的就业分析
 学.NET技术的就业前景
  微软2002年推出跨时代的.NET平台,10年时间在IT行业掀起了翻天覆地的变革。由于越来越多的企业纷纷采用.NET技术开发,或将现有产品移植到.NET平台上,使.NET的应用空前广泛。.NET的快捷开发,高效率,低成本的特性,已经真正给从事.NET的开发人员带来了令人欣喜的机会和强大的竞争力。市场对.NET开发人员的需求越来越大。在各大职业网站上,.NET的开发人员的职位数量已远远超出其他职位。
  .NET技术的职位需求
  从02年至今,developer职位中单就&.NET中的C#和VB.NET的就业实现从0到60%的大幅跃进。如今搜索任何一个求职网站,.NET的职位已以绝对的数量优势胜出。
  学.NET技术的就业方向
  由于.NET Framework不同于以往的单一技术,从业人员不仅仅可从事传统的Windows上的开发,还可以从事有着无限前景的Web Site/Web Services上的开发。全球著名的戴尔公司,伦敦股票交易市场,以及加拿大著名的BMO Financial Group, Manulife Financial Group,RBC Financial,Scotia Bank 等著名公司或企业的网站和系统都是全面使用.NET的技术开发的。除了上述两个方面的就业,手机,汽车和电视机顶盒等小型设备上的应用开发,也处处可见.NET开发人员的身影。
  学.NET技术的职业发展
  .NET代表了Microsoft的核心技术,也可以说是Microsoft在现有产品和未来产品上的一个新式行销标签。Microsoft已决定将.NET运用于其旗下的所有产品,如今MS Office已与.NET紧密捆绑,SQL SERVER 已内建.NET SQL CLR;Microsoft的所有王牌操作系统XP / VISTA / WINDOWS SERVER 2003均已内置了.NET Framework。同时Microsoft从不满足现状,一直致力于技术的更新升级,从最初支持包括C#,VB.NET在内的十多种语言,到如今数十种支持.NET技术语言。Microsoft 的.NET技术已成为现在IT开发的首选平台。
在JAVA技术中,我们需要熟悉哪些JAVA名词,了解哪些JAVA相关的技术呢?下面欧柏泰克软件学院就和大家一起来分享一下吧:
  1、JDBC提供连接各种关系数据库的统一接口,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。
  2、EJB使得开发者方便地创建、部署和管理跨平台的基于组件的企业应用。
  3、Java RMI用来开发分布式Java应用程序。一个Java对象的方法能被远程Java虚拟机调用。这样,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要双方的应用程序都是用Java写的。
  4、Java IDL(Java Interface Definition Language)&提供与CORBA(的无缝的互操作性。这使得Java能集成异构的商务信息资源。
  5、JNDI提供从Java平台到的统一的无缝的连接。这个接口屏蔽了企业网络所使用的各种命名和目录服务。
  6、JMAPI(Java Management API)为异构网络上系统、网络和服务管理的开发提供一整套丰富的对象和方法。
  7、JMS(Java Message Service)提供企业消息服务,如可靠的消息队列、发布和订阅通信、以及有关推拉(Push/Pull)技术的各个方面。
  8、JTS(Java transaction Service)提供存取事务处理资源的开放标准,这些事务处理资源包括事务处理应用程序、事务处理管理及监控。
  9、JMF(Java Media Framework API),&她可以帮助开发者把音频、视频和其他一些基于时间的媒体放到Java应用程序或applet小程序中去,为多媒体开发者提供了捕捉、回放、编解码等工具,是一个弹性的、跨平台的多媒体解决方案。
  10、Annotation(Java Annotation),在已经发布的JDK1.5(tiger)中增加新的特色叫 Annotation。Annotation提供一种机制,将程序的元素如:类,方法,属性,参数,本地变量,包和元数据联系起来。这样编译器可以将元数据存储在Class文件中。这样虚拟机和其它对象可以根据这些元数据来决定如何使用这些程序元素或改变它们的行为。
  在Java技术中,值得关注的还有JavaBeans,它是一个开放的标准的组件体系结构,它独立于平台,但使用Java语言。一个JavaBean是一个满足JavaBeans规范的Java类,通常定义了一个现实世界的事物或概念。一个JavaBean的主要特征包括属性、方法和事件。通常,在一个支持JavaBeans规范的开发环境(如Sun Java Studio和IBM VisualAge for Java)中,可以可视地操作JavaBean,也可以使用JavaBean构造出新的JavaBean。JavaBean的优势还在于Java带来的可移植性。现在,EJB (Enterprise JavaBeans)&将JavaBean概念扩展到Java服务端组件体系结构,这个模型支持多层的分布式对象应用。除了JavaBeans,典型的组件体系结构还有DCOM和CORBA,关于这些组件体系结构的深入讨论超出了本书的范围。
  11、javaFX Sun刚刚发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语言开发富互联网应用程序(RIA)。JavaFX Script编程语言(以下称为JavaFX)是Sun微系统公司开发的一种declarative, staticallytyped(声明性的、静态类型)脚本语言。JavaFX技术有着良好的前景,包括可以直接调用Java API的能力。因为 JavaFXScript是静态类型,它同样具有结构化代码、重用性和封装性,如包、类、继承和单独编译和发布单元,这些特性使得使用Java技术创建和管理大型程序变为可能。
  12、JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入&管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
  13、JPA (Java Persistence API), JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
  日前,国际权威调研公司IDC(国际数据公司)正式发布2013年中国IT职业培训市场及相关市场研究报告,报告指出,相比全球IT行业的全行业萧条,中国的IT行业所受影响相对较小,IT行业还保持着较稳定的用人需求。随着IT技术的普及,软件开发人才吃香。下面一起来了解下当今的IT行业:
  随着互联网商业模式的发展,IT行业人才开始极度紧缺,IT职业培训学校开始蓬勃发展,许多大学里学不到的技术,在IT职业培训学校都能学到,职业培训学校具有专业的软件工程师讲师,能专业的帮助学生学到最前沿的技术,其次,IT职业培训学校的教学模式也是采用企业实训的模式,这种模式对于企业来说十分受用,招聘过来的员工都有很强的技术,很强的团队协作能力,这也是职业学校之所以发展快速的原因。
  报告显示:2014年IT行业的软件开发仍然是热门职业,市场前景广阔,对于IT职业培训学校来说也将是一个蓬勃发展的时期。
  作为长沙就业质量最好的软件培训学校,欧柏泰克软件学院&以企业工作经验为目标,采用先进的教学模式,科学的教学理念,小班制授课,欧柏泰克软件学院拥有1支优秀的师资团队,治学严谨,管理规范,注重理论和实践相结合,启发式教育,培养学生实践能力,创新能力,深受用人单位青睐,且欧柏泰克软件学院入学即签订就业协议,百分之百推荐对口高质量就业,解决后顾之忧。
&&&&&&&和大家一起分享下作为软件工程师必须知道的20个常识:
  1,针对面向对象的设计与分析:为了让软件有更好的可维护性,重用性以及快速开发,&简短的OOAD与它的SOLID原则对于每一个软件工程师来说都是该牢记的。
  2,软件品质因素:软件工程的好坏与软件的品质因素是绝对关联的。请在开发过程中深&刻的理解这一点。
  3,数据结构与算法:深刻理解像数组,列表,栈,树,图,集合等这样的基本数据结构&,并在软件开发过程的关键部分使用好的算法。这样整个软件逻辑就会很清晰了。
  4,Big-O符号来标记算法复杂度:在开发过程中,请务必使用 Big-O 符号来比较两个代&码段或者不同算法所消耗的时间复杂度,这在开发高性能软件项目中是非常重要的。
  5,UML图:UML图已经是一个通用的软件设计与分析的语言。如果你们在开发软件的过程&中还没有做UML图,那么给人的感觉就是这压根就不是软件工程。
  6,正确的衡量软件开发进度。
  7,设计模式:设计模式是前人在解决各种各样问题的过程中总结出来的一套标准对策,&在绝大部分情况下,使用这些模式肯定是利大于弊的。如果你不想在开发过程中重新造&轮子,那么就直接使用它吧。
  8,理解操作系统的基本原理:因为所有的应用程序都是直接运行在操作系统这个层级的&,学习操作系统的基本原理能让我们对应用程序的底层以及性能有更好的把握。
  9,学习计算机组成原理:几乎所有的应用程序甚至是OS都需要与物理硬件打交道的,所&以学习计算机组成原理与理解操作系统原理一样都可以让你对于应用程序有更深刻的理&解。
  10,网络基础:网络与计算机组成,操作系统以及传输流程都是紧密关联的,理解网络基础&能让你在开发过程中得心应手。
  11,需求分析:对于软件工程来说,需求分析是项目的起点,也是整个项目最最重要的&部分。如果这玩意你搞错了,整个项目的方向也就错了。
  12,软件测试:在软件工程中,测试也是非常重要的。单元测试,黑盒测试,白盒测试,TDD,集成测试等等都是我们必须知道的。
  13,独立管理:主要是说类库(JAR,DLL等等)的管理,熟悉使用一些类似Maven,Ant,lvy这样的知名工具对于大型项目的类库管理是非常有用的。
  14,持续化集成:持续化集成能让测试大型模块与组件更加简单与自动化,关于这一点,你可以去了解 Hudson 这个工具。
  15,ORM:了解Hibernate这种将对象与数据库表映射工具是非常有好处的,它可以减少你的代码量并节省你的代码维护时间。
  16,DI(独立注入):DI或者IoC(Inversion of Control)的具体实现框架Spring能让你创建对象时更加轻松,对于大型企业级项目更是如此。
  17,版本控制系统:VSC工具(SVN,TFS,CVS等)对于团队合作开发以及版本控制都是非常重要的。熟练使用这类工具算得上是必备技能。
  18,国际化:通过i18n来将不同语种的字符串存储在其他文件是让软件支持多语种最好的方法。所以i18n在不同的IDE上使用的方法我们应该了解。
  19,架构模式:理解类似MVC,MVP,MVVM这样的架构模式非常关键,这能让你写出易维护,简洁以及方便测试的代码。
  20,编写干净的代码:你的代码仅仅只是能够正常运行是远远不够的,它必须让编程人员轻易看懂来方便后续维护,所以,代码格式以及编写易读的代码技术都是我们需要了解的关键点。
  怎么样选择好的?想学习软件开发怎么样选择好的软件培训学校,传统大学教育人才培养标准与企业需求是脱节的,软件企业人才要求需要有工作经验,这些工作经验只能通过参加软件培训而获得”。随着软件开发人才需求升温,软件培训市场“蛋糕”还要再增大。但是培训机构良莠不齐,我们在选择软件培训机构的时候需要注意哪些方面的内容呢?我怎么样选择好的IT培训学校?
  专家表示,那些有口碑的软件培训机构因为不断地完善服务,也越来越被认可,所以一个学校的资历往往是我们选择的一个标准,但是也因为培训机构的集团化经营,出现很多建设分校或者提供加盟的机构,教学质量往往不能够监控。那么学软件开发技术,到底什么样的培训机构比较好呢?
   怎么样选择好的软件培训学校?选择一个良好的培训机构,我们可以从以下几个方面着手。
  培训课程须标准化
  IT培训课程的标准化,除了要求整个体系使用统一的培训教材、课件之外,在教学方法、教师队伍建设、讲课内容等方面,都要求做到统一,甚至细致到某一堂课中某一节内容的讲解所用时间,都要有统一的标准和规范。
  “实训机制”很重要
  “学习计算机语言”只能掌握语言的基本语法、具有初步的编程能力,而“项目实训”就比纯粹进行计算机语言学习更能深刻地理解和掌握语言的语法和特征。
  就业推荐能力要强
  为增强自身的竞争力,一些有实力的IT职业培训机构都在企业内部设立了就业部门,专门负责毕业学员的就业推荐工作。
  怎么样选择一所合适的软件培训学校?我们主要需求注意以上几点,除此之外,学生应该对学校的更多情况尽可能的做一些了解,如学校设备等等这些。比如,欧柏泰克软件学院是一个真正值得探究和考察的软件培训学校,有更多问题可以咨询欧柏泰克的专业咨询老师。
&信息时代的迅猛发展使得软件工程师十分抢手,而其中的java软件工程师更是备受青睐。那么,如何才能成为Java软件工程师?J“Java软件工程师”发展前景怎么样?&
  无处不在的Java技术&
  全球有25亿Java器件运行着Java,450多万Java开发者活跃在地球的每个角落,数以千万计的Web用户每次上网都亲历Java的威力。从桌面办公应用到网络数据库等应用,从PC到嵌入式移动平台,从Java小应用程序(Applet)到架构庞大的J2EE企业级解决方案,处处都有Java的身影,就连美国大型太空项目当中,也使用了Java来开发控制系统和相关软件。越来越多的企业,因为使用了Java而提高了生产效率。越来越多的用户,因为Java而降低了成本,享受了生活。而用途如此之广的Java造就了Java工程师的辉煌。&
  Java软件工程师——职业概述&
  Java软件工程师是运用Java这个开发工具去完成软件产品的软件程序设计、开发、测试、维护升级等工作的职业。Java软件工程师可以从事jsp网站开发、Java编程、Java游戏开发、Java桌面程序设计,以及其他与Java语言编程相关的工作。可进入电信、银行、保险专业软件开发公司等从事软件设计和开发工作。&
  预计今后5年,中国软件行业每年会以30%的速度增长,跟普通程序员供大于求的情况相反,企业对Java软件工程师的需求则远远不能获得满足。根据调查,我国软件企业目前在Java高级软件工程师这类职位上的人员空缺至少在8万人。到2010年“十一五”末期,仅南京软件人才缺口就将达25万。行业的蒸蒸日上和人才的严重不足,无疑给了从业者以广阔的发展空间。&
  据欧柏泰克软件学院统计,在所有软件开发类人才的需求中,对Java软件工程师的需求占60%-70%。同时,严重的供小于求的情况也使得Java软件工程师的薪酬水涨船高。欧柏泰克软件学院毕业的软件工程师毕业平均薪资超过4700元,远远超过了应届毕业生平均月薪2500元的水平。
  当我们在技术线路中选择了Java,那么我们也就选择了持续学习,经常关注最新的java技术,了解它们,看是否适合你的需要,然后学习使用它们。在java中,我们应该掌握哪些基本的Java技术呢?欧柏泰克整理相关资料跟大家一起进行分享:
  Java基础:
  ◆Java原理和使用,包括基本的语言、语法知识和API
  ◆JSP+Servlet,Java Web开发的基础
  服务器:
  ◆WebLogic的原理、使用和配置
  ◆Tomcat:轻量的JavaWeb容器,和WebLogic功能类似,使用简单、方便、免费、开源,但不支持EJB
  ◆JBoss:类似于Tomcat,功能更强,支持EJB
  这三种应用服务器至少掌握其中的一种是很必要的。
  框架:
  ◆Struts、Spring、Hibernate
  ◆Tapestry:这是一个新的MVC框架,使用组件式开发,是显示层技术的发展趋势。
  ◆Flex和Laszlo:新的显示层技术,支持富客户端应用,是目前的较前沿的显示技术。
  ◆EJB :EJB的全称是Enterprise JavaBeans,是Java中的商业应用组件技术。
  Java Web开发周边技术:
  ◆HTML、Javascript、CSS、XML、XSLT,这些是开发中经常使用到的,应该熟练掌握。
  开发工具:
  ◆Dreamweaver、Eclipse或Jbuilder、PL/SQL
  数据库:
  ◆Oracle必须会用、SQLServer掌握、MySQL可以在自己学习时使用。DB2那种东西就不要学了,国内太少使用了。
  软件工程:
  ◆可以理解UML设计和使用UML进行简单设计。
相关阅读:
  栈、堆、常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同。长沙JAVA培训将深入Java核心,详细讲解Java内存分配方面的知识。
  Java内存分配与管理是Java的核心技术之一,今天欧柏泰克带领大家再次深入Java核心,详细介绍Java在内存分配方面的知识。一般Java在内存分配时会涉及到以下区域:
  ◆寄存器:我们在程序中无法控制
  ◆栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
  ◆堆:存放用new产生的数据
  ◆静态域:存放在对象中用static定义的静态成员
  ◆常量池:存放常量
  ◆非RAM存储:硬盘等永久存储空间
  Java内存分配中的栈
  在函数中定义的一些基本类型的变量数据和对象的引用变量都在函数的栈内存中分配。
  当在一段代码块定义一个变量时,Java就在栈中&为这个变量分配内存空间,当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
  Java内存分配中的堆
  堆内存用来存放由new创建的对象和数组。&在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
  在堆中产生了一个数组或对象后,还可以&在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。&引用变量就相当于是&为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。引用变量就相当于是为数组或者对象起的一个名称。
  引用变量是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放。而数组和对象本身在堆中分配,即使程序&运行到使用 new 产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍&然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走(释放掉)。这也是 Java 比较占内存的原因。
  实际上,栈中的变量指向堆内存中的变量,这就是Java中的指针!
  常量池&(constant pool)
  常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值(final)还包含一些以文本形式出现的符号引用,比如:
  ◆类和接口的全限定名;
  ◆字段的名称和描述符;
  ◆方法和名称和描述符。
  虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集和,包括直接常量(string,integer和 floating point常量)和对其他类型,字段和方法的符号引用。
  对于String常量,它的值是在常量池中的。而JVM中的常量池在内存当中是以表的形式存在的,&对于String类型,有一张固定长度的CONSTANT_String_info表用来存储文字字符串值,注意:该表只存储文字字符串值,不存储符号引&用。说到这里,对常量池中的字符串值的存储位置应该有一个比较明了的理解了。
  在程序执行的时候,常量池&会储存在Method Area,而不是堆中。
  堆与栈
  Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、 anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存&大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态&分配内存,存取速度较慢。
  栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是&确定的,缺乏灵活性。栈中主要存放一些基本类型的变量数据(int, short, long, byte, float, double, boolean, char)和对象句柄(引用)。
  栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义:
  int a = 3;
  int b = 3;
  编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。
  这时,如果再令 a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响&到b的值。
  要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b,&它是由编译器完成的,它有利于节省空间。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。
  String是一个特殊的包装类数据。可以用
  String str = new String(&abc&);
  String str =&&abc&;
  两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。而第二种是先在栈中创建一个对 String类的对象引用变量str,然后通过符号引用去字符串常量池&里找有没有&abc&,如果没有,则将&abc&存放进字符串常量池&,并令str指向”abc”,如果已经有”abc”&则直接令str指向“abc”。
  比较类里面的数值是否相等时,用equals()方法;当测试两个包装类的引用是否指向同一个对象时,用==,下面用例子说明上面的理论。
  String str1 =&&abc&;
  String str2 =&&abc&;
  System.out.println(str1==str2);&//true
  可以看出str1和str2是指向同一个对象的。
  String str1 =new String (&abc&);
  String str2 =new String (&abc&);
  System.out.println(str1==str2);&// false
  用new的方式是生成不同的对象。每一次生成一个。
  因此用第二种方式创建多个”abc”字符串,在内存中&其实只存在一个对象而已.&这种写法有利与节省内存空间.&同时它可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String(&abc&);的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
  另&一方面,&要注意:&我们在使用诸如String str =&&abc&;的格式定义类时,总是想当然地认为,创建了String类的对象str。担心陷阱!对象可能并没有被创建!而可能只是指向一个先前已经创建的&对象。只有通过new()方法才能保证每次都创建一个新的对象。
  由于String类的immutable性质,当String变量需要经常变换&其值时,应该考虑使用StringBuffer类,以提高程序效率。
  1.&首先String不属于8种基本数据类型,String是一个对象。因为对象的默认值是null,所以String的默认值也是但它又是一种特殊的对象,有其它对象没有的一些特性。
  2. new String()和new String(”&)都是申明一个新的空字符串,是空串不是
  3. String str=”kvill”;String str=new String (”kvill”)的区别
  示例:
  String s0=&kvill&;
  String s1=&kvill&;
  String s2=&kv&&+&&ill&;
  System.out.println( s0==s1 );
  System.out.println( s0==s2 );
  结果为:
  首先,我们要知结果为道Java 会确保一个字符串常量只有一个拷贝。
  因为例子中的 s0和s1中的”kvill”都是字符串常量,它们在编译期就被确定了,所以s0==s1为而”kv”和”ill”也都是字符串常量,当一个字&符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中” kvill”的一个引用。所以我们得出s0==s1==s2;用new String()&创建的字符串不是常量,不能在编译期就确定,所以new String()&创建的字符串不放入常量池中,它们有自己的地址空间。
  示例:
  String s0=&kvill&;
  String s1=new String(&kvill&);
  String s2=&kv&&+ new String(&ill&);
  System.out.println( s0==s1 );
  System.out.println( s0==s2 );
  System.out.println( s1==s2 );
  结果为:
  例2中s0还是常量池&中&kvill”的应用,s1因为无法在编译期确定,所以是运行时创建的新对象”kvill”的引用,s2因为有后半部分 new String(”ill”)所以也无法在编译期确定,所以也是一个新创建对象”kvill”的应用;明白了这些也就知道为何得出此结果了。
  4. String.intern():
  再补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。Sting的 intern()方法就是扩充常量池的&一个方法;当一个String实例str调用intern()方法时,Java 查找常量池中&是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常&量池中增加一个Unicode等于str的字符串并返回它的引用;看示例就清楚了
  示例:
  String s0=&&kvill&;
  String s1=new String(&kvill&);
  String s2=new String(&kvill&);
  System.out.println( s0==s1 );
  System.out.println(&&**********&&);
  s1.intern();
  s2=s2.intern();&//把常量池中&kvill&的引用赋给s2
  System.out.println( s0==s1);
  System.out.println( s0==s1.intern()&);
  System.out.println( s0==s2 );
  结果为:
  false //虽然执行了s1.intern(),但它的返回值没有赋给s1
  true //说明s1.intern()返回的是常量池中&kvill&的引用
  最后我再破除一个错误的理解:有人说,“使用 String.intern()&方法则可以将一个 String 类的保存到一个全局 String 表中&,如果具有相同值的 Unicode 字符串已经在这个表中,那么该方法返回表中已有字符串的地址,如果在表中没有相同值的字符串,则将自己的地址注册到表中”如果我把他说的这个全局的 String 表理解为常量池的话,他的最后一句话,”如果在表中没有相同值的字符串,则将自己的地址注册到表中”是错的:
  示例:
  String s1=new String(&kvill&);
  String s2=s1.intern();
  System.out.println( s1==s1.intern()&);
  System.out.println( s1+&&&+s2 );
  System.out.println( s2==s1.intern()&);
  结果:
  kvill kvill
  在这个类中我们没有声名一个”kvill”常量,所以常量池中一开始是没有”kvill”的,当我们调用s1.intern()后就在常量池中新添加了一&个”kvill”常量,原来的不在常量池中的”kvill”仍然存在,也就不是“将自己的地址注册到常量池中”了。
  s1==s1.intern()&为false说明原来的”kvill”仍然存在;s2现在为常量池中”kvill”的地址,所以有s2==s1.intern()为true。
  5.&关于equals()和==:
  这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回而==是&比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。
  6.&关于String是不可变的
  这一说又要说很多,大家只&要知道String的实例一旦生成就不会再改变了,比如说:String str=”kv”+”ill”+”&“+”ans”;&就是有4个字符串常量,首先”kv”和”ill”生成了”kvill”存在内存中,然后”kvill”又和”&”&生成&“kvill “存在内存中,最后又和生成了”kvill ans”;并把这个字符串的地址赋给了str,就是因为String的”不可变”产生了很多临时变量,这也就是为什么建议用StringBuffer的原&因了,因为StringBuffer是可改变的。
  下面是一些String相关的常见问题:
  String中的final用法和理解
  final StringBuffer a = new StringBuffer(&111&);
  final StringBuffer b = new StringBuffer(&222&);
  a=b;//此句编译不通过
  final StringBuffer a = new StringBuffer(&111&);
  a.append(&222&);//&编译通过
  可见,final只对引用的&值&(即内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象&的变化,final是不负责的。
  String常量池问题的几个例子
  下面是几个常见例子的比较分析和理解:
  String a =&&a1&;
  String b =&&a&&+ 1;
  System.out.println((a == b));&//result = true
  String a =&&atrue&;
  String b =&&a&&+&&true&;
  System.out.println((a == b));&//result = true
  String a =&&a3.4&;
  String b =&&a&&+ 3.4;
  System.out.println((a == b));&//result = true
  分析:JVM对于字符串常量的&+&号连接,将程序编译期,JVM就将常量字符串的&+&连接优化为连接后的值,拿&a&&+ 1来说,经编译器优化后在class中就已经是a1。在编译期其字符串常量的值就确定下来,故上面程序最终的结果都为true。
  String a =&&ab&;
  String bb =&&b&;
  String b =&&a&&+
  System.out.println((a == b));&//result = false
  分析:JVM对于字符串引用,由于在字符串的&+&连接中,有字符串引用存在,而引用的值在程序编译期是无法确定的,即&a&&+ bb无法被编译器优化,只有在程序运行期来动态分配并将连接后的新地址赋给b。所以上面程序的结果也就为false。
  String a =&&ab&;
  final String bb =&&b&;
  String b =&&a&&+
  System.out.println((a == b));&//result = true
  分析:和[3]中唯一不同的是bb字符串加了final修饰,对于final修饰的变量,它在编译时被解析为常量值的一个本地拷贝存储到自己的常量&池中或嵌入到它的字节码流中。所以此时的&a&&+ bb和&a&&+&&b&效果是一样的。故上面程序的结果为true。
  String a =&&ab&;
  final String bb = getBB();
  String b =&&a&&+
  System.out.println((a == b));&//result = false
  private static String getBB()&{
  return &b&;
  分析:JVM对于字符串引用bb,它的值在编译期无法确定,只有在程序运行期调用方法后,将方法的返回值和&a&来动态连接并分配地址为b,故上面&程序的结果为false。
  通过上面4个例子可以得出得知:
  String s =&&a&&+&&b&&+&&c&;
  就等价于String s =&&abc&;
  String a =&&a&;
  String b =&&b&;
  String c =&&c&;
  String s = a + b +
  这个就不一样了,最终结果等于:
  StringBuffer temp = new StringBuffer();
  temp.append(a).append(b).append(c);
  String s = temp.toString();
  由上面的分析结果,可就不难推断出String 采用连接运算符(+)效率低下原因分析,形如这样的代码:
  public class Test {
  public static void main(String args[])&{
  String s =
  for(int i = 0; i & 100; i++)&{
  s +=&&a&;
  每做一次&+&就产生个StringBuilder对象,然后append后就扔掉。下次循环再到达时重新产生个StringBuilder对象,然后 append 字符串,如此循环直至结束。如果我们直接采用 StringBuilder 对象进行 append 的话,我们可以节省 N - 1 次创建和销毁对象的时间。所以对于在循环中要进行字符串连接的应用,一般都是用StringBuffer或StringBulider对象来进行 append操作。
  String对象的intern方法理解和分析:
  public class Test4 {
  private static String a =&&ab&;
  public static void main(String[] args){
  String s1 =&&a&;
  String s2 =&&b&;
  String s = s1 + s2;
  System.out.println(s == a);//false
  System.out.println(s.intern()&== a);//true
  这里用到Java里面是一个常量池的问题。对于s1+s2操作,其实是在堆里面重新创建了一个新的对象,s保存的是这个新对象在堆空间的的内容,所&以s与a的值是不相等的。而当调用s.intern()方法,却可以返回s在常量池中的地址值,因为a的值存储在常量池中,故s.intern和a的值相&等。
  栈中用来存放一些原始数据类型的局部变量数据和对象的引用(String,数组.对象等等)但不存放对象内容
  堆中存放使用new关键字创建的对象.
  字符串是一个特殊包装类,其引用是存放在栈里的,而对象内容必须根据创建方式不同定(常量池和堆).有的是编译期就已经创建好,存放在字符串常&量池中,而有的是运行时才被创建.使用new关键字,存放在堆中。
&&&&相关技术:
随着移动设备的普及和应用,如数字电视,PDA,移动存储通信设备等。而各方面的技术也进入了一个飞速发展的时期。尤其是近几年J2ME技术的发展尤为突出,而开发MIDlet应用程序有很多种开发工具可以选择,这些开发工具盒开发环境主要分为三大类:
第一种是Sun公司的J2ME通用开发工具,例如J2ME无线开发工具包(WTK);
第三种是移动设备制造商的SDK,例如NokiaSDK,SonyEricssonSDK;
第二种是集成开发环境,例如MyEclipse,JBuilder,NetBeans等。长沙java培训在本文给大家介绍如何搭建Myeclipse 。
J2ME通用开发工具介绍:
J2ME通用开发工具主要是Sun公司的J2ME无线工具开发包(J2MEWirelessToolkitWTK),它是Sun公司提供的一个MIDP应用程序工具包,其自身包含一个MIDP的实现。J2ME的最新版本是WTK2.5.2可以免费的从Sun网站上下载,而当前很多用WTK2.2稳定版。
Myeclipse J2ME开发环境配置步骤:
1、安装了JDK1.4或更新的版本到PC。
2、WTK的安装配置。
双击下载好的J2MEWTL安装文件j2me_wireless_toolkit-2_5_2-ml-windws.exe,按照画面进行安装。这里就可以看到要检查JVM的画面。由于我们开始安装了JDK,所以就不需要了。如果没有安装,退出先安装JDK然后安装。按照画面安装,目录一般选择和JDK一起的目录,如java/wtk2.5.2单击完成。好了,至此我们已经将WTK安装完毕。
3、进行WTK环境变量的设置。
进入DOS命令如下:
F:&SETWTK_HOME=F:\java\WTK2.5.2;
F:&SETMIDPAPI=%WTK_HOME%\lib\midpapi20.
F:&SETMIDPCP=%WTK_HOME%\wtklib\kenv.%WTK_HOME%\wtklib\kvem.%WTK_HOME%\wtklib\lime.%WTK_HOME%\lib\cldcapi10.jar完成。
4、下载插件EclipseMe。
用MyEclipse开发MDIP程序我们需要一个插件EclipseMe来开发J2ME程序。
5、在Myeclipse的菜单栏上选择'Help'|'SoftwareUpdates'|'FindandInstall',查找我们下载的EclipseMe的插件。
6、选择'Searchfornewfeaturestoinstall'选中EclipseMe插件,单击'next'继续。然后就按照本地软件更新的方式进行安装EclipseMe。
7、重启MyEclipse,在菜单栏中选择'Window'|'Preference',会发现对话框中多了J2ME一个分支,那么你成功安装了EclipseMe。
8、关联WTK。
(1)在刚才展开的'Preference'单击'J2ME'再单击'Preferences'配置管理。打开配置对话框。
(2)选择'DeviceManagement(设备管理),对话框中选择'Import(导入)。
(3)'Refresh'刷新EclipseMe会查找已知的设备定义,我们将自己的STK或SDK安装目录添加进去。这样我们可以成功的看到导入的设备出现在EclipseMe中。选择默认的手机模式单击'OK'完成。
至此,我们的MyEclipse的集成开发环境的配置也完成了。
以上是关于Myeclipse J2ME开发之环境配置的介绍,更多相关知识请关注欧柏泰克!

我要回帖

更多关于 软件工程师待遇 的文章

 

随机推荐