Sun公司 决定在 C++ 基础上开发一种面向对象的新语言,为下一代智能家电编写一个通用控制系统,失败后决定创造一种全新的语言 Oak
1994年 互联网和浏览器出现,通过对 Oak 小规模改造,完成了第一个 Java 语言的网页浏览器:WebRunner。由于 Oak 商标已经被注册,更名为 Java
1995年 Sun 公司将 Java 开源[公开源代码]。互联网上出现许多 Java 小程序[Applet], Java 成为广为人知的编程语言
1996年 Sun 发布了 JDK 1.0。包含:
1997年 发布 JDK 1.1,增加了即时编译器[JIT],能够将常用指令保存到内存,下次调用无须重新编译,提升了JDK效率
Flash 的出现蚕食了 Java 在网页上的应用
1998 年 Sun 发布了历史上最重要的 JDK 1.2、JSP/Servlet、EJB 规范,将 Java 分成 J2EE、J2SE、J2ME
2002 年 Sun 发布了历史上最成熟的 JDK 1.4 。出现:
2004 年 Sun 发布 JDK 1.5 ,更名 Java SE、Java EE、Java ME。
增加了 泛型,增强for循环,可变数量形参,注释,自动拆箱/装箱
推出了 EJB3.0 规范/MVC 框架规范[JSF],用于快速构建复杂 JSP 界面
2006 年 发布 JDK 1.6
2009 年,Orcale 收购 Sun ,获得 Java、Solaris
2007 年,Google 推出 基于Linux 的 Android 手机操作系统,使用 Java 语言开发应用程序
2011 年,Orcale 发布 Java SE7 ,引进 二进制整数、支持字符串的switch语句、菱形语法、多异常捕捉、自动关闭资源的try语句
2014 年,Orcale 发布 Java SE8 ,引进 Lambda表达式
Java 是最流行的面向对象编程语言,类似的有 C#、Ruby、Python
Microsoft 推出 .NET 平台,并发布 C#语言,与 Java 有90%的重叠
C# 创建 Windows 服务,记录 Windows 事件日志,访问注册表时更方便,Visual Studio 开发平台开发效率极高
日本人研发
简洁的解释型语言,纯粹的面向对象,弱类型[变量无须声明,没有类型],完全跨平台,可以在任何操作系统上解释执行
MVC 框架:Ruby On Rails,真正意义上的敏捷开发框架,提供大量代码生成器,提供一站式解决方案,Web 层的MVC 框架,持久层的ORM等
适合中小型应用。而Java适合大型企业级应用/服务器端/Android
高级动态编程语言–基于 ABC 教学语言[专门为非程序员设计的优美强大的语言]
面向对象的解释型编程语言,也是一种功能强大的通用型语言。
具有简洁而清晰的语法特点,适合完成各种高层任务,可以在所有主流操作系统运行
设计哲学:对于一个特定问题,只要有一种最好的方法来解决就好了[甚至不是格式自由的语言,强制缩进]
执行Java程序的步骤:
执行Java程序的示意图:
JVM:负责解释执行字节码文件,向编译器提供相同的编程接口。编译器面向虚拟机编程,生成虚拟机能理解的代码,由虚拟机解释执行。
JVM 向上提供统一接口给编译器[源文件-.class文件],向下则面向不同平台提供不同实现
JVM 规范统一标准,实现平台无关性:指令集、寄存器、类文件的格式、栈、垃圾回收堆、存储区
JVM 是一个抽象的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存和寄存器
SDK: Software Development Kit,即 Java EE开发包,包含了JDK
JDK:Java SE Development Kit,即 Java标准版开发包,是 Sun 提供的一套用于开发Java应用程序的开发包,提供了编译、运行Java程序所需的各种工具和资源,包括 Java编译器、Java运行时环境[JRE]、常用 Java类库
JRE:Java Runtime Environment Java运行时环境,运行Java程序的必需条件[JVM,类加载器,字节码校验器,大量基础类库]
JVM:运行Java程序的核心虚拟机
SDK>JDK>JRE>JVM
JDK 文件目录
Windows 操作系统根据 Path 环境变量来查找命令。
Path 环境变量 的值是一系列路径,Windows 将在这些路径中依此查找命令。
安装JDK注意事项:
1. 避免将JDK安装在带文件名空格的路径[文件夹]
2. 配置环境变量:添加 [JDK安装目录\bin] 到 Path 环境变量即可,无须配置CLASSPATH、JAVA_HOME环境变量
3. 传送门:JDK下载
4. 传送门:JDK环境搭建教程
新建一个文件,文件名同类名[即HelloWorld],文件后缀名为.java,内容如下:
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World");
}
}
在命令行窗口中进入源程序所在路径,执行以下命令:
javac -d destdir srcFile
destdir:指定编译生成的字节码文件的存放路径
srcFile:Java源文件所在的位置[绝对路径、相对路径均可]
示例1:javac -d . HelloWorld.java [.代表当前路径]
示例2:javac HelloWorld.java [省略-d选项,则生成的.class文件放在当前路径]
在命令窗口中进入源程序所在路径,执行以下命令:
java package.JavaClassName [java 包名.类名]
示例:java HelloWorld [Java类不属于任何包时可以省略包名]
JDK 1.4 之前
JDK 1.5 之后
Java 是纯粹的面向对象的程序设计语言,Java程序必需以类形式存在,类是Java程序的最小程序单位,不允许可执行性语句、方法等独立存在。
// 这才是最简单的类--空类,编译通过[说明类定义是正确的],但不能运行[没有main方法]
class SimplClass{
// 能被解释器解释执行的类必需包含 public static void main(String[] args) {}
// JVM 从该方法开始解释执行,是程序的入口。
}
文件名后缀必需是 .java
源文件文件名必需与 该文件中 public修饰的类同名—-通常建议一个源文件只定义一个类,确保文件名与类名相同
CLASSPATH 环境变量问题:若设置必需加.代表当前路径下搜索,通常无须设置。
大小写问题:Java 严格区分大小写,关键字全是小写的
安装路径包含空格的问题:Windows 系统许多路径包含空格,安装编程相关工具时应该避开这些路径,否则可能引发错误
程序显式进行垃圾回收的缺点:
Java 程序的内存分配和回收由 JRE 在后台自动进行。JRE 负责回收不再使用的内存,称为垃圾回收。
Java 所有JVM实现都有一个由垃圾回收器管理的堆内存,堆内存是一个运行时数据区,用以保存类的实例[对象]。
垃圾回收是一种动态存储管理技术,自动释放不再被程序引用的对象,按照特定的垃圾回收算法实现内存资源的自动回收功能。
除了释放没用的对象,垃圾回收也可以清除内存记录碎片,将占用的堆内存移到堆的一端,分配给新的对象
优点:
缺点:
垃圾回收算法基本任务:发现无用对象,回收其所占空间,供程序再次使用
垃圾回收特点:
垃圾回收实现方式:垃圾回收开始就停止程序的运行、垃圾回收运行时允许程序的线程运行、同一时间允许垃圾回收多线程运行
编写Java程序的原则:对于不再需要的对象,不要引用它们。
Java8 删除了永生代内存[用以存储一些需要常驻内存,不被垃圾回收的信息],改为使用本地内存来存储类的元数据信息,称之为 元空间。