第1章:Java语言基础
1.Java概述
1.4 Java语言特征
Java是一种“简单、面向对象、分布式、解释型、健壮、安全、体系结构中立、可移植、高性能、多线程和动态”的编程语言。
(1)简单性
语法大部分效仿C++,但功能有所提升,且使用更简单
- Java去掉指针,取消多重继承和运算符重载
- Java设立自动内存分配与回收机制
(2)面向对象
- Java对象有模块化性质和信息隐藏能力,满足封装要求
- 支持继承
- 通过继承、抽象类与接口的方式支持多态
(3)分布式
分布式计算涉及到多台计算机通过网络协同工作
- Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便地访问其它对象。
(4)鲁棒性
- Java在编译和运行时,都对可能出现的问题进行检查,以消除错误的产生。
- 通过集成的面向对象的异常处理机制,在编译时,Java提示出可能出现但未被处理的异常。另外,Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时出现不匹配问题。
- Java提供自动垃圾收集来进行管理,防止程序员在管理内存时容易产生的错误。
(5)安全性
- Java不支持指针,一切对内存堆区的访问都必须通过对象的实例变量来实现。
- JVM采用的是**“沙箱(Sandbox)”**运行模式,即把程序代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存。
(6)体系结构中立(平台无关性)
- 只要安装了Java虚拟机(JVM),编写的程序就可以在不同的平台上运行。(“编写一次,到处运行”)
(7)可移植性
- 与平台无关的特性使Java程序可以方便地被移植到网络上的不同机器,而不必重新编译。
- Java的类库中也实现了与不同平台的接口,使这些类库也可以移植。
- Java编译器是由Java语言实现的,Java运行时系统由JVM实现的,这使得Java系统本身也具有可移植性。
(8)解释执行
- Java程序被编译成JVM字节码(bytecode)。字节码不依赖于机器硬件配置,并可运行于任意安装了Java解释器的机器上,Java解释器直接对Java字节码进行解释执行。
- 字节码本身携带了许多编译时信息,使得连接过程更加简单。
(9)高性能
- Java的执行性能一直饱受非议,其字节码的执行效率无法与编译后执行语言,如C和C++媲美;但随着JVM的不断升级和机器硬件配置的提升,Java程序的整体表现已大为改观。
- 和其它解释执行的语言如BASIC不同,Java字节码的设计使之能很容易地直接转换成对应于特定CPU的机器码,从而得到较高的性能。
(10)多线程
对多线程的理解:例如,五个人同时做桌子,分别做桌面、四条腿。
- Java将多线程编程集成于Java环境中,而很多语言都是需要调用操作系统级别的特定过程才能支持多线程。
(11)动态性
- Java 的设计使它适合于不断变化的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。
- Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。
- 动态绑定(多态):在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
1.6 Java语言与C/C++的比较
- Java中不允许在类之外定义全局变量,而只能通过在类中定义静态变量来实现;
- Java中没有goto语句;
- Java中没有指针型变量;
- 内存管理实现了自动化;
- Java对于不同的数据类型定义统一的规格,保证了平台无关性;
- Java不允许像C/C++中那样任意进行类型转换;
- Java中无头文件;
- Java中无结构体和联合;
- Java中无预处理和宏定义;
- 关于多重继承:
- C++中,一个类可以继承多个基类,若这两个基类又有重复部分,则重复对子对象增加了存储空间,同时又引入了二义性。为此C++中有如下解决方案:
- 向上转型
- C++中对virtual赋予新的含义,以virtual的方式继承一个基类,多重继承期间只会出现一个虚基类子对象。所以在地址回溯中不会产生二义性。(用内部的机制,使得向上转型不会出现问题)
- 新类调用函数时,实现体选择
- 若两个基类对同名函数有各自的定义,则新类在继承的时候会出现冲突,为了解决这种冲突,一旦出现这种情况,必须在新类中对该函数进行重新定义。
- 向上转型
- Java中,用接口实现多重继承。
- C++中,一个类可以继承多个基类,若这两个基类又有重复部分,则重复对子对象增加了存储空间,同时又引入了二义性。为此C++中有如下解决方案:
1.7 类库与API文档
Java SE API是一整套用于实现各种基本功能和其它某些常用功能的Java编程的标准库,其中提供了各种各样的类来实现其语言功能。
2.Java程序与运行机制
2.1JDK与JRE
- JDK(Java SE Development Kit)是Oracle(SUN)公司开发的Java编程工具包,可以从Oracle公司主页上免费下载 。其中:包括编译器javac、解释器java、调试器jdb、反汇编器javap、文档管理器javadoc、Applet预视器appletviewer、类文件打包器jar等。
- JRE(Java SE Runtime Environment) 是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
2.2编译和运行
源文件(xx.java)-(编译)->字节码文件(xx.class)-(解释执行)->结果
C:\>javac SimpleApp.java //编译
C:\>java SimpleApp //执行(不用带.class后缀)
Java Application程序初步
- Java源文件以“.java”为扩展名。源文件的基本组成部分是类(class)
- 一个源文件中最多只能有一个public类(主类),而其他的类的个数不限。如果源文件包含一个public类,则文件名必须与该类名一致。
- Java应用程序的执行入口是main()方法。它有固定的书写格式:public static void main(String args[]) {…}
程序常用结构
- package语句:该部分至多只有一句,必须放在源程序的第一句。
- import语句:必须放在所有的类定义之前。
- public class Definition:公共类定义,至多一个。
- class Definition:非public的类定义,可有0或多个。
- interface Definition:接口定义,可有0或多个。
2.3 Java运行机制
Java程序运行的五个阶段:编辑、编译、加载、验证、执行
Complier:编译器;Interpreter:解释器;
(1)Java运行时系统
Java运行时系统(Java Runtime System)是运行Java字节码的系统,其任务是装载程序运行时需要的类、安排程序运行中对内存的使用,并且控制字节码的执行过程。
(2)Java虚拟机
- JVM是一个规范的能运行Java字节码的操作平台,定义有指令集、寄存器组、栈结构、垃圾收集器、存储区等五部分逻辑器件,并详细地规定了这些组件的规格。
- Java虚拟机的实现方案有两种,既可以用软件实现,也可以用硬件即Java芯片实现。目前的Java系统都是用软件实现的。
(3)几种典型语言与Java语言执行过程的比较
4.Java编程参考
Java编程规范
- 包名:小写,中间由点分开,例如:
java.awt.event; - 类名:首字母大写,后续字母也大写,例如:
class HelloWorldDemo - 接口名:与类一致,例如:
interface Collection - 方法名:第一个单词首字母小写,后续单词首字母大写,例如:
isButtonPressed - 变量名:第一个单词首字母小写,后续单词首字母大写,例如:
userName - 常量名:全大写,例如:
int YEAR
Java学习资料
- Java的有关网站或社区:
http://gceclub.sun.com.cn Sun中国技术社区
http://www.cjsdn.net 中国Java技术开发网
http://www.cnjavaclub.com 中国Java俱乐部
http://www.java-cn.net Java中文站
http://www.open-open.com Java开源大全
http://hi.baidu.com/shadouyou/blog/item/a868912624c73f148b82a165.html Api文档下载 - 书籍和杂质:
Bruce Eckel:《Thinking in Java》(Fourth Edition)
James Gosling:《The Java Programming Language(Third Edition)》(有翻译版)
陈昊鹏 译《Java编程思想》
《Java World》(http://www.javaworld.com)
《Java Developer’s Journal》(http://java.sys-con.com )
5.Java8和Java11的新特性
Java8的新特性
- Lambda表达式
- 接口的默认方法和静态方法
- 方法引用
- 重复注解与注解应用拓宽
- 参数名称和类型推断
- 实用新类库的扩展
- JavaScript引擎、Base64、并行数组
- 类依赖分析器:jdeps
Java11的新特性
- 本地变量类型推断
- 字符串加强
- 集合加强
- Stream 加强
- Optional 加强
- InputStream 加强
- HTTP Client API
- 化繁为简,一个命令编译运行源代码