# Java语言发展史
时间 | 版本 |
---|---|
1995年 | 美国Sun公司(Stanford University Network)在1995年推出的,作者James Gosling |
1996年 | Java 1.0 |
1997年 | Java 1.1 |
1998年 | Java 1.2 |
2000年 | Java 1.3 |
2002年 | Java 1.4 |
2004年 | Java 5.0(革新) |
2006年 | Java 6.0 |
2009年 | Oracle甲骨文收购Sun公司 |
2011年 | Java 7.0 |
2014年 | Java 8.0(普及) |
2017年9月 | Java 9.0 |
2018年3月 | Java 10.0 |
2018年9月 | Java 11.0 |
2019年3月 | Java 12.0 |
2019年9月 | Java 13.0 |
2020年3月 | Java 14.0 |
# Java版本
Java从9.0以后是6个月迭代,每年的三月和九月发布。除此之外Java 11.0有LTS(长期支持)。
# Java起源
Java最早是SUN公司设计出来的,主要是用于一个叫Green的嵌入式程序,目的是为家电开发一个分布式系统,通过网络对家用电器控制。在Green时,工程师最早想用C++,但是由于该语言的复杂性,开发出了Java,在2009年4月20日被Oracle以74亿美元收购。
Oracle一直以微软为对手,当时它们都致力于企业办公平台的技术支持,一个企业级系统开发核心有4个部分:操作系统,数据库,中间件,编程语言。Oracle收购了Java获得了庞大的开发群体,又收购了BEA,得到了Weblogic中间件,使得Oracle公司具备完善的企业平台支持的能力。
Java是一门综合性的语言,从最初设计就考虑了嵌入式系统以及企业平台的开发支持,它包含三个部分:
- Java标准开发(Java Platform Standard Edition,Java SE):包含Java语言核心的类,比如数据库连接,接口定义,输入输出,网络编程。
- Java嵌入式开发(Java Platform Micro Edition,Java ME):包含Java SE的部分类,用于消费类电子产品的软件开发,比如手机,PDA,机顶盒等。
- Java企业开发(Java Platform Enterprise Edition,Java EE):包含Java SE中的所有类,还包含用于开发企业级应用的类,比如EJB,Servlet,JSP,XML,事务控制等,是大型系统和互联网项目开发的主要平台。
# Java语言特点
- Java是一种面向对象的语言,克服了C++语言中的所有难以理解和容易混淆的特点,更加严谨也足够简单。
- 可移植,一次编写,处处运行,它基于JVM,可直接利用JVM的指令集解释程序运行。
- 垃圾回收,引用传递,多线程支持,模块化支持。
- 适合分布式计算。
# Java环境配置
# 概念辨析
JDK(Java Development Kit)是Java的开发工具包,它包含JRE和开发工具,JRE(Java Runtime Environment)又包含JVM和核心类库。如果只有JRE,那么它只能保证Java程序的运行,无法进行项目开发。
JDK的目录下的内容:
- bin:存放JDK的工具命令。
- conf:存放JDK的相关配置文件。
- include:存放了一些头文件。
- jmods:存放JDK的各种模块。
- legal:存放JDK各模块的授权文档。
- lib:JDK工具的补充jar包。
# 环境变量
windows下配置:
JAVA_HOME=D:/jdk8
# jdk8
classpath=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
# 比jdk8更高的版本
classpath=.;%JAVA_HOME%\lib
Path=%JAVA_HOME%\bin
2
3
4
5
6
linux下配置
vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_201
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
2
3
4
5
6
# 环境配置
我们使用Eclipse作为开发环境,从官网下载该IDE然后安装。该IDE包含以下几部分:
- JDT(Java Development Tools):专门开发Java SE程序的平台,提供调试,运行,提示等功能。
- JUnit 单元测试软件。
- CVS,GIT等版本控制
- 插件开发。
# Eclipse配置
JDK依赖于JDK的支持,默认会自动选择一个JDK,如果要指定JDK,可在Window->Preference->Java->Installed JREs,选择Standard VM。
需要统一指定文件编码,在Window->Preferences->General->Workspace->Text file encoding->Other指定为UTF-8。
如需第三方jar文件,可以在项目->Properties->Java Build Path->Libraries->Classpath->AddExternalJARs...。如果要导出自己的jar包,可在File->Export->Java->JAR文件。
我一般安装Darkest Dark Theme with DevStyle和Vrapper(Vim)这两个插件。
在Window->Preferences->Java->Editor->Content Assist处有Auto activation triggers for Java,可以在.后面填写qwertyuiopasdfghjklzxcvbnm,开启所有字母出发自动补全。
在Window->Preferences->General->Editors->TextEditors设置Insert spaces for tabs为True。
如果要更改项目的JDK版本,可项目右键->属性->JavaBuildPath->Libraries->双击JRE System Library。
# Eclipse快捷键
快捷键 | 作用 |
---|---|
Ctrl+1 | 代码纠正提示 |
Alt+/ | 手动调用代码提示 |
Ctrl+Shift+下方向键 | 复制当前行 |
Ctrl+/ | 单行注释 |
Ctrl+Shift+/ | 多行注释 |
Ctrl+Shift+F | 格式化代码 |
Ctrl+Shift+O | 自动导入所需包 |
# 程序编写
# 开发流程
Java的口号是"write once,run anywhere!",它的开发和C++略有不同,C++是从源程序直接编译出执行程序,而Java要跨平台,它是Java源程序先经过(编译器Javac.exe)编译成Java字节码文件,然后再用(解释程序java.exe)来解释Java字节码文件。
Java程序的执行依赖于JVM,当用户使用Java命令去解释class字节码文件时,实际都会启动一个JVM进程,这个进程需要一个明确的类加载路径,这个路径就是通过CLASSPATH环境变量指定的。
Java程序分为Application和Applet程序,Applet程序主要应用在网页上,现在已经不再使用。
# JSell工具
从JDK 1.9以后提供了一个交互式工具JShell,此程序可以方便的编写程序,输入/open进行文件内容加载,输入/exit会退出交互式环境。
# 程序编写
Java是面向对象的,面向对象中类是基本的单位,需要注意的是:
- 定义类时如果使用public修饰,那么定义该类的文件名一定要与该类名一致。也就是说在Java中一个文件可以包含多个类,但是文件名需要与public修饰的类一致。
- 如果某类没有使用public修饰,文件名可以不与该类名一致。当一个文件中有多个类定义时,在编译时,会将编译后的各个class保存到不同的.class文件中。
public class Person{
public static void main(String[] args){
System.out.println("hello world");
}
}
class Student{
}
2
3
4
5
6
7
8
9
# 测试
测试分为黑盒测试和白盒测试,黑盒测试是不管内部实现,给一个输入,看输出是否符合预期。白盒测试又称结构测试,透明盒测试,逻辑驱动测试,是一种测试用例设计方法,在不同地方设立检查点,来确定实际运行状态与预期状态是否一致。JUnit是一个回归测试框架(Regression Testing Framework),用于白盒测试。
白盒测试有几个原则:
- 一个模块中的所有独立路径至少被测试一次。
- 检查程序的内部数据结构,保证结构的有效性。
白盒测试步骤:
- 定义测试类。
- 定义测试方法,并添加@Test注解。
JUnit中提供了一个TestCase类,有很多assertXXX()方法,使用断言来处理结果。
- 判断是否为null,可以使用assertNull(),assertNotNull()。
- 判断是否为true,可使用assertTrue(),assertNotFalse()。
- 判断是否相等,可使用assertEquals(预期值,实际值)。
有两个特殊注解:
- @Before : 所注解的方法会在所有测试方法执行之前进行执行。
- @After : 所注解的方法会在所有测试方法执行之后进行执行。