coding……
但行好事 莫问前程

Java编程拾遗『Java概述』

Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

1. Java语言概述

任职于Sun的Jams Gosling等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的编程语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

Java编程语言的风格十分接近C++语言。继承了C++语言面向对象技术的核心,舍弃了容易引起错误的指针,以引用取代;移除了C++中的运算符重载和多重继承特性,用接口取代;增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。Sun对Java语言的解释是:“Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言”

Java是一门解释型语言,但不同于一般的编译语言或解释型语言的是,它首先将源代码编译成字节码,再依赖各种不同平台上的虚拟机来解释执行字节码,从而具有“一次编写,到处运行”的跨平台特性,通过各个平台的虚拟机来屏蔽各个平台的差异。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的运行速度有了大幅提升。

与传统类型不同,Sun公司在推出Java时就将其作为开放的技术。全球的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是 Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同,此外,微软公司后来推出了与之竞争的.NET平台以及模仿Java的C#语言。后来Sun被Oracle并购,Java也随之成为甲骨文公司的产品。

2. Java常规特性

2.1 跨平台性

跨平台性是java主要的特性之一,跨平台使得使用用Java语言编写的程序可以在编译后不用经过任何更改,就能在任何硬件设备条件下运行。这个特性经常被称为“一次编译,到处运行”。

执行Java应用程序必须安装Java 运行时环境(Java Runtime Environment,JRE),JRE包括Java虚拟机(Java Virtual Machine,JVM),以及Java平台核心类和基础Java 平台库。通过JVM才能在计算机系统执行Java应用程序。实现跨平台性的方法是大多数编译器在进行Java语言程序的编码时候会生成一个用字节码写成的“半成品”,这个“半成品”会在Java虚拟机(解释层)的帮助下运行,虚拟机会把它转换成当前所处硬件平台的原始代码。之后,Java虚拟机会打开标准库,进行数据(图片、线程和网络)的访问工作。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢很多。这就是传统的JVM的解释器(Interpreter)的功能。为了解决这种效率问题,引入了 JIT(即时编译) 技术

2.2 面向对象

面向对象是Java的另一大特性,是程序设计方法的一种,对于面向对象的准确定义及其本意存在着不少争论。与面向对象相对应的是面向过程,关于面向对象和面向过程的区别,这里举个简单的例子。我们每天去上班,要经历起床洗漱、坐地铁、到公司干活这是哪个步骤,那么用面向过程的思维要完成这个过程要这样,分别调用起床洗漱()、坐地铁(家,公司)、到公司干活()这三个方法。假如使用面向对象的思维,那么我的上班这一过程可以抽象为一个类GoWork,这个类中包含我上班需要的各个属性(比如时间,其实位置等),以及方法,上班的流程可以通过一个GoWork的实例对象来完成,对象.起床洗漱()、对象.坐地铁()、对象.干活()。很明显,面向对象的思想将具体活动抽象到一个类中,通过类实例调用方法,实现相应功能,相比于面向过程,带来的好处便是各个模块比较独立,方便维护。其实面向过程和面向对象没有绝对的优劣之分,只是两种编程思想。面向对象可以带来的好处是易维护、易复用、易扩展,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 。而面向过程的好处是性能相对较高,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发。

2.3 自动垃圾回收

C++语言被用户诟病的原因之一是大多数C++编译器不支持垃圾收集机制。通常使用C++编程的时候,程序员于程序中初始化对象时,会在主机存储器堆栈上分配一块存储器与地址,当不需要此对象时,进行析构或者删除的时候再释放分配的存储器地址。如果对象是在堆栈上分配的,而程序员又忘记进行删除,那么就会造成存储器泄漏(Memory Leak)。长此以往,程序运行的时候可能会生成很多不清除的垃圾,浪费了不必要的存储器空间。而且如果同一存储器地址被删除两次的话,程序会变得不稳定,甚至崩溃。因此有经验的C++程序员都会在删除之后将指针重置为NULL,然后在删除之前先判断指针是否为NULL。

Java语言则不同,上述的情况被自动垃圾收集功能自动处理。对象的创建和放置都是在存储器堆栈上面进行的。当一个对象没有任何引用的时候,Java的自动垃圾收集机制就发挥作用,自动删除这个对象所占用的空间,释放存储器以避免存储器泄漏。

参考链接:

  1. 《Java核心技术 卷Ⅰ》
  2.  面向过程与面向对象编程的区别和优缺点
  3.  面向对象和面向过程的区别

赞(0) 打赏
Zhuoli's Blog » Java编程拾遗『Java概述』
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址