Java学习 第1章 概述
前言
近期为了找工作面试以及比赛的需要,学习Java,本打算先把C++学精再学习Java,然而,很多工作都是跟Java相关,顺便点一下技能吧(话说C++真的可以学精么?=。=)。
关于Java,从大家的发言中感觉似乎不像C++那样有很多经典的书,《Java 核心技术》以及算相当不错了,所以买了一本。 然而,不幸的是即使买的最新版也是Java SE7标准,而Java 8标准改进很大,尤其是lambda函数式编程。所以配给该作者的最新著作《Core Java for the impatient》2015 完善Java 8的相关知识。不多说了, Let’s go!
Java的几大特点
1)简单性
Java设计之初融入很多C++的语法,这样有利于学过C++的程序员学习Java 同时也剔除了C++中很少用或者晦涩的语法,相当于纯净版的C++。 当然,由于向后兼容,Java在完善的过程中(现在已经Java 8了),必定有些语法被证明不好使,于是成为累赘。
2)面向对象
Java与C++面向对象不同点在于,C++的多继承,Java取而代之的是接口的概念, 以及Java的元类(metaclass)模型
3)网络技能Network-Savvy
Java有一个扩展的例程库,处理HTTP、FTP之类的TCP/IP协议。 网络能力强大而易于使用,将socket连接这类繁重的任务变得简单。 而远程方法调用机制使得分布式对象之间可以进行通信。
4)健壮性
Java投入大量精力进行早期问题检测、后期动态(运行时)检测。 Java和C++最大的不同在于Java采用的指针模型可以消除重写内存和破坏数据的可能性。
这一特性非常有用,Java编译器可以检测许多其他语言仅在运行时才能检测出来的问题。
对于有指针的语言,比如C,处理诸如存取字符串、数组、对象、文件等很繁杂,且指针很容易带来安全问题; 而对于没有指针的语言,例如VB,许多数据结构难以实现。 Java则兼具两者优点: 它无需指针就能构造字符串、数组这样的结构,必要时也可具备指针的能力,例如链表。
5)安全性
JDK因为开源,加上发现bug的技术越来越强,蒙骗Java的安全机制十分困难。 Java 1.1就有了数字签名类(digitally signed class)的概念。 通过该类确定类作者,如果信任作者,这个类将拥有更多权限。 这比起微软的基于ActiveX更好。
6)体系结构中立
Java跨平台是通过: Java先编译为与体系结构无关的字节码,然后通过Java虚拟机解释。 由于有解释步骤的存在,较C++这样直接编译的语言要慢。 不过,通过即时编译JIT(Just In Time)可以有效提高速度。 JIT思路是将最频繁使用的字节码序列翻译成机器码。 一致微软也用.NET模仿。
虚拟机的另一个优点是安全性,它可以检测指令序列的行为。
7)可移植性
一次编译,全平台运行是Java的一大宗旨。
因此其有很多针对可移植性的特性, 例如int对任何平台都是32位的。
Java中数据类型都有固定大小, 二进制数据以固定格式存储和传输,消除有无符号、大小端的困扰。 字符串用标准Unicode格式存储。
其实现主要是通过统一接口,将底层实现与应用分开。 底层针对不同平台处理,而上层调用接口则不需要关心这个。
8)解释性
即使用即时编译器将字节码翻译为机器码。
9)高性能
有些对性能要求极高的场合可以将字节码快速翻译成该机器的特定机器码。
现在的即时编译器已十分出色,甚至某些方面超越传统编译器。 其原因是其含有更多可用信息。
例如即时编译器可以监控经常执行的代码,并优化这些代码以提高速度。 更为复杂的优化是消除函数调用,即inline。 即时编译器能判断正在运行的函数是否可以inline,必要时也可以撤销优化。
10)多线程
Java对多线程的处理十分简单。 这也是用Java的理由之一,用于并发程序,Java提供线程安全的数据结构。
11)动态性
当需要将某些代码添加到正在运行的程序中时,动态性非常有用。 这对于需要运行时分析对象的系统而言非常有用。
Java applet
想法很简单:用户从Internet下载Java字节码,在自己机器上运行。 在网页中运行的Java程序成为applet。 为使用applet,需要运行在启用Java的浏览器上。
用户下载一个applet相当于网页中嵌入一幅可交互的图片。 它可对用户命令做出响应。实现了多态网页。 然而,似乎已过时,更流行的是JavaScript。