前言:
“Write Once ,Run Anywhere. "一次编写,到处运行!"
众所周知Java是一门优秀的OOP语言,最著名的两点,它具有“一次编写,到处运行!”的特点,它实现了热点代码检测和运行时编译及优化。
Java在设计的时候其实是在尽可能的接近C++语言,但是剔除了C++中许多很少使用、难以理解、易混淆的特性,例如多线程和指针,但并不是说Java没有指针了,事实上,Java的指针操作都被底层代码封装了。所以可以说Java语法是C++语法的一个“纯洁”版本。 简单的另一方面是小。Java的目标之一是支持开发能够在小型机器上独立运行的软件。Java Card和Java ME都取得了了不起的成就。同时Java提供了丰富的类库和API文档以及第三方开发包,Java的垃圾自动收集机制也大大简化了我们的工作量。
面向对象设计是一种程序设计技术。他将重点放在数据(即对象)和对象的接口上。 万物皆可对象。语法中不能在类外面定义单独的数据和函数,也就是说,Java语言最外部的数据类型就是对象,所有的元素都要通过类和对象来访问。
Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网路上的对象,其便捷程度就好像访问本地文件一样
Java程序设计的目标之一在于使得Java编写的程序具有多方面的可靠性。Java投入了大量的精力进行早期的(编译时)问题检测、后期动态的(运行时)检测,并消除了容易出错的情况。最大的使用使用体验就是Java编译器能够检测出许多,其他语言在运行时才能够检测出的错误。 Java和C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能。让我们和指针BUG导致的内存冲突问题说拜拜。
Java适用于网络/分布式环境。为了达到这一目标,在安全方面投入了很大精力。使用Java可以构建防病毒、防篡改的系统。 Java语言删除了类似C语言中的指针和内存释放等语法,有效的避免了非法操作内存。Java代码要经过代码校验、指针校验等很多测试步骤才能够运行,所以一般来说未经允许的Java程序不可能出现损害系统平台的行为。
编译器生成一个体系中立的目标文件格式(.class文件),这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以动态地翻译成本地的机器代码。 没错上面就是在讲虚拟机,Java虚拟机在千差万别的物理机上面建立了统一的运行平台,实现了在任意一台Java虚拟机上编译的程序,都能在任何其他Java虚拟机上正常运行!
与C/C++不同,Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关运算都做了明确的说明。 也就是说Java程序具有与体系结构无关的特性。可以方便地移植到网络上的不同计算机中。同时,Java的类库中也实现了针对不同平台的接口,使这些类库可以移植。
运行Java程序需要解释器,Java解释器可以在任何移植了解释器的机器上执行Java字节码。字节码独立于平台,它本身携带了许多编译时的信息,使得连接过程更加简单,开发过程更加迅速,更具有探索性。
Java编译后的字节码是在解释器中运行的,所以它的速度较多数交互式响应程序提高了很多,另外字节码可以在程序运行时被翻译成特定平台的机器指令,从而进一步提高运行速度。
多线程机制能够使应用程序在同一时间并行执行多项任务,而且相应的同步机制可以保证不同的线程能够正确地共享数据。多线程可以带来更好的交互响应和实时行为。
从各种角度看,Java与C/C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由地添加新方法和实例变量,而客户端却不需要任何更改。在Java中进行动态调整是非常简单和直接的,在Java中找出运行时类型信息也十分简单。
我们可以把Java程序设计语言、Java虚拟机、Java类库这三部分统称为JDK,JDK是用于支持Java程序开发的最小环境。
我们可以把Java类库API中的Java SE API子集和Java虚拟机这两部分统称为JRE,JRE是支持Java程序运行的标准环境。
因为作者使用的是JDK 8因此我们只做介绍到该版本,以后会有专题来讨论更新的JDK版本的特性。(将有专题介绍JDK8的各种骚操作)
版本 | 年份 | 语言新特性 | 类与接口数量 |
---|---|---|---|
1.0 | 1996 | 语言本身 | 211 |
1.1 | 1997 | 内部类 | 477 |
1.2 | 1998 | strictfp修饰符 | 1524 |
1.3 | 2000 | 无 | 1840 |
1.4 | 2002 | 断言 | 2723 |
5.0 | 2004 | 泛型类、“for each”循环、可变元参数、自动装箱、元数据、枚举、静态导入... | 3279 |
6 | 2006 | 无 | 3793 |
7 | 2011 | 基于字符串的switch、钻石操作符、二进制字面量、异常处理改进... | 4024 |
8 | 2014 | lambda表达式、函数式接口、包含默认方法的接口、steam、Date/Time API... | 4240 |
作者现在使用的IDE是IDEA,以前也用过eclipse和myeclipse,我推荐大家使用IDEA,使用体验真的很好!
public class HelloWord {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Continue