计算机等级 百分网手机站

Java语言的特点和实现机制

时间:2017-06-02 15:00:37 计算机等级 我要投稿

Java语言的特点和实现机制

  Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。下面是小编整理的关于Java语言的特点和实现机制,希望大家认真阅读!

  java语言定义:

  Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。

  Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

  组成:

  Java由四方面组成:●Java编程语言,即语法。●Java文件格式,即各种文件夹、文件的后缀。●Java虚拟机(JVM),即处理*.class文件的解释器。●Java应用程序接口(Java API)。

  Java分为三个体系,分别为Java SE(J2SE,Java2 Platform Standard Edition,标准版),JavaEE(J2EE,Java 2 Platform, Enterprise Edition,企业版),Java ME(J2ME,Java 2 Platform Micro Edition,微型版)。

  Java是功能完善的通用程序设计语言,可以用来开发可靠的、要求严格的应用程序。

  优点:

  指针: 任何一个学过C或者C++的人都知道指针的操作对于他们是很重要的,为什么,指针能够支持内存的直接操作,这样的直接操作能够带来的是效率上的提高.但是任何一个东西都是有副作用的,指针给程序员带了的混乱也是无可比拟的.对于一个不是很强劲的C程序员而言,指针是要命的(对我而言也是,我几乎不会写C代码).而JAVA就为我们省去了这样的麻烦,或者说JAVA完整的限制了对内存的直接操作,让程序员能够安心去搞业务逻辑,而不用管自己后院的那堆内存有没有人来收拾.

  垃圾回收: 其实垃圾回收也是JAVA对于内存操作的限制之一,也大大解放了程序员的手脚.但是也正是这样的一个内存保姆的存在导致JAVA程序员在内存上几乎没有概念...一个纯粹的JAVA程序员对于内存泄露这样的问题是从来没有概念的,因为他从来不用担心,因为大多数情况下即便他大手大脚也不会有什么问题,这样也就导致了JAVA一个很显见的缺点,我们后面会讲到. 这里我说点我想到的东西吧..其实JAVA并没有让程序员完全省心,他代办的事情也仅仅是内存罢了,其他资源的调用和释放都还是需要程序员自己来关心的,比如数据库,比如文件.当然了,我们不能指望什么都吃现成的,总有东西是要自己做的吧.

  平台无关性的真正意义在于程序的可移植性高,能够在多个平台平滑迁移。这点就特别适合网络应用。

  缺点:

  1效率

  这样一个问题伴随着JAVA的出身,一直困扰了我们可怜的JAVA宝宝很久,虽然他在自己长大成人以后不断地修炼自己,来改变这个问题.但是先天的就是先天的,哎.....让我说你什么好呢.....

  1.1当然首先就是内存操作限制带来安全的同时带来的副面效果了.....

  1.2 其次呢,就是面对对象的一个很重要的特点所带来的——多态,这个东西是娘胎里带出来的,谁也没办法,而且这个因素的“后果很严重”(我等下会讲我们的JAVA小朋友自己跟别人学了一招来解决这个问题)。但是不对啊,C++不也声称自己面对对象的嘛,这个问题他也有,你干吗非说我呢?来自JAVA的声辩。哈哈,这你就不如人C++圆滑了吧,人家的多态是编译器编译和连接时实现的,可你是运行时实现的,效率问题可见一斑了吧。

  JAVA小朋友想了很久,想了一招。。。我已经不记得他什么时候开始会这招了,但是他真的会,征对一些不会变化的程序,他就让大家可以用预编译来实现。其实这个事情也是C++真正做的。但是这样的一个解决方案就屏蔽了动态创建和连接的能力。这里还需要说明的是,这样的方法一般都运用在变化少而且对性能要求特别高的时候。毕竟如果不是面对大批量的处理和集中请求这样的问题,我们的硬件应该能满足这样的要求。

  1。3平台无关性带来的。由于需要平台无关,所以JAVA是不能直接调用OS的API的,JAVA需要调用自己的API来隐式地调用OS的API,大家可想而知这样的效果。多一层调用,必然多一层代码需要加载到栈内了。不过这个问题目前也有解决方案了吧。。。这个方面我不是很在行,只是看到一些资料而已,接触太少。比如JNI(Java Native Interface)

  2逆向编译问题

  确实是第一次听说这样的问题,天啊,没接触的东西还真的。这里就只能套书上的话了。

  由于JAVA程序是动态连接的,从一个类到另外一个类的引用是符号化的。在静态连接的可执行程序中,类之间的只是直接的指针或者偏移量,。相反地,在JAVA class文件中,指向另一个类的引用通过字符串清楚地标明了所指向的类的名字。如果引用指向一个字段的话,这个字段的名字和描述符会被详细说明。如果引用指向一个成员变量,这个成员变量的名字和描述符(方法的返回类型,方法参数的数量和类型)也会被详细说明。

  这有什么关系哦。。。。不过据说这样就能通过逆向编译一下子就把我原来的代码给搞到了。。。那我写了那么久不是太亏了嘛。。。这样看来。。。产权问题咯(呼呼,上升到法律了。。。西西,我喜欢)

  3 线程调度问题

  关于线程调度,说老实话,我在学操作系统的时候,所有的线程问题都是在linux下用C去做的,原因第一是linux的线程API比较清晰,而且我受不了Windows的那些API的名构造。第2就是因为我觉得Java虽然是一个总进程下的多线程,但是线程间的调度没有非常的清晰,相比较而言,还不如直接调用操作系统的线程支持呢(虽然linux对线程级别支持也不是特别好,但是毕竟不是有包支持的嘛),记得当初的哲学家饥饿问题我最后算是用JAVA调配出结果了,可是到最后我自己都晕了。这些都是我个人的看法,也很可能是一些偏见,至于别人书上专业的解释是:由于为了能够支持多种系统的不同的线程支持策略,JAVA只能采取这样笼统而又松散的线程规范。

  其实优点和缺点是相对的,做过比较就知道,其实优点和缺点有时候正是同一个因素带来的.这也需要我们用唯物主义辨证原理来看待(我只是说唯物主义,没有国籍的那种).更多的时候我们需要在我们所需要的东西和我们为此需要付出的代价间作出正确的trade off.(操作系统老师最喜欢说的词).

  优劣势:

  java优势,是适合团队开发,软件工程可以相对做到规范,这是一个很难比拟的优势。

  java劣势,是j2ee的架构很完美,第一版软件可以做满意,但是很不适合互联网模式的持续不断修改。互联网软件工程管理上的不足,持续的修修补补导致架构的破坏。系统更新需要重启web服务,很难接受。

  特点:

  语言特点

  Java 编程语言的风格十分接近C、C++语言。Java是一个纯粹的面向对象的`程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

  Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。

  主要特征

  Java语言是简单的。Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。

  Java语言是面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C++语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。

  Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

  Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。

  Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。