浅谈JAVA

首先说明一下:下面这篇文章是我写的一篇论文,随便应付老师的,反正写也写了,就把它贴出来了,写得不怎么样啊,如果看客要拍砖就拍吧,我虚心接受了!

 

 

先说什么是 JAVA

JAVA 有SUN公司开发的新一代纯面向对象的网络编程语言。其目标是建立一种在任意一种机器、任意一种操作系统的网络环境中运行的软件,实现所谓的“程序写一次,到处运行”的目标,正因为如此,JAVA已成为当今Internet上最流行的、最受欢迎的一种程序开发语言。

在说JAVA语言的特点

JAVA语言是由C++语言发展而来的,是一种彻底的面向对象的程序设计语言。作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。JAVA语言去掉了C++语言的一些容易引起错误的特性。JAVA的特点主要有:1、面向对象;2、跨平台;3、安全性;4、多线程;5、图形功能强。对于JAVA的特点我也不多做介绍了,下面直接进入主题:

本人学习JAVA也有一年了,虽然谈不上是个高手,但是至少可以说是入了门了。对JAVA也有了一定的了解,当接触越来越久后,慢慢的对它的某些方面也有了些自己的看法!

JAVA开发小组把JAVA按特性分为基本版、移动版和企业版三个版本,每个版本都有一个对应的开发包,这三个版本的简称为:J2SE、J2ME、J2EE,不过对于J2EE,现在已经不这样叫了,而是被叫做:JAVA EE或JEE。

J2SE,JAVA2标准版。对于进行基础性的学习,使用这个开发包就足够了。每个JAVA程序员入门都是从J2SE开始,一些基础性的语法和面向对象思想我就不说了,我来谈谈一些我目前所认识到的用JAVA语言进行一些基础应用开发的优、缺点!

首先当然是跨平台性和安全性。用JAVA语言开发的应用程序的跨平台特性可以说是一个亮点,它的跨平台的特性得益于它的运行环境:JVM。刚刚接触JAVA,那首先得弄明白的就是JVM,即JAVA虚拟机,不管你用JAVA语言写的什么程序,都必须有JVM才能运行,否则这些程序什么都做不了。JVM的一个最大的贡献就是使JAVA拥有了跨平台的特性,另一个特点就是安全,这安全包括对于运行JVM的操作的系统来说的安全和对于运行于JVM内部的程序的安全。JVM的这两个优点是我最看好的。我个人认为JAVA现在的应用得这么广泛,很大程度上都是因为它的跨平台特性,以及它的安全性。对于跨平台是亮点,这是因为传统的软件往往都是与具体的实现环境有关,换一个环境就需要重新做一次变动,造成人力和财力的浪费,而JAVA语言在执行码上兼容。对于安全性,当今计算机界最大的隐患应该算是安全隐患了,JAVA将重点用于网络/分布式运算环境,确保建立无病毒且不会被病毒入侵的系统。内存分配及布局有JAVA运行系统决定,字节码验证,可以轻松构件出防病毒、防黑客的系统。JAVA的跨平台性和安全性确实很吸引眼球,但是这也就并不意味着没有限制,JVM有优点,自然也会有缺点,这些我都放到后面再说。

然后便是多线程。当今,一些基本的应用程序的开发都离不开线程。对于C、C++这两中开发语言,要实现多现成应用程序的开发是比较困难的的,实现多线程要花比较多的精力。而JAVA开发语言则不同了,用JAVA开发多线程的应用程序是非常方便的,你只需将自己写的类继承Thread类或者实现Runnable接口即可方便的实现应用程序的多线程机制。这不仅提高了开发效率,而且能够让程序员的精力放在其他的逻辑开发上。而对于其他的语言,可就没有这种优点了。而且JAVA的Thead类实现了很多功能,差不多一些线程需要用到的功能都有了,比如说线程间的同步、线程阻塞、线程唤醒之类的操作,这对线程的操作是非常方便的。

再者是网络编程。首先这里的网络编程主要指的是套接字编程,而不是WEB编程。进行网络编程,不可避免地要使用套接字对消息进行接收和发送。JAVA

语言在这方面的支持是很好的,跟它的多线程一样,使用也是非常方便的,要实现各种数据的接收与发送功能都是比较快捷的。因为JAVA提供的一些类把很多数据传送功能都封装起来了,你只需要会调用就好了,而不像C、C++那样,要实现数据的传送与接收都是非常烦琐的。

最后是桌面应用程序界面的开发上的优点。相信开发过桌面应用程序的人都知道,一个应用程序的界面开发是很重要的一部分,这其中涉及到界面的设计、布局、各种元素的搭配等等。桌面应用程序的界面无非就是由按扭、菜单、输入筐、提示筐等元素组成。而恰好JAVA对这些元素都有相应的类进行封装了,只要会使用类所提供的各种方法就好了,根本不需要过多的去自己写一些扩展类来实现逻辑功能。这都得益于JAVA的完全面向对象思想。

为什么我敢于这么直接地就肯定上述的几个有关JAVA开发语言的优点呢,这都是从实践中得来的经验。

C语言,我想每个编程的人都会,它对于实现上述几个功能的难易程度应该比我还清楚的,这点就不用我来说了吧。而对于C++这门语言,可能还真有程序员没有用过,或是没有深入的用过,这里的深入指的是开发多线程应用程序和网络程序啊,不是那种开发什么操作系统的深入程度。我自己也没有达到这么深的功力。

本人不才,用C++开发过简单的单机小游戏和网络游戏,用JAVA开发过类似于QQ游戏的游戏,但对于多线程和网络编程都应用上了。在我用C++开发单机游戏的时候,要实现多线程机制,那可是真的很麻烦的,或者是说我哦自己功力不够深厚的原因吧,当我实现了多线程机制后,我才发现,开发这个单机游戏的大部分精力都是花在多线程的分析上了,而不是用在这个游戏的运行过程的逻辑分析上。在我用C++开发网络游戏的时候,除了多线程的处理外,我还要用套接字对数据的接收和发送,为了实现网络对战游戏中双方数据的同步,我还得把多线程机制与套接字组合起来。当时也确实花了很大的功夫在这方面,而对战游戏的逻辑分析却没有花多少时间。

在我接触JAVA不久后,我便开始用这门语言开发客/服模式的多人参与的网络游戏了。在开发过程中,主要的精力当然是花在了对游戏的逻辑分析上了,这都得益于上述我说的关于JAVA的几个优点了,线程的应用、套接字的应用、游戏界面的设计所用到的元素等都很好得提高了我的开发效率。首先,在这款网络游戏里,很多地方都要自己实现多线程机制是毋庸置疑的了,比如说计时、数据同步等基本的功能就得用多线程机制才能很好的实现了。而且在这方面也是很关键的,因为很多逻辑处理也都是在多线程机制中实现的,如果没有多线程的好支持,那么我不知道这款网络游戏要花多就才能开发出来。由于是网络游戏,当然就得用到套接字了,JAVA对套接字的支持上也是非常好的,使用起来真的很方便,这点我之前也有介绍了。还有就是在游戏界面的开发上,很多人都说JAVA不适合做桌面应用程序的开发的一个重要原因就是它对所见即所得的开发方式没有好的开发工具来支持,但是我想说的是,这并不是JAVA的缺点,对于我来说,用代码直接编写出界面来远比用拖拖拽拽画出界面来的得快,虽然说C++在开发应用程序界面时有VC6.0做很好的支持,但是它也不是那么方便,至少对每个控件的事件的捕获与处理上就没有JAVA在这方面的支持好了。

经过用JAVA开发一些应用程序后,我看到了JAVA语言的一些优点,当然,它的一些缺点也呈现在我的面前。在介绍完我认识到的JAVA的优点后,下面开始介绍我认识到的JAVA语言的缺点。

我在介绍JAVA语言的优点的时候首先介绍的是它的跨平台特性,同时也留了个问题就是有关它跨平台的一个限制。这就是我想说的关于JAVA语言的第一个缺点,都说JAVA是跨平台的,具有平台无关性。其实这个都省去了对于JAVA跨平台的一个至关重要的基本,那就是,JAVA跨平台并不是没有任何前提条件的,这个条件就是:JAVA应用程序所运行的平台上必须安装了JVM。如果没有了JVM,那这个跨平台特性就是空中楼阁,当前还没坠落,当坠落是必然的。所一我想说的就是,对于JAVA的跨平台特性,其实其他的程序开发语言也可以实现跨平台功能,也只需要一个虚拟机而已。到时所有的语言都具备了跨平台特性,那JAVA的跨平台特性将不再是它的优点。

接下来,我要谈谈JVM的缺点。首先我来做个比喻,把JVM所运行在的操作系统比做水,把JVM比做鱼。那么,我要阐明的观点就很明确了,当水干涸后,鱼也就死掉了。同理,若没有操作系统对JVM进行支持,那JVM还能生存吗,没有了JVM,JAVA还能生存吗。很明了,若是没有了操作系统,那么JVM也就没有用武之地了,JAVA也就活不成了。

JVM还有个致命的弱点就是:内存消耗问题,虽然说现在在硬件上一点点内存消耗是很小的事,但是如过在内存一定大小的情况下,有一个系统可以用两种方案来实现,其中一个是内存消耗少相对来说小的,而一个是内存消耗大的,那么对于客户来说,当然是选择内存消耗量小的这种实现方案了,而对于这种情况,有人又要说了,虽然用JAVA语言来实现这个系统在内存消耗上会大点,但是它是跨平台的啊,那我想说的是,确实,它是跨平台的,但是,如果这个客户并不需要跨平台的特性呢!JVM的内存消耗很大,这是众人皆知的事实,那它为什么会这么耗内存呢,这就得提提JAVA的内存管理了,根据JAVA程序员的开发经验来说,JAVA开发应用程序是不需要程序员自行管理程序内存的,内存管理都是由JVM来进行的,而这就是问题的根本所在了,JVM是怎么管理内存的呢?根据JAVA的相关文档可知,JVM能自动地判断出对象是否还在使用,并在对象不再使用时释放掉对象所占的内存资源,这便是JAVA的垃圾收集,JAVA的垃圾自动收集操作以比较低的优先级运行,比较费时,一般它在系统空闲时才进行,JAVA的垃圾收集也可以在程序中调用方法system.gc( )在任何时间请求进行,但JVM还不一定响应这种请求,或者说是它根本就不会理会程序员要求收集垃圾的命令,JVM进行垃圾回收时都是在系统比较空闲的时候才进行的,而我们所开发的应用程序又有多少时候是空闲的呢。总没有人希望自己开发个网络游戏没人玩吧,当然是同时在线的人越多越好嘛,当同时在线的人多了,你说这系统还会空闲吗,当然是非常繁忙了,所以JVM想要回收垃圾当然也没有机会了,谁让它要在系统空闲的时候进行垃圾回收呢。这应该就是JVM非常耗内存的原因吧!那这就跟它的这个缺点相呼应了,由于不能有空闲时间来回收垃圾,而系统又在不停地申请新的空间,这样,那有限的内存很快就会用完,最终不是导致操作系统死掉就是导致JVM因内存不足而死掉。

JVM的另一个缺点是关于它的启动速度的。众所周知,用JAVA开发的桌面应用程序启动速度是相当的慢的,其中的根本原因就是由于JVM的启动慢速度慢而导致的,这个我在之前也是不知道的,后面是从开发工具启动慢看出来的。因为JVM要运行,那它自己也会需要一定的物理内存,而这个最基本的物理内存大需求大小就直接关系到它的启动速度了,如果启动时所需的内存小的话,那操作系统很快就能给JVM分配出所需的内存供其运行,相反的,如果这个基本内存很大的话,那操作系统就要花一定的时间来为JVM分配空间了,这直接地就导致JVM启动慢。而由JVM启动慢的缺点有直接导致了JAVA的下面提到的这个缺点。

用JAVA语言开发过桌面应用程序的人都知道其效果并不好,而最大的原因就是应用程序启动慢。所以,关于JAVA的另一个缺点就是,不适合开发桌面应用程序,而导致这样一个结果的原因并不是很多人所提到的JAVA开发桌面应用程序的开发效率不高,JVM启动速度慢才是J2SE桌面应用程序的真正杀手!我自己开发过桌面应用程序,在这方面是深有体会的。就拿我那个网络游戏来说吧,当我把游戏发布到局域网时,最多的负面回应就是启动速度慢,这不是我的游戏本身的问题,因为在配置好一点的电脑上活电脑上没有运行其他大型应用程序的情况下,游戏的启动速度还是很可观的。而对与那些启动慢的用户来说,他们的第一个想法就是,应用程序有问题,或者是启动失败了,可是过一阵子突然又冒出窗口来了,这当然就更加导致用户不再想使用该应用程序了,既而JAVA的桌面应用也就变得不广泛了,所以JVM的启动速度慢才是J2SE桌面应用程序的真正杀手!

上述是我认识到的关于JAVA也可以说是关于J2SE的一些优点和缺点,当然,对于其优点,我希望能更好的发展下去,而对于其缺点,我还是希望能有一些解决方法的。根据上面所提到的缺点,很明显,直接或间接地都与JVM有关系。因此,我对JAVA应用程序的运行机制有个人的看法:应该让JVM与另一中编译软件共存!JVM有了,但是另一中编译软件是什么呢?这里我所指的是具有与其他程序语言的编译软件具有相同功能的编译软件,也就是能有将JAVA代码编译成机器码而不是现在的字节码的编译软件,而这种软件比较好开发出来的,它其实只需要将JAVA代码编译后生成的字节码再编译成机器码就好了,这样既没有破坏JAVA的跨平台特性,而由JAVA开发的桌面应用程序的运行速度也提高了,因为它可以脱离JVM而运行了!

在介绍完JAVA2的标准版J2SE后,我来谈谈JAVA2的企业版,JAVA EE。其实我现在对JAVA EE也只是入门而已,不过还是有一些自己的看法。其实,在当今社会,谈到JAVA并不仅仅指的是JAVA程序设计语言,谈到JAVA EE 也不仅仅是指WEB开发。JAVA EE的应用非常广泛,由于本人还没有上升到那个高度,那就自己的能力谈一谈当前稍微熟悉的一点入门级的JAVA EE了。

首先来谈谈JAVA EE进行WEB开发所需要的最基本的技能。首先你得会servlet,当你开始接触JAVA EE进行WEB开发时,首先要学的也是servlet,但是由于servlet要返回给客户WEB页面,需要写很多的输出语句,这些语句都包含一些html代码,编写代码非常麻烦,这给程序员带来了很大的麻烦,为了解决这种困扰,jsp技术就得到了发展,因为jsp页面可以不包含一句JAVA代码,完全由标签和文本组成,它最终还是会编译成字节码,但是这个过程根本不需要程序员操心了。jsp技术的发展并没有使得servlet技术落寞,相反两者可以分工合作了:servlet主要处理逻辑部分,而jsp主要处理WEB页面表现部分。应用不停的更新,那技术也不能停止,后面有出来了javabean,其实javabean本质上只是一个JAVA类,并不是新的技术,但是其功不可没,javabean可以协助servlet进行逻辑处理,使得servlet的压力减小了,由于javabean的应用,servlet的功能也开始发生转变,其并不致力于处理核心业务逻辑了,而是致力于处理页面转向上。

伴随着WEB开发技术的发展的同时,WEB开发模式也同时地在发展,由两层模式发展到三层模式,再发展到多曾模式,其中不变的初衷是解偶,使程序员在开发过程中能把精力集中到其中的一层上,而不用在开发视图层时关心逻辑层的实现,或是开发逻辑层时用想到控制层的实现。为此,出现了很多优秀的开发框架。比如说struts、hibernate和spring等。这些框架都有各自的特点,都有不同的侧重点,struts侧重于页面表现层,而hibernate侧重于底层数据交互处理,而spring的侧重点比较广泛,其中包括IOC、AOP等。不可否认,这些框架都有很大的优点,但是也并不是没有缺点,我们要学会取其精华去其糟粕,使这些技术巧妙地结合在一起,共存合作。

由于本人接触JAVA的时间才一年,不是很久,对其认识就只有这么多了。最后希望JAVA能更好的发展下去!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值