1. Java语言概述

1.1 计算机语言发展历史

语言:人与人交流沟通的表达方式
计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言

  • 第一代:机器语言
  • 第二代:汇编语言
  • 第三代:高级语言
    • 面向过程:C、Fortran、Cobol、Pascal、ADA等
    • 面向对象:C++、Java、C#等

编程的学习,看的不是语言,任何一门主流语言,只要学透了,都够吃一辈子。

1.2 Java发展史

1991年,詹姆斯·高斯林(James Gosling)在SUN(Stanford University Network)公司的工程师小组想要设计这样一种小型计算机语言。该语言主要用于像电视盒这样的消费类电子产品。另外,由于不同的厂商选择不同的CPU和操作系统,因此,要求该语言不能和特定的体系结构绑在一起,要求语言本身是中立的,也就是跨平台的。所以,将这个语言命名为“Green”,类似于绿色软件的意思。后来,改名为Oak,橡树的意思。改名后发现已经有一种语言叫这个名字了,再改名叫Java。

2009年,Sun公司被甲骨文公司收购,所以我们现在访问Oracle官网 即可。Java语言发展到今天经历了一系列的过程:

1991年,SUN公司的Green项目,Oak
1995年,推出Java测试版
1996年,JDK1.0
1997年,JDK1.1
1998年,JDK1.2,大大改进了早期版本缺陷,是一个革命性的版本,更名为Java2。
2004年,J2SE 5.0 (1.5.0) Tiger老虎
2006年,J2SE 6.0 (1.6.0) Mustang野马
2011年,JavaSE7.0 Dolphin海豚
2014年,JavaSE8.0

1.3 Java的核心优势

跨平台是Java语言的核心优势,赶上最初互联网的发展,并随着互联网的发展而发展,建立了强大的生态体系,目前已经覆盖IT各行业的“第一大语言”,是计算机界的“英语”。其在企业,安卓,大数据,云计算等方面都有涉及。

虽然,目前也有很多跨平台的语言,但是已经失去先机,无法和Java强大的生态体系抗衡。Java仍将在未来几十年成为编程语言的主流语言。

Java虚拟机是Java实现跨平台的核心,Java程序并非是直接运行的,Java编译器将Java源程序编译成与平台无关的字节码文件(class文件),然后由Java虚拟机(JVM)对字节码文件解释执行。所以在不同的操作系统下,只需安装不同的Java虚拟机即可实现java程序的跨平台。事实上,基于Java虚拟机(JVM)的编程语言还有很多种:

1.4 Java各版本的含义

  • JavaSE(Java Standard Edition):标准版,定位在个人计算机上的应用。
    这个版本是Java平台的核心,它提供了非常丰富的API来开发一般个人计算机上的应用程序,包括用户界面接口AWT及Swing,网络功能与国际化、图像处理能力以及输入输出支持等。在上世纪90年代末互联网上大放异彩的Applet也属于这个版本。Applet后来为Flash取代,Flash即将被HTML5取代。

  • JavaEE(Java Enterprise Edition):企业版,定位在服务器端的应用。
    JavaEE是JavaSE的扩展,增加了用于服务器开发的类库。如:JDBC是让程序员能直接在Java内使用的SQL的语法来访问数据库内的数据;Servlet能够延伸服务器的功能,通过请求-响应的模式来处理客户端的请求;JSP是一种可以将Java程序代码内嵌在网页内的技术。

  • JavaME(Java Micro Edition):微型版,定位在消费性电子产品的应用上
    JavaME是JavaSE的内伸,包含J2SE的一部分核心类,也有自己的扩展类,增加了适合微小装置的类库:javax.microedition.io.*等。该版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。

很多人开始会误解为安卓开发就是JavaME,但这两个是完全不同的内容。

1.5 Java的特性和优势

  • 跨平台/可移植性
    这是Java的核心优势。Java在设计时就很注重移植和跨平台性。比如:Java的int永远都是32位。不像C++可能是16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。

  • 安全性
    Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以很容易构建防病毒,防篡改的系统。

  • 面向对象
    面向对象是一种程序设计技术,非常适合大型软件的设计和开发。由于C++为了照顾大量C语言使用者而兼容了C,使得自身仅仅成为了带类的C语言,多少影响了其面向对象的彻底性!Java则是完全的面向对象语言。

  • 简单性
    Java就是C++语法的简化版,我们也可以将Java称之为“C++-”,指的就是将C++的一些内容去掉;比如:头文件,指针运算,结构,联合,操作符重载,虚基类等等。同时,由于语法基于C语言,因此学习起来完全不费力。

  • 高性能
    Java最初发展阶段,总是被人诟病“性能低”;客观上,高级语言运行效率总是低于低级语言的,这个无法避免。Java语言本身发展中通过虚拟机的优化提升了几十倍运行效率。比如,通过JIT(JUST IN TIME)即时编译技术提高运行效率。 将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使Java程序的执行效率大大提高,某些代码甚至接近C++的效率。
    因此,Java低性能的短腿,已经被完全解决了。业界发展上,我们也看到很多C++应用转到Java开发,很多C++程序员转型为Java程序员。

  • 分布式
    Java是为Internet的分布式环境设计的,因为它能够处理TCP/IP协议。事实上,通过URL访问一个网络资源和访问本地文件是一样简单的。Java还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。

  • 多线程
    多线程的使用可以带来更好的交互响应和实时行为。 Java多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。

  • 健壮性
    Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理。

1.6 Java应用程序的运行机制

计算机高级语言的类型主要有编译型解释型两种,而Java语言是两种类型的结合。

Java首先利用文本编辑器编写 Java源程序,源文件的后缀名为.java;再利用编译器(javac)将源程序编译成字节码文件,字节码文件的后缀名为.class; 最后利用虚拟机(解释器,java)解释执行。

1.7 JVM、JRE和JDK

  • JVM(Java Virtual Machine):Java虚拟机
    JVM(Java Virtual Machine)就是一个虚拟的用于执行bytecode字节码的”虚拟计算机”。他也定义了指令集、寄存器集、结构栈、垃圾收集堆、内存区域。JVM负责将Java字节码解释运行,边解释边运行,这样,速度就会受到一定的影响。
    不同的操作系统有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。 Java虚拟机是实现跨平台的核心机制。如图所示。

  • JRE(Java Runtime Environment):Java运行环境,包含了JVM和Java的核心类库(Java API)

  • JDK(Java Development Kit):包含JRE,以及增加编译器和调试器等用于程序开发的文件。

JDK、JRE和JVM的关系如图所示。

总结:

  • 如果只是要运行Java程序,只需要JRE就可以。JRE通常非常小,其中包含了JVM。
  • 如果要开发Java程序,就需要安装JDK。

2. 开发环境准备

2.1 JDK的下载和安装

最安全的也是最可靠的是通过官方网站获取JDK,但是官网的下载速度以及目前需要Oracle账号才能下载JDK,我们可以通过国内的镜像下载,或者其他开发者的下载链接。

注意:针对不同的操作系统,需要下载对应版本的JDK。如果无法确定Windows版本,可以右键此电脑点击“属性”,即可查看系统信息。

  1. 32位操作系统只能安装32位JDK;
  2. 64位操作系统可安装32位JDK,也可以安装64位JDK。

2.2 安装JDK

Windows版JDK安装,基本是傻瓜式安装,直接下一步即可。默认的安装路径是在C:\\Program Files\\下,为方便统一管理,最好修改下安装路径,将与开发相关的软件都安装到一个文件夹下,例如E:\\develop\\注意,安装路径不要包含中文或者空格等特殊字符(使用纯英文目录)

小知识:8 Update 121表示Jdk8更新了121次后的版本

我们再进入JDK的安装目录,可以看到如下的结构:

名称说明
bin该路径下存放了JDK的各种工具命令,即一些可执行的二进制文件。javac和java就放在这个目录。
include该路径下存放了一些平台特定的头文件。
lib该路径下存放了JDK工具的一些补充JAR包。
src.zipJDK相关JAVA类的源代码。

2.3 环境变量Path的配置

环境变量是在操作系统中一个具有特定名字的对象, 它包含了一个或者多个应用程序所将使用到的信息。

Path是一个常见的环境变量,它告诉操作系统,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还应到哪些目录下寻找。

设置Path环境变量的步骤如下

  1. 右键此电脑——>属性——>高级系统设置。

  2. 单击环境变量按钮,进入环境变量操作主界面

  3. 单击新建按钮,新建JAVA_HOME变量(用于说明JDK的安装目录)

  4. 修改系统环境变量Path,添加%JAVA_HOME%\bin

2.4 测试JDK安装成功

Windows + R,输入cmd进入命令行窗口

输入java -version以及javac -version查看是否安装成功

3. 开发第一个Java程序

3.1 HelloWorld案例编写并执行

开发Java程序,需要三个步骤:编写程序,编译程序,运行程序

  • 使用记事本,编写代码

    1. 新建文本文档文件,修改名称为HelloWorld.java。

    2. 用记事本打开HelloWorld.java文件,输写程序内容。

    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello World");
        }
    }
    

    注意:

    1. 代码中的引号、分号必须为英文引号和分号,不能是中文全角的引号和分号
    2. 注意大小写
  • 编译和运行

    打开命令行窗口,进入Java文件所在目录;执行命令:javac HelloWorld.java,生成class文件。

3.2 HelloWorld案例常见问题

3.2.1 BUG

在电脑系统或程序中,隐藏着的一些未被发现的缺陷或问题统称为bug(漏洞)。

3.2.2 BUG的解决

  1. 具备识别BUG的能力:多看

  2. 具备分析BUG的能力:多思考,多查资料

  3. 具备解决BUG的能力:多尝试,多总结

3.2.3 HelloWorld案例常见问题

  1. 非法字符问题。Java中的符号都是英文格式的。
  2. 大小写问题。Java语言对大小写敏感(区分大小写)。
  3. 在系统中显示文件的扩展名,避免出现HelloWorld.java.txt文件。
  4. 编译命令后的java文件名需要带文件后缀.java
  5. 运行命令后的class文件名(类名)不带文件后缀.class

3.2.4 第一个Java程序的总结和提升

  1. Java对大小写敏感,如果出现了大小写拼写错误,程序无法运行。

  2. 关键字 public 被称作访问修饰符(access modifier),用于控制程序的其它部分对这段代码的访问级别。

  3. 关键字 class 的意思是类。Java是面向对象的语言,所有代码必须位于类里面。

  4. 一个源文件中至多只能声明一个public的类,其它类的个数不限,如果源文件中包含一个public 类,源文件名必须和其中定义的public的类名相同,且以“.java”为扩展名。

  5. 一个源文件可以包含多个类class。

  6. 正确编译后的源文件,会得到相应的字节码文件,编译器为每个类生成独立的字节码文件,且将字节码文件自动命名为类的名字且以“.class”为扩展名。

  7. main方法是Java应用程序的入口方法,它有固定的书写格式:public static void main(String[] args) {…}

  8. 在Java中,用花括号划分程序的各个部分,任何方法的代码都必须以“{”开始,以“}”结束, 由于编译器忽略空格,所以花括号风格不受限制。

  9. Java中每个语句必须以分号结束,回车不是语句的结束标志,所以一个语句可以跨多行。