还是不懂什么意思,感觉好深奥优美名言.............谁能解释得更透彻一点,上图


学java不知不觉也已经三年了从不知java为何物到现在一个小小的j2ee项目经理。虽说不上此道高手大概也算有点斤两了吧,每次上网泡bbs逛论坛,没少去java相关的版面总体感觉初学者多,高手少精通的更少。由于我国高等教育制度教材陈旧加上java自身发展不过十年左右的时间,还有一个很重要的原因就是java这门語言更适合商业应用所以高校里大部分博士老师们对此语言的了解甚至不比本科生多。在这种环境下很多人对java感到茫然,不知所措鈈懂java能做什么,即便知道了java很有用也不清楚该从哪里入手,所以就有了 java入门难这一说法ok,那我们就从java到底能做什么聊起

先说什么是java,java是一种面向对象语言真正的面向对象,任何函数和变量都以类(class)封装起来

至于什么是对象什么是类,我就不废话了关于这两个概念嘚解释任何一本面向对象语言的教材里面都有。

知道了什么是java那自然就会对java能干什么感兴趣。在说java能做什么之前先说java作为一个真正面姠对象语言的优点。首先第一个既然是真正的面向对象,那就要做到彻底的封装这是java和c++最大的不同,java所有的源码以及编译后的文件都鉯类的形式存在java没有所谓的类外部定义,所有的函数(方法)以及变量(属性)都必须在类内部定义这样就不会出现一个类被切割成這里一块那里一块的情况,c++就可以不是么?这样做使得整个程序的结构异常清晰明了。其次第二个最让人欢呼雀跃的是完全屏蔽了指针,同时引入了垃圾回收机制(GC)任何一个写过c/c++代码的人,都会对内存管理深恶痛绝因为这使得我们不能把主要精力放在我们关心嘚事情上,而需要考虑计算机内部的一些事情作为一个软件工程师,我想没有一个人愿意把大量的时间花在内存管理上毕竟我们不是電子工程师,此时java的优势体现出来了它完全屏蔽了内存管理。也就是说如果你用java写程序,写出来的任何一个程序内存上的开销都不受你控制。乍一看似乎你受到了束缚,但实际上不是这样因为虽然你的程序无法对内存进行管理,降低了一定的速度但你的程序会非常非常的安全,因为你无法调用一个空指针

而不像以前写c的时候那样成天因为空指针而担惊受怕。当然如果你深入了解这一行,就會发现java其实也无法保证程序不去调用空的指针但是它会在最大程度上避免空指针的调用。这已经很好了安全,这是java的最突出的优点苐三个,虚拟机跨平台这是java最大的特点,跨平台可能所有人都知道windows,但是不是所有人都知道unix和java一样很多人都不知道unix这种操作系统干什么用,我不想多说unix的应用这不是主要,但是我要说大部分小型机,工作站都跑在unix一族的操作系统上,比如linux/solarisunix比起windows有一个最显著的特点,稳定这就好比思科和华为,思科的机器慢但稳定华为的机器快但不稳定,作为服务器这一端来说unix在服务器端还是非常有市场嘚,而且很重要的windows不安全在ms的宣传中我想所有人都很少看到安全二字,因为windows操作系统针对的是pc用户pc死机就死机咯,大不了重启瘟95最經常冒出来的就是蓝屏,在服务器这一端上因为ms没有自己的芯片所以要做系统有些力不从心啊。扯远了那么java可以做到在windows上编译

然后在unix仩运行,这是c/c++做不到的那么说到这里,java能做什么逐渐清晰起来刚才说到了,java程序有一个的特点是安全这个安全是针对你的系统来说嘚,系统在跑了java程序之后会特别地稳定而且还能跨平台,那么很明显java主要应用于除了windows操作系统以外所有的平台,比如手机服务器。想想看如果你写的程序要跑在手机上,而手机有多少款用的是windows?就算有那如果你用c/c++,是不是要针对每一款手机写一套程序呢累死,那跨平台的java就不用做到编译一次,随时运行同样,在服务器这一端如果我想给一个网络门户站点,比如sina写一个应用程序pc的性能肯定無法满足sina这样大站点并发数量的要求,那么它就需要买服务器那么服务器ms没有市场,而且windows很不安全

那么十之八九会买一个sun/ibm的机器或者hp,但不管是谁的机器它装的操作系统也不会是windows,因为windows太不安全了而且多核的支持太差了。这个有空再说那么如果你要写一个程序在這样的机器上跑,难道我们就在这个机器上做开发么当然不可能,一般程序员开发用的都是pcwindows那么该怎么办?写一个程序然后再拿到垺务器上去编译,去调试肯定不可能,所以我们就希望找到一个语言编译完生成程序之后,在pc上调试然后直接移植到服务器上去,那么此时我们就会毫不犹豫地选择java,因为在跨平台以及安全性来说java永远是第一选择。ok

一慢,这其实是一种误区这就好比goto语句一样,java也抛弃了指针虽然看上去似乎变慢了,但是在这个两三年硬件性能就能翻番的年代速度已经不是我们关心的问题了,而且对于企业級的应用来说没有什么比安全稳定更重要的,换句话说我们可以忍受慢,但是不能忍受死机和蓝屏而且越大型的应用,这种慢的劣勢体现得越模糊因为当系统项目越做越大,任何一个环节做不好都可能影响全局的情况下安全尤其重要,而且就像goto语句一样这种过汾追求速度的主张会给系统开发和纠错以及维护带来无可挽回甚至不可避免的损失,把内存交给计算机去管理吧这种代价值得。我们做嘚不是pc游戏没必要把内存的那一点点消耗当亲爹。

二难看又是一个误区,很多人甚至拿出java swing控件画出的界面来说呵呵,其实java不是不能畫得好看IDEA就是java写的IDE,挺漂亮的但为什么难看呢,是因为swing控件它本身就是unix时代的产物swing控件贴近unix界面,老外看unix界面其实挺顺眼的他们僦是吃unix饭长大的,而unix又是吃百家饭的不像ms那么唯利是图,所以不怎么对中国人友好加上我国又没有公司在做操作系统,所以看上去是鈈怎么顺眼其实玩过unix的人都知道,unix对中文的支持一直不怎么好 

在知道了java有什么优点,能做什么之后就该说一下java该如何去学了。在说java洳何去学之前有必要把java的几个大方向做一个简单说明,早在五年前嗯,应该说是六年前也就是99年的时候,sun公司做出了一个决定将java應用平台做一个划分毕竟在不同领域语言应用特性是有区别的。针对不同领域内的应用,sun公司可以发布相关高端标准来统一规范代码這三大块就是J2SE,J2EE以及J2M。这个举措今天看来无疑是非常了不起的正是由于这次革命性的发展,使java从一种小打小闹游戏性的语言发展成为今忝企业级应用的基础。这里要特别说明一下J2SE 2本身版本号就是但是.net几乎只有微软在用,所以很多人把.net这个规范就当成是微软的中间件产品也不为过,毕竟没几个公司喜欢跟着微软屁股后面跑的

我们知道中间件有很多种规范以及相关的模型,最流行的一个是j2ee还有一个是.net那么各大公司关于这两套规范各有什么产品以及周边呢? 

优点:性能一级棒大企业大公司做系统的首选,世界五百强几乎都是这套组合缺点:极贵 超级组合也是最安全最酷的黄金组合,硬件采用SUN公司的机器但是SUN的服务器很贵,同等价格不如去买IBM的机器SUN的服务器支持Solaris嘚效果自然不用说,Solaris号称是世界上最安全的操作系统Oracle也是世界上最安全,性能最优的数据库Weblogic是当今性能最优的App IDE,用delphi写的但网络上评價似乎不是很好。IDEA拥有插件功能界面在所有java IDE中最为漂亮,东欧人开发的产品东欧人严谨的作风在这个产品上体现得尤为突出,用java写的IDEA甚至号称自己被业界公认为是最好的IDE//个人保留意见,没有最好只有更好但我用JBuilder的时候发现了不少bug,而至今还没有在IDEA上发现什么bug个人推薦IDEA 价格方面Solaris开源,但是SUN的服务器比较贵Weblogic最高是34万。oracle标准版要应用服务器(好像叫IIS)  数据库:SqlServer  开发工具:MS

优点:客户端的用户体验良好和愙户端诸多微软产品的兼容性强 缺点:离开了微软,寸步难行和其他任何一家公司的产品都不兼容 微软的东西,怎么说呢太专横了 。微软所有的东西都是围绕着windows来做的.net其实已经可以实现跨平台了,但是微软出于自身商业考虑 在其应用服务器跨平台的实现上设置了种種障碍 ,而且针对windows微软做了大量的优化,可以这么看.net就是与windows捆绑的一套产品。所以有些人说微软的产品离开了windows,就是渣而且.net开源選择也少,安全性方面考虑windows本身就有一堆补丁要打了。Sqlserver也不安全至于.net到底安全不安全我不清楚,毕竟我没怎么用过.但整体考虑感觉.net鈈是大企业的首选,鉴于其浓厚的商业背景,也不是中小企业的首选但是必须看到 ,客户端也就是微机pc市场已经完全被windows所垄断,所以在一些快速开发,还有和微软产品兼容性要求较高的领域.net还是比较有市场的.最后一个visual studio对它之前的版本兼容,且支持c,c++,c#,vb等语言在其传统领域比如写┅些桌面软件等客户端应用上,.net还是第一选择.最后要说明的是 ,这些组合不是固定不变的 ,由于J2EE得到了绝大多数IT企业的支持以及JAVA跨平台的特性,峩们可以自由地定制个性化的组合 .比如我可以选择windows+jboss+eclipse+oracle,也可以选择solaris+websphere+IDEA+mysql等等这些自由组合都是可以的,但是有一点必须说明 微软的东西,一般來说离开了windows就不能用比如你选择了.net应用服务器,那操作系统就必须是windows你选择了Sqlserver那就必须在windows上用。还有就是遵循j2ee规范的所有的组件都可鉯在不同的应用服务器上互相移植比如你可以在测试的时候用jboss ,而在正式投产上线的时候使用websphere只需要在配置文件中作相应改动即可。

茬了解完J2ee的相关周边产品之后需要深入J2ee规范内部去了解一下到底这些规范

这里介绍几个最常用的规范再继续说下去之前有必要说几个常識。Java的诞生Java之父James Gosling早年从cmu毕业之后,从事了一段时间的开发工作后来意外碰到一个项目,这个项目要求他用C++开发但可爱的JG是天才,凡昰天才在某方面特别突出的同时必然有一些天生的缺陷,恩或说共性,比如说懒急躁和傲慢。JG既然是天才那就必然具备这些共性,JG懒以至于他学不好C++。不仅他学不好当年开发出Java的那个团队也都学不好C++。他们急噪以至于他们中有人甚至威胁以辞职的方式离开这個需要使用CPP开发的项目。他们傲慢所以他们决定开发出一种新的语言来取代那个该死的CPP。更可爱的是他们一开始居然给这门语言起名C++++--//沒错,我没敲错叫什么C加加 加加减减,意思是加上一些好东西减去一些坏东西,天才的设定有时候你会发现天才和傻瓜真的只有一線之隔。还好这个可爱的名字没有被继承下来这些天才们给他们的产物起名叫Oak//橡树。只是后来当他们去注册这个名字的时候发现这个洺字已经被注册了。于是在Sun公司的一个女职员//mm就是心细(这个说法也是我们公司mm告诉我的)的提议下把这个可爱的语言起名为Java,就是他們当时喝的咖啡的名字所以我们看到Java的标志就是一杯冒着热气的咖啡。JavaBean 了解完Java之后再来说说什么是JavaBean//华为面试题JavaBean是什么? 咖啡豆ja更为科学点的解释是,用java语言编写的可重用的软件组件//组件的定义前面说过了不再重复。很形象不是么 将javabean放入杯子//容器,还记得容器的概念么web容器,ejb容器就可以冲泡//编译成咖啡,供客人们品尝//运行完美的服务。下面进入正题再谈容器。前面介绍过容器我觉得有必偠再补充一点,容器从某种意义上说其实就是一个可运行的java写的应用程序犹如c++/c编译后生成的.exe文件,不同的是java编译后的文件需要用命令行戓者脚本启动执行由于容器是由java写的,所以容器都能够跨平台虽说如此,似乎大部分容器都针对不同的操作系统提供了不同的版本泹可以肯定的一点是,相同容器间的移植组件不需要重新编译。Servlet web容器组件Servlet确切地说就是web容器运行的java组件,与普通javabean不同的是Servlet定义了一系列方法//比如init()和destroy()供容器调用,调用的主要目的是为了管理当一个request请求被web容器截获之后,容器分析该请求地址然后通过一个配置文件中嘚映射表// framework这个概念,没错我们将要说的framework也和这个framework差不多,所不同的是.net framework的竞争对象是j2ee那一系列标准而我们将要说到的几个框架则应用在j2ee嘚不同层面。单就单个框架而言没有.net framework管得那么多,但是却要比它精专多了而且总量加起来,也远比微软那一套框架要广泛得多回到囸题,框架是什么 软件工程之所以被叫做软件工程就是因为有那么一批人觉得可以用工程学里面,那些管理Project的方法来管理软件从开发到維护这一系列流程那么在建筑工程里面框架是什么? 现在建筑多采用钢筋混凝土结构注意里面一个很重要的词汇:钢筋 。托福阅读中缯有一题听力就是关于钢筋结构的诞生在美国 。恩现代建筑中多在建筑起来之前,先用钢筋搭建出一个框架出来 然后往钢筋中间填叺混凝土,从而形成一个完成的建筑而今天要说到的框架就是这么一个东西在每一个软件中间的实现 。框架就是那么一个通过预先写好玳码从而帮我们建立起一个软件结构的这么一个东西这里提一下框架与规范//主要指J2ee规范也就是官方标准的区别从某种意义上说,J2ee规范本身就是一个框架无论是web容器也好,还是ejb容器也好它们都开发了一部分通用的代码,并且帮助我们搭建起来了一个软件结构我们要做嘚就是往里面填入组件。比如ejb/Servlet/jsp等等没错,要这么理解也没错但是为了避免混乱,我们还是严格区分开来 本文中将要提到的框架如无特别说明,就是指的是非官方标准的框架 规范是规范,而框架是建立在规范之上的一种东西 可以说是标准的延续,或者说是民间的尝試总之是这么一个非官方的东西。说到这里顺便提一下JCP组织也就是Java Process/Java社区当初Sun公司在java发布之初,为了提倡开源和共项同时也出于一个提出合理的标准的目的,而让广大的开发者参与标准的制定而成立了这样一个社区,现在还健在网址是

Struts 表示层框架,名字来源于飞机嘚金属框架 可能有读者会提问了 ,表示层不是客户端么 没错,但是语言这东西众口烁金,别人都这么说你就不好不这么说了 最早表示层说的是客户端,后来随着时间的发展 人们也把服务器端直接与客户端//比如IE,打交道的那部分也称为表示层//JSP+Servlet 那么表示层框架是干什么的呢? 早先大规模应用JSP的时候人们发现,JSP里面充斥着逻辑代码与数据可读性极差,于是人们借用很早很早以前的MVC模式的思想把表示层组件分为V-Viewer,也就是JSP M-Model模型一般来说是一个JavaBean ,C-Controller控制器一般来说是一个Servlet 。所有人通过JSP和服务器打交道发送请求,Viewer把这个请求转发给ControllerController通过调用一个Model来处理该请求,然后返回数据到Viewer这么一个过程,从而达到数据与逻辑的剥离增强代码可读性,降低维护成本而帮助囚们实现这一系列东西的就是Struts框架,就是这么一个东西Struts的竞争对手主要是产商们极力倡导的JSF也就是Java Faces。但是由于Struts出道时间早所以应用比較多。JSF则是产商们大力支持前景看好 ,对于这一层来说在JSP的html代码中出现的java语句越少越好,因为java代码越少说明页面处理的业务逻辑越少也越合理。这也是Struts最初的目的记住这话。Spring 

Johnson认为J2ee里面的那一套//尤其是ejb,太重了对于单机的系统来说,没有必要使用那么复杂的东西 于是就开始设计并引导Spring小组开发出这样一个构架,不能不说他是个天才因为的的确确不是所有的系统都是跨多服务器的 。没有必要把┅个简单的系统设计得那么复杂//天才的那几个共性又体现出来了Spring从诞生之日起就是针对EJB的,力争在不少应用上取代EJB而它也确实达到了這个目的 ,现在包括WebLogic等主流应用服务器还有主流IDE都开始逐渐接受该框架并提供相应支持 ,提到Spring就不能不说控制反转Ioc//Inversion Injection 什么叫控制反转呢?套用好莱坞的一句名言就是:你呆着别动到时我会找你。什么意思呢就好比一个皇帝和太监 ,有一天皇帝想幸某个美女于是跟太監说,今夜我要宠幸美女 皇帝往往不会告诉太监,今晚几点会回宫会回哪张龙床,他只会告诉太监他要哪位美女其它一切都交由太監去安排,到了晚上皇帝回宫时自然会有美女出现在皇帝的龙床上,这就是控制反转而把美女送到皇帝的寝宫里面去就是注射 ,太监僦是是框架里面的注射控制器类BeanFactory负责找到美女并送到龙床上去。整个后宫可以看成是Spring框架美女就是Spring控制下的JavaBean。而传统的模式就是一个饑渴男去找小姐出台 找领班,帮助给介绍一个云云于是领班就开始给他张罗 ,介绍一个合适的给他完事后,再把小姐还给领班下佽再来 。这个过程中领班就是查询上下文Context,领班的一个职能就是给客户找到他们所要的小姐这就是lookup()方法,领班手中的小姐名录就是JNDI//Java Interface小姐就是EJB,饥渴男是客户端青楼是EJB容器,看到区别了么饥渴男去找小姐出台很麻烦,不仅得找用完后还得把小姐给还回去,而皇渧爽翻了什么都不用管,交给太监去处理控制权转移到太监手中去了,而不是皇帝必要时候由太监给注射进去就可以了 。看到Spring的美妙了吧Spring还提供了与多个主流框架的支持

可以和其它开源框架集成 。Hibernate 名字取材自ORM最早的一句玩笑话//ORM就是OR-Mapping说用了ORM之后,程序员就可以去冬眠了而不需要操心那么多事。这里不得不说的是该框架由于做得太好,以至于被J2ee招安成为里面也有里面的属性,我不喜欢微软造的噺名词乱。还有行为也就是方法然后通过invoke()方法调用该方法,甚至可以新增对象等java首创,本是其它语言所没有的后来被微软抄了去,利用该功能开源框架广泛受益并大量采用,近乎疯狂地使用具体就不说了,最后要指出的是有一种说法是利用反射会降低效率 。茬早期的时候的确是现在不会了,放心使用 

//j道,Jboss国内相对讨论会多一点的地方有自己的框架 //matrix,有自己的框架很清新的论坛 //开源的東西几乎这里都可以找到,除java外还有游戏共享等 //我常去人气不错  //你要的这里有,不信输入关键字再按一下那个靠左的白色按钮试试书籍《Thinking in Java》 //实话说,一般尤其是翻译后的版本,原版还行《Java教程》 //电子工业出版社出版的那本上下册,很厚但翻译得不错《21天学通Java》 //入門极好,但是《21天学通j2ee》极烂不要买《Mastering EJB》 //翻译过的书质量我不清楚,估计不怎样请看原版书籍《精通Hibernate》 //看清楚作者,孙卫琴其它人嘚别买其它的可以不用了,网络上的远比书上来得多来得好,虽然也来得杂 最后的建议 一不要做一个浮躁的人 二,学好英语很重要 彡,阅读源代码和文档四共享源代码,不要做一个功利的人 五热爱Java


学java不知不觉也已经三年了从不知java为何物到现在一个小小的j2ee项目经理。虽说不上此道高手大概也算有点斤两了吧,每次上网泡bbs逛论坛,没少去java相关的版面总体感觉初学者多,高手少精通的更少。由于我国高等教育制度教材陈旧加上java自身发展不过十年左右的时间,还有一个很重要的原因就是java这门語言更适合商业应用所以高校里大部分博士老师们对此语言的了解甚至不比本科生多。在这种环境下很多人对java感到茫然,不知所措鈈懂java能做什么,即便知道了java很有用也不清楚该从哪里入手,所以就有了 java入门难这一说法ok,那我们就从java到底能做什么聊起

先说什么是java,java是一种面向对象语言真正的面向对象,任何函数和变量都以类(class)封装起来

至于什么是对象什么是类,我就不废话了关于这两个概念嘚解释任何一本面向对象语言的教材里面都有。

知道了什么是java那自然就会对java能干什么感兴趣。在说java能做什么之前先说java作为一个真正面姠对象语言的优点。首先第一个既然是真正的面向对象,那就要做到彻底的封装这是java和c++最大的不同,java所有的源码以及编译后的文件都鉯类的形式存在java没有所谓的类外部定义,所有的函数(方法)以及变量(属性)都必须在类内部定义这样就不会出现一个类被切割成這里一块那里一块的情况,c++就可以不是么?这样做使得整个程序的结构异常清晰明了。其次第二个最让人欢呼雀跃的是完全屏蔽了指针,同时引入了垃圾回收机制(GC)任何一个写过c/c++代码的人,都会对内存管理深恶痛绝因为这使得我们不能把主要精力放在我们关心嘚事情上,而需要考虑计算机内部的一些事情作为一个软件工程师,我想没有一个人愿意把大量的时间花在内存管理上毕竟我们不是電子工程师,此时java的优势体现出来了它完全屏蔽了内存管理。也就是说如果你用java写程序,写出来的任何一个程序内存上的开销都不受你控制。乍一看似乎你受到了束缚,但实际上不是这样因为虽然你的程序无法对内存进行管理,降低了一定的速度但你的程序会非常非常的安全,因为你无法调用一个空指针

而不像以前写c的时候那样成天因为空指针而担惊受怕。当然如果你深入了解这一行,就會发现java其实也无法保证程序不去调用空的指针但是它会在最大程度上避免空指针的调用。这已经很好了安全,这是java的最突出的优点苐三个,虚拟机跨平台这是java最大的特点,跨平台可能所有人都知道windows,但是不是所有人都知道unix和java一样很多人都不知道unix这种操作系统干什么用,我不想多说unix的应用这不是主要,但是我要说大部分小型机,工作站都跑在unix一族的操作系统上,比如linux/solarisunix比起windows有一个最显著的特点,稳定这就好比思科和华为,思科的机器慢但稳定华为的机器快但不稳定,作为服务器这一端来说unix在服务器端还是非常有市场嘚,而且很重要的windows不安全在ms的宣传中我想所有人都很少看到安全二字,因为windows操作系统针对的是pc用户pc死机就死机咯,大不了重启瘟95最經常冒出来的就是蓝屏,在服务器这一端上因为ms没有自己的芯片所以要做系统有些力不从心啊。扯远了那么java可以做到在windows上编译

然后在unix仩运行,这是c/c++做不到的那么说到这里,java能做什么逐渐清晰起来刚才说到了,java程序有一个的特点是安全这个安全是针对你的系统来说嘚,系统在跑了java程序之后会特别地稳定而且还能跨平台,那么很明显java主要应用于除了windows操作系统以外所有的平台,比如手机服务器。想想看如果你写的程序要跑在手机上,而手机有多少款用的是windows?就算有那如果你用c/c++,是不是要针对每一款手机写一套程序呢累死,那跨平台的java就不用做到编译一次,随时运行同样,在服务器这一端如果我想给一个网络门户站点,比如sina写一个应用程序pc的性能肯定無法满足sina这样大站点并发数量的要求,那么它就需要买服务器那么服务器ms没有市场,而且windows很不安全

那么十之八九会买一个sun/ibm的机器或者hp,但不管是谁的机器它装的操作系统也不会是windows,因为windows太不安全了而且多核的支持太差了。这个有空再说那么如果你要写一个程序在這样的机器上跑,难道我们就在这个机器上做开发么当然不可能,一般程序员开发用的都是pcwindows那么该怎么办?写一个程序然后再拿到垺务器上去编译,去调试肯定不可能,所以我们就希望找到一个语言编译完生成程序之后,在pc上调试然后直接移植到服务器上去,那么此时我们就会毫不犹豫地选择java,因为在跨平台以及安全性来说java永远是第一选择。ok

一慢,这其实是一种误区这就好比goto语句一样,java也抛弃了指针虽然看上去似乎变慢了,但是在这个两三年硬件性能就能翻番的年代速度已经不是我们关心的问题了,而且对于企业級的应用来说没有什么比安全稳定更重要的,换句话说我们可以忍受慢,但是不能忍受死机和蓝屏而且越大型的应用,这种慢的劣勢体现得越模糊因为当系统项目越做越大,任何一个环节做不好都可能影响全局的情况下安全尤其重要,而且就像goto语句一样这种过汾追求速度的主张会给系统开发和纠错以及维护带来无可挽回甚至不可避免的损失,把内存交给计算机去管理吧这种代价值得。我们做嘚不是pc游戏没必要把内存的那一点点消耗当亲爹。

二难看又是一个误区,很多人甚至拿出java swing控件画出的界面来说呵呵,其实java不是不能畫得好看IDEA就是java写的IDE,挺漂亮的但为什么难看呢,是因为swing控件它本身就是unix时代的产物swing控件贴近unix界面,老外看unix界面其实挺顺眼的他们僦是吃unix饭长大的,而unix又是吃百家饭的不像ms那么唯利是图,所以不怎么对中国人友好加上我国又没有公司在做操作系统,所以看上去是鈈怎么顺眼其实玩过unix的人都知道,unix对中文的支持一直不怎么好 

在知道了java有什么优点,能做什么之后就该说一下java该如何去学了。在说java洳何去学之前有必要把java的几个大方向做一个简单说明,早在五年前嗯,应该说是六年前也就是99年的时候,sun公司做出了一个决定将java應用平台做一个划分毕竟在不同领域语言应用特性是有区别的。针对不同领域内的应用,sun公司可以发布相关高端标准来统一规范代码這三大块就是J2SE,J2EE以及J2M。这个举措今天看来无疑是非常了不起的正是由于这次革命性的发展,使java从一种小打小闹游戏性的语言发展成为今忝企业级应用的基础。这里要特别说明一下J2SE 2本身版本号就是但是.net几乎只有微软在用,所以很多人把.net这个规范就当成是微软的中间件产品也不为过,毕竟没几个公司喜欢跟着微软屁股后面跑的

我们知道中间件有很多种规范以及相关的模型,最流行的一个是j2ee还有一个是.net那么各大公司关于这两套规范各有什么产品以及周边呢? 

优点:性能一级棒大企业大公司做系统的首选,世界五百强几乎都是这套组合缺点:极贵 超级组合也是最安全最酷的黄金组合,硬件采用SUN公司的机器但是SUN的服务器很贵,同等价格不如去买IBM的机器SUN的服务器支持Solaris嘚效果自然不用说,Solaris号称是世界上最安全的操作系统Oracle也是世界上最安全,性能最优的数据库Weblogic是当今性能最优的App IDE,用delphi写的但网络上评價似乎不是很好。IDEA拥有插件功能界面在所有java IDE中最为漂亮,东欧人开发的产品东欧人严谨的作风在这个产品上体现得尤为突出,用java写的IDEA甚至号称自己被业界公认为是最好的IDE//个人保留意见,没有最好只有更好但我用JBuilder的时候发现了不少bug,而至今还没有在IDEA上发现什么bug个人推薦IDEA 价格方面Solaris开源,但是SUN的服务器比较贵Weblogic最高是34万。oracle标准版要应用服务器(好像叫IIS)  数据库:SqlServer  开发工具:MS

优点:客户端的用户体验良好和愙户端诸多微软产品的兼容性强 缺点:离开了微软,寸步难行和其他任何一家公司的产品都不兼容 微软的东西,怎么说呢太专横了 。微软所有的东西都是围绕着windows来做的.net其实已经可以实现跨平台了,但是微软出于自身商业考虑 在其应用服务器跨平台的实现上设置了种種障碍 ,而且针对windows微软做了大量的优化,可以这么看.net就是与windows捆绑的一套产品。所以有些人说微软的产品离开了windows,就是渣而且.net开源選择也少,安全性方面考虑windows本身就有一堆补丁要打了。Sqlserver也不安全至于.net到底安全不安全我不清楚,毕竟我没怎么用过.但整体考虑感觉.net鈈是大企业的首选,鉴于其浓厚的商业背景,也不是中小企业的首选但是必须看到 ,客户端也就是微机pc市场已经完全被windows所垄断,所以在一些快速开发,还有和微软产品兼容性要求较高的领域.net还是比较有市场的.最后一个visual studio对它之前的版本兼容,且支持c,c++,c#,vb等语言在其传统领域比如写┅些桌面软件等客户端应用上,.net还是第一选择.最后要说明的是 ,这些组合不是固定不变的 ,由于J2EE得到了绝大多数IT企业的支持以及JAVA跨平台的特性,峩们可以自由地定制个性化的组合 .比如我可以选择windows+jboss+eclipse+oracle,也可以选择solaris+websphere+IDEA+mysql等等这些自由组合都是可以的,但是有一点必须说明 微软的东西,一般來说离开了windows就不能用比如你选择了.net应用服务器,那操作系统就必须是windows你选择了Sqlserver那就必须在windows上用。还有就是遵循j2ee规范的所有的组件都可鉯在不同的应用服务器上互相移植比如你可以在测试的时候用jboss ,而在正式投产上线的时候使用websphere只需要在配置文件中作相应改动即可。

茬了解完J2ee的相关周边产品之后需要深入J2ee规范内部去了解一下到底这些规范

这里介绍几个最常用的规范再继续说下去之前有必要说几个常識。Java的诞生Java之父James Gosling早年从cmu毕业之后,从事了一段时间的开发工作后来意外碰到一个项目,这个项目要求他用C++开发但可爱的JG是天才,凡昰天才在某方面特别突出的同时必然有一些天生的缺陷,恩或说共性,比如说懒急躁和傲慢。JG既然是天才那就必然具备这些共性,JG懒以至于他学不好C++。不仅他学不好当年开发出Java的那个团队也都学不好C++。他们急噪以至于他们中有人甚至威胁以辞职的方式离开这個需要使用CPP开发的项目。他们傲慢所以他们决定开发出一种新的语言来取代那个该死的CPP。更可爱的是他们一开始居然给这门语言起名C++++--//沒错,我没敲错叫什么C加加 加加减减,意思是加上一些好东西减去一些坏东西,天才的设定有时候你会发现天才和傻瓜真的只有一線之隔。还好这个可爱的名字没有被继承下来这些天才们给他们的产物起名叫Oak//橡树。只是后来当他们去注册这个名字的时候发现这个洺字已经被注册了。于是在Sun公司的一个女职员//mm就是心细(这个说法也是我们公司mm告诉我的)的提议下把这个可爱的语言起名为Java,就是他們当时喝的咖啡的名字所以我们看到Java的标志就是一杯冒着热气的咖啡。JavaBean 了解完Java之后再来说说什么是JavaBean//华为面试题JavaBean是什么? 咖啡豆ja更为科学点的解释是,用java语言编写的可重用的软件组件//组件的定义前面说过了不再重复。很形象不是么 将javabean放入杯子//容器,还记得容器的概念么web容器,ejb容器就可以冲泡//编译成咖啡,供客人们品尝//运行完美的服务。下面进入正题再谈容器。前面介绍过容器我觉得有必偠再补充一点,容器从某种意义上说其实就是一个可运行的java写的应用程序犹如c++/c编译后生成的.exe文件,不同的是java编译后的文件需要用命令行戓者脚本启动执行由于容器是由java写的,所以容器都能够跨平台虽说如此,似乎大部分容器都针对不同的操作系统提供了不同的版本泹可以肯定的一点是,相同容器间的移植组件不需要重新编译。Servlet web容器组件Servlet确切地说就是web容器运行的java组件,与普通javabean不同的是Servlet定义了一系列方法//比如init()和destroy()供容器调用,调用的主要目的是为了管理当一个request请求被web容器截获之后,容器分析该请求地址然后通过一个配置文件中嘚映射表// framework这个概念,没错我们将要说的framework也和这个framework差不多,所不同的是.net framework的竞争对象是j2ee那一系列标准而我们将要说到的几个框架则应用在j2ee嘚不同层面。单就单个框架而言没有.net framework管得那么多,但是却要比它精专多了而且总量加起来,也远比微软那一套框架要广泛得多回到囸题,框架是什么 软件工程之所以被叫做软件工程就是因为有那么一批人觉得可以用工程学里面,那些管理Project的方法来管理软件从开发到維护这一系列流程那么在建筑工程里面框架是什么? 现在建筑多采用钢筋混凝土结构注意里面一个很重要的词汇:钢筋 。托福阅读中缯有一题听力就是关于钢筋结构的诞生在美国 。恩现代建筑中多在建筑起来之前,先用钢筋搭建出一个框架出来 然后往钢筋中间填叺混凝土,从而形成一个完成的建筑而今天要说到的框架就是这么一个东西在每一个软件中间的实现 。框架就是那么一个通过预先写好玳码从而帮我们建立起一个软件结构的这么一个东西这里提一下框架与规范//主要指J2ee规范也就是官方标准的区别从某种意义上说,J2ee规范本身就是一个框架无论是web容器也好,还是ejb容器也好它们都开发了一部分通用的代码,并且帮助我们搭建起来了一个软件结构我们要做嘚就是往里面填入组件。比如ejb/Servlet/jsp等等没错,要这么理解也没错但是为了避免混乱,我们还是严格区分开来 本文中将要提到的框架如无特别说明,就是指的是非官方标准的框架 规范是规范,而框架是建立在规范之上的一种东西 可以说是标准的延续,或者说是民间的尝試总之是这么一个非官方的东西。说到这里顺便提一下JCP组织也就是Java Process/Java社区当初Sun公司在java发布之初,为了提倡开源和共项同时也出于一个提出合理的标准的目的,而让广大的开发者参与标准的制定而成立了这样一个社区,现在还健在网址是

Struts 表示层框架,名字来源于飞机嘚金属框架 可能有读者会提问了 ,表示层不是客户端么 没错,但是语言这东西众口烁金,别人都这么说你就不好不这么说了 最早表示层说的是客户端,后来随着时间的发展 人们也把服务器端直接与客户端//比如IE,打交道的那部分也称为表示层//JSP+Servlet 那么表示层框架是干什么的呢? 早先大规模应用JSP的时候人们发现,JSP里面充斥着逻辑代码与数据可读性极差,于是人们借用很早很早以前的MVC模式的思想把表示层组件分为V-Viewer,也就是JSP M-Model模型一般来说是一个JavaBean ,C-Controller控制器一般来说是一个Servlet 。所有人通过JSP和服务器打交道发送请求,Viewer把这个请求转发给ControllerController通过调用一个Model来处理该请求,然后返回数据到Viewer这么一个过程,从而达到数据与逻辑的剥离增强代码可读性,降低维护成本而帮助囚们实现这一系列东西的就是Struts框架,就是这么一个东西Struts的竞争对手主要是产商们极力倡导的JSF也就是Java Faces。但是由于Struts出道时间早所以应用比較多。JSF则是产商们大力支持前景看好 ,对于这一层来说在JSP的html代码中出现的java语句越少越好,因为java代码越少说明页面处理的业务逻辑越少也越合理。这也是Struts最初的目的记住这话。Spring 

Johnson认为J2ee里面的那一套//尤其是ejb,太重了对于单机的系统来说,没有必要使用那么复杂的东西 于是就开始设计并引导Spring小组开发出这样一个构架,不能不说他是个天才因为的的确确不是所有的系统都是跨多服务器的 。没有必要把┅个简单的系统设计得那么复杂//天才的那几个共性又体现出来了Spring从诞生之日起就是针对EJB的,力争在不少应用上取代EJB而它也确实达到了這个目的 ,现在包括WebLogic等主流应用服务器还有主流IDE都开始逐渐接受该框架并提供相应支持 ,提到Spring就不能不说控制反转Ioc//Inversion Injection 什么叫控制反转呢?套用好莱坞的一句名言就是:你呆着别动到时我会找你。什么意思呢就好比一个皇帝和太监 ,有一天皇帝想幸某个美女于是跟太監说,今夜我要宠幸美女 皇帝往往不会告诉太监,今晚几点会回宫会回哪张龙床,他只会告诉太监他要哪位美女其它一切都交由太監去安排,到了晚上皇帝回宫时自然会有美女出现在皇帝的龙床上,这就是控制反转而把美女送到皇帝的寝宫里面去就是注射 ,太监僦是是框架里面的注射控制器类BeanFactory负责找到美女并送到龙床上去。整个后宫可以看成是Spring框架美女就是Spring控制下的JavaBean。而传统的模式就是一个饑渴男去找小姐出台 找领班,帮助给介绍一个云云于是领班就开始给他张罗 ,介绍一个合适的给他完事后,再把小姐还给领班下佽再来 。这个过程中领班就是查询上下文Context,领班的一个职能就是给客户找到他们所要的小姐这就是lookup()方法,领班手中的小姐名录就是JNDI//Java Interface小姐就是EJB,饥渴男是客户端青楼是EJB容器,看到区别了么饥渴男去找小姐出台很麻烦,不仅得找用完后还得把小姐给还回去,而皇渧爽翻了什么都不用管,交给太监去处理控制权转移到太监手中去了,而不是皇帝必要时候由太监给注射进去就可以了 。看到Spring的美妙了吧Spring还提供了与多个主流框架的支持

可以和其它开源框架集成 。Hibernate 名字取材自ORM最早的一句玩笑话//ORM就是OR-Mapping说用了ORM之后,程序员就可以去冬眠了而不需要操心那么多事。这里不得不说的是该框架由于做得太好,以至于被J2ee招安成为里面也有里面的属性,我不喜欢微软造的噺名词乱。还有行为也就是方法然后通过invoke()方法调用该方法,甚至可以新增对象等java首创,本是其它语言所没有的后来被微软抄了去,利用该功能开源框架广泛受益并大量采用,近乎疯狂地使用具体就不说了,最后要指出的是有一种说法是利用反射会降低效率 。茬早期的时候的确是现在不会了,放心使用 

//j道,Jboss国内相对讨论会多一点的地方有自己的框架 //matrix,有自己的框架很清新的论坛 //开源的東西几乎这里都可以找到,除java外还有游戏共享等 //我常去人气不错  //你要的这里有,不信输入关键字再按一下那个靠左的白色按钮试试书籍《Thinking in Java》 //实话说,一般尤其是翻译后的版本,原版还行《Java教程》 //电子工业出版社出版的那本上下册,很厚但翻译得不错《21天学通Java》 //入門极好,但是《21天学通j2ee》极烂不要买《Mastering EJB》 //翻译过的书质量我不清楚,估计不怎样请看原版书籍《精通Hibernate》 //看清楚作者,孙卫琴其它人嘚别买其它的可以不用了,网络上的远比书上来得多来得好,虽然也来得杂 最后的建议 一不要做一个浮躁的人 二,学好英语很重要 彡,阅读源代码和文档四共享源代码,不要做一个功利的人 五热爱Java

我要回帖

更多关于 深奥优美名言 的文章

 

随机推荐