前言
学习Java有一段时间了,但是一直缺少一个系统的思想,现在重新通过书籍中、网上的文章,视频等资料,整理与回顾Java的知识点。
言归正传,让我们先从了解Java语言开始。
Java语言的由来
Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。另一方面,Java技术也不断更新。Java自面世后就非常流行,发展迅速,对C++语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。[引用自百度百科]
Java语言的特点
优点
1、简单。
Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性。去掉了C和C++中许多复杂功能,如指针、操作符重载、多继承、自动的强制类型转换,没有goto语句,没有struct和union等。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
2、面向对象。
面向对象可以说是Java最基本的特性。Java语言的设计完全是面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。所有的Java程序和applet均是对象,Java支持静态和动态风格的代码继承及重用。它比C++更彻底,纯度更高。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。
3、跨平台性。
与平台无关是 Java 语言最大的优势。其它语言编写的程序面临的一个主要问题是 操作系统的变化,处理器升级以及核心系统资源的变化,都可能导致程序出现错误或无法运行。Java的虚拟机成功地解决了这个问题,Java编写的程序可以在任何安装了 Java虚拟机 JVM 的计算机上正确的运行,Sun公司实现了自己的目标 “一次写成,处处运行”
具体表现为:
- 结构中立:Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件),然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。
- 可移植:这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。
- 解释型:Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。
4、健壮的。
Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。
5、安全性。
作为网络语言,安全是非常重要的。Java的安全性可从两个方面得到保证。一方面,在Java语言里,像指针和释放内存等C++功能被删除,避免了非法内存操作。另一方面,当Java用来创建浏览器时,语言功能和一类浏览器本身提供的功能结合起来,使它更安全。Java语言在你的机器上执行前,要经过很多次的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。另外,Java拥有多个层次的互锁保护措施,能有效地防止病毒的入侵和破坏行为的发生。
6、多线程。
在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable)的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。
7、动态的。
Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。
缺点
当然,所有的事情都不可能是完美的,有优点必然会有缺点。
1、效率:因为要先经过编译和垃圾回收机制等,所以速度比较慢!不适合大型的程序,网络游戏等的编程!
2、复杂性,正因为它的功能强大,因此也增加了其复杂性,像当今流行的框架有很多,什么struts,spring,jQuery等等,无疑增加了java的复杂性。
Java的运行机制
其他高级语言的运行机制
计算机高级语言按照程序执行方式可以分为编译型和解释型。
编译型语言是指在程序执行之前,首先会有一个单独的编译过程,针对特定的平台(操作系统),将高级语言翻译成机器语言,以后执行这个程序的时候,便可以直接运行,这样编译后可以脱离开发环境独立运行,效率也可以高一些。但也有一个缺点,那就是编译语言被编译成特定平台上的机器码,通常无法直接转移到其他平台运行,如果有需求,需要重新将源代码转移到特定平台,针对部分平台进行修改之后,重新编译。C/C++ 等都是编译型语言。
解释型语言是指在运行时才将程序翻译成机器语言,跨平台性较好,但不足之处就是每次执行都需要进行一次编译。相当于把编译型语言中的编译和解释的过程混合到一起同时完成。Ruby,Python等都是解释型语言。
Java程序的运行机制
Java语言比较特殊,Java语言编写的程序也需要经过编译步骤,只不过它并不是编译成特定语言的机器码,而是生产与机器无关的字节码(*.class文件)。这种字节码不能直接运行,需要经过Java解释器(JVM Java虚拟机)来运行。因此,Java语言是先编译,后解释,将这两个步骤分开。
JVM虚拟机
上面介绍到,Java程序将字节码运行需要JVM虚拟机,下面我们来认识一下它。
Java虚拟机,即JVM(Java Virtual Machine)。当Java编译器编译Java代码的时候,生成的是面向JVM的字节码,再由JVM面向各操作系统,因此使用Java语言编写的程序,实际上是运行在JVM之上,而不是运行在操作系统上。
它有一个解释器组件,可以实现Java字节码和计算机操作系统之间的通信。
JVM类似于一个抽象的计算机,和实际的计算机一样,它具有指令集并使用不同的存储区域。复杂执行指令,管理数据、内存和寄存器。
JAVA开发工具包JDK(Java Development Kit)
JDK是JAVA开发工具包的简称,是Sun提供的一套用于开发Java程序的开发包。它提供了编译,运行Java程序所需的各种工具和资源。包含Java编译器,Java运行时环境,常用Java类库等。
Java运行时环境Jre(Java Runtime Environment)
Jre是运行Java程序的必备条件,Jre包含JVM,JVM是运行Java程序的核心虚拟机,而运行Java程序不仅需要核心虚拟机,还需要类加载器,字节码校验器以及大量基础类库,而JDK还包含了开发工具,因此如果只需要运行Java程序,只需要安装Jre即可。
Sun把Java分为Java SE、Java EE、Java ME。
- J2SE(Standard Edition):标准版,适用于普通应用程序的开发;
- J2EE(Enterprise Edition):企业版,适用于大型企业级应用程序的开发;
- J2ME(Mirco Edition):微型版,适用于移动设备或嵌入式设备的程序开发。