Java概述
1.什么是程序
什么是程序呢?事实上,"程序"一词源于生活,通常指完成某些事情的一种既定方式和过程。 下面看一看生活中到银行柜台"取钱"的程序,如图1.1所示。
银行"取钱"的步骤。
(1) 带上存折/银行卡到银行。
(2) 取号排队。
(3) 将存折或银行卡递给银行职员并告知取款数额。
(4) 输入取款密码。
(5) 银行职员办理取款事宜。
(6) 拿到钱,带上存折/银行卡。
(7) 离开银行。
简单地说,程序可以看做对一系列动作执行过程的描述。图1.1描述的是一个非常简单的程序,实际上该过程也可能变得很复杂。例如,轮到取款时发现带的是另一家银行的银行卡,就需要回家取卡,再次排队,这样就出现了重复性动作,步骤也会相应地增加。
那么,计算机程序到底是什么呢?计算机中的程序和曰常生活中的程序很相似。
曰常使用计算机时,就是利用计算机处理各种不同的问题。但是,计算机不会自己思考,它是人类手中的木偶,因此要明确告诉它做什么工作及需要几个步骤才能完成该工作。试想一下,计算机程序执行的整个过程是怎样的?它完成一件我们分配给它的任务,如"取钱",它会按照我们的命令去执行,我们说"立正",它不能"稍息",在我们的支配下完成预定工作。这里,人们所下达的每一个命令都称为指令,它对应着计算机执行的一个基本动作。计算机按照某种顺序完成一系列指令,这一系列指令的集合称为程序。
程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。
如何编制程序呢?这就需要一个工具,即编程语言。人类交流有自己的语言,那么人与计算机对话就要使用计算机语言,这样,人表达的想法、下达的指令计算机才能够明白。如何用语言表达指令呢?全世界各个国家都有自己的语言,因此要表达"谢谢",就能看到上百种表示方式,如中文----谢谢,英文----Thanks,德文-----Dankeschon。
同样地,计算机语言也有很多种,它们都有自己的语法规则,可以选用其中一种来描述程序,传达给计算机。例如,用Java语言描述的程序称为Java程序。计算机阅读该程序,也就是阅读指令集,然后按部就班地严格执行。通常来讲,编制程序时选用的语言是有利于人类读写的语言,俗称高级语言。但是计算机仅明白0和1代码组成的低级语言(即二进制形式的机器语言),中间需要进行语言转换。开发高级语言的工程师们已经为我们准备好了"翻译官",我们只要学好高级语言就可以。
1-2为什么学习Java语言
Java是前Sun公司(现甲骨文股份有限公司)于1995年推出的高级编程语言,Java技术可以应用在几乎所有类型和规模的设备上,小到计算机芯片、蜂窝电话,大到超级计算机,无所不在。
Java的来历:Java的初期开发早在1991年就开始了。当时,在前Sun公司内,有一个称
为Green的项目,在James Gosling的带领下,这个项目的工程师受命设计一种小型的计算机语言,用于机顶盒、家电控制芯片等消费类设备。最初,这种新语言被命名为“Oak”(James Gosling办公室窗外的橡树名),但后来由于“Oak”这一名称已被占用,因此改名为“Java”。据说这是因为当时人们在想新名称的时候,正在品尝着一种来自印度尼西亚的爪哇小岛盛产的咖啡(这种咖啡也称为Java),于是就选用了 “Java” 一种咖啡的名称作为新语言的名称,所以Java语言的标志就是一杯热气腾腾的咖啡。Java语言的创始人James Gosling也被人们誉为 “Java语言之父”。
在当前的软件开发行业中,Java 已经成为绝对的主流,Java 领域的 Java SE 、 Java EE 技术已发展成为同 Microsoft公司的 C# 和 .NET 技术平分天下的应用软件开发技术和平台,其对应的图标如 图1.2~图1.5 所示。因此,有人说掌握了 Java 语言就号准了软件开发的“主脉”。这些技术我们在后续的课程中都会陆续学到。
图1.2 Java
1.1.3 Java 可以做什么
Java 语言这么重要,它究竟能够做什么呢?在计算机软件应用领域中,可以把 Java 应用分为两种典型类型:一种是安装和运行在本机上的桌面程序,如政府和企业中常用的各种信息管理系统,如图 1 .6所示;另一种是通过浏览器访问的面向 Internet 的应用程序,如网上数码商城系统,如图 1.7 所示。
图1.6物流配送信息管理系统
图 1.7 网上数码商城系统
除此之外, Java 还能够做出非常炫的图像效果,图 1.8 和图 1.9 就是使用 Java 做出的 2D 和 3D立体效果的应用程序。
图 1.8 使用 Java 开发的 2D 效果的桌面应用程序
图 1.9 使用 Java 开
图 1.9 使用 Java 开发的 3D 立体效果 Internet 应用程序
1.1.4Java 技术平台
如果人们提起 Java, 则可能有很多含义。因为 Java 的内涵非常丰富,它既可以指 Java 编程语言,又可以指与此相关的很多技术。随着学习的深入,大家会慢慢发现它的强大、丰富和吸引人之处。
为了对 Java 技术的使用方向和范围进行区分,避免在学习和使用过程中关注那些不必要的技术特性,前Sun公司对 Java 技术进行了市场划分。我们将学习应用最广泛的两种 Java 技术: Java SE和 Java EE 。
1. Java SE
Java SE (Java Platform Standard Edition, Java 平台标准版)是 Java 技术的核心,提供基础的 Java开发工具、执行环境与应用程序接口 (API), 主要用于桌面应用程序的开发。程序员就像一个厨师,刚开始是掂大勺,然后是练刀工,之后开始煎炒烹炸,最后才可以自己设计菜肴。 Java SE 就是教人们成为一名烹饪大师所需要掌握的基本功。
2. Java EE
Java EE (Java Platform Enterprise Edition, Java 平台企业版)主要用于网络程序和企业级应用的开发。需要强调的是,任何 Java 学习者都要从 Java SE 开始,Java SE 是 Java 语言的核心,而 Java EE是在 Java SE 的基础上扩展的。Java SE 提供了 Java 的执行环境,使开发出的应用程序能够在操作系统上运行,如图 1.10所示。就像上战场打仗一样, Java SE 是一把锋利无比的刀,Java EE 是排兵布阵的方法,程序员则在布好的阵中要拿着刀去杀敌。
图 1.10 Java SE 和 Java E
也许大家还是不太理解,没有关系,随着学习的深入,将会慢慢了解并掌握这两种平台的内容及相关技术。本课程的内容都属于 Java SE 。
1.2.1 开发 Java 程序的步骤
1. 编写源程序
通过前面的学习,大家已经了解到 Java 语言是一门高级程序语言,在明确了要计算机做的事情之后,把要下达的指令逐条使用 Java 语言描述出来,这就是编制程序。通常,人们称这个文件为源程序或者源代码,图1.11中的 MyProgram.java 就是一个 Java 源程序。就像 Word 文档使用.doc 作为扩展名一样,Java 源程序文件使用 .java 作为扩展名
2,编译
编译时就要用到前面提到的"翻译官"了,也就是通常所说的编译器。经过它的翻译,输出结果就是一个扩展名为 .class 的文件,称为字节码文件,如图 1.11 中的 MyProgram.class 文件。
3. 运行
在 Java 平台上运行生成的字节码文件,便可看到运行结果。
那么,到底什么是编译器,在哪里能看到程序的运行结果呢?前 Sun 公司提供的 JDK (Java Development Kit, Java 开发工具包)就能够实现编译和运行的功能。
4. 安装 JDK
JDK 本身也在不断地修改、完善,并推出新的版本,这里使用 JDK 1.7 来开发 Java 程序,如图 1.12 所示,JDK 的安装目录为 C: \Program Files\Java\jdk1.7.0_51 。
你知道JDK1.7和1.8的区别吗?
JDK1.7
1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头。
1.2 Switch语句支持String类型。
1.3 Try-with-resource语句:
ry-with-resources语句是一种声明了一种或多种资源的try语句。资源是指在程序用完了之后必须要关闭的对象。
try-with-resources语句保证了每个声明了的资源在语句结束的时候都会被关闭。任何实现了java.lang.AutoCloseable接口的对象,和实现了java.io.Closeable接口的对象,都可以当做资源使用。
1.4 Catch多个异常
1.5 数字类型的下划线表示 更友好的表示方式,不过要注意下划线添加的一些标准
1.6 泛型实例的创建可以通过类型推断来简化 可以去掉后面new部分的泛型类型,只用<>就可以了。
1.7在可变参数方法中传递非具体化参数,改进编译警告和错误
1.8 信息更丰富的回溯追踪 就是上面try中try语句和里面的语句同时抛出异常时,异常栈的信息等等
JDK1.8
java 1.8 是1.7的增强版,新增了以下特性
1、default关键字,在接口中可以通过使用default关键字编写方法体,实现类可以不用实现该方法,可以进行直接调用
2、Lambda 表达式,函数式编程,函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量
3、函数式接口,“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。jdk1.8提供了一个@FunctionalInterface注解来定义函数式接口,如果我们定义的接口不符合函数式的规范便会报错。
4、方法与构造函数引用,jdk1.8提供了另外一种调用方式::,当你需要使用方法引用时 , 目标引用放在分隔符::前 ,方法的名称放在后面。
5、局部变量限制
6、Date Api更新1.8之前JDK自带的日期处理类非常不方便,我们处理的时候经常是使用的第三方工具包,比如commons-lang包等。不过1.8出现之后这个改观了很多,比如日期时间的创建、比较、调整、格式化、时间间隔等。这些类都在java.time包下。比原来实用了很多。
7、流,流是Java API的新成员,它允许我们以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,我们可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,也就是说我们不用写多线程代码了。
第一步:双击运行选中软件。
第二步:选择“下一步”按钮继续。
第三步:看好你的安装位置然后安装软件。点击“下一步”按钮继续。
第四步:JDK在安装中!过程稍微有点慢耐心等待。
第五步:设置目标文件夹将文件安装的位置。
第六步:等待最后的安装过程。
第七步:安装成功!点击“关闭”即可!
下面是 JDK 中的重要目录或文件。
> bin 目录:存放编译、运行 Java 程序的可执行文件。
> jre 目录:存放 Java 运行环境文件。
> lib 目录: 存放 Java 的类库文件。
> src.rar 文件:构成 Java 平台核心 API 的所有类的源文件。
2) 配置环境变量
由于 bin 目录中存放的是要使用的各种 java 命令,因此,为了在任何路径下都能找到并执行这些常用的 Java 命令,需要配置系统的环境变量。下面是在 Windows 10 中,JDK 配置环境变量的具体步骤。
(1) 右击桌面上的 "此电脑" 图标。
(2) 从弹出的快捷菜单中选择 "属性" 选项,在弹出的 "属性" 对话框中选择 "高级系统设置" 选项卡。
(3) 单击 "环境变量" 按钮,弹出 "环境变量" 对话框。
(4) 在 "系统变量" 选项组中,编辑 path 变量。在 path 变量开始位置增加 E:\JDK8.0\bin,并上移至第一项就可以了。
有了 JDK 的支持,使用记事本就可以编写 Java 源程序。使用记事本开发 Java 程序的步骤如下。
首先,创建记事本程序,并以 .java 作为扩展名进行保存。例如,在 "I:\ "文件夹下创建 "HelioWorld.java" 文件。
随后,打开 HelloWorld.java 文件,并在其中编写 Java 代码,如示例 1 所示。
示例一
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!!!");
}
}
再次,在控制台使用 javac 命令对 .java 文件进行编译。例如,编译 HelloWorld.java 文
件后生成HelloWorld.class 文件,
最后,在控制台使用 java 命令运行编译后生成的 .class 文件,就可以输出程序结果,
1.2.2 Java 程序的结构
示例 1 是一段简单的 Java 代码,作用是向控制台输出 "Hello World!!!" 信息。下面来分析程序的各个组成部分。通常,盖房子要先搭一个框架,然后才能添砖加瓦,Java 程序也有自己的"框架"。
1. 编写程序框架
Public class Hello World {}
其中, Hello World 为类的名称,它要和程序文件的名称一模一样。至于"类"是什么,将会在以后的章节中深入学习。类名前面要用 public (公共的)和 class (类)两个词修饰,它们的先后顺序不能改变,中间要用空格分隔。类名后面跟一对大括号,所有属于该类的代码都放在"厂和中。
2. 编写 main( )方法的框架
public static void main(String[] args){}
main()方法有什么作用呢?正如房子不管有多大、有多少个房间都要从门进入一样,程序也要从一个固定的位置开始执行,在程序中把它称为 "入口"。而 main( )方法就是 Java 程序的入口,是所有 Java 应用程序的起始点,没有 main( )方法,计算机就不知道该从哪里开始执行程序。
问题:这么多知识,记不住,看不懂,怎么办?
解答:刚开始学习Java程序时不用太着急,上面介绍的是Java程序的框架,只要按
照要求把那些固定的代码写对即可。随着学习的深入,会慢慢明白它们的意思,万
事开头难, 要慢慢学习。
3. 编写代码
System.out.println("Hello World!!!” );
这一行代码的作用是向控制台输出,即输出 "Hello World!!!" 。 System.out.println( )是 Java语言自带的功能,使用它可以向控制台输出信息。 print 的含义是 "打印", ln 可以看做 line (行)的缩写, println 可以理解为打印一行。要实现向控制台打印的功能,前面要加上 System.out.。在程序中,只要把需要输出的内容用英文引号引起来放在 println( )中即可。另外,以下语句也可以实现打印输出。
System.out.print("Hello World!!!” );
问题:System, out .println()和 System.out.print()有什么区别?
解答:它们两个都是Java提供的用于向控制台打印输出信息的语句。不同的是,println()在打印完引号中的信息后会自动换行,print()在打印完信息后不会自动换行。举例如下。
代码片断1 :
System.out.println (”我的爱好:”);
System.out.println (”打网球”);
代码片断2:
System.out.print (”我的爱好 :”) ;
System.out.print (”打网球”);
代码片断1输出结果如下。
我的爱好:
打网球
代码片断2输出结果如下。
我的爱好:打网球
System.out.println(””);和System.out.print(“\n”);可以达到同样的效果,引号中的 “\n” 指将光标移动到下一行的第一格,也就是换行。这里 “\n” 称为转义字符。另外一个比较常用的转义字符是”\t”,它的作用是将光标移动到下一个水平制表的位置(一个制表位等于8个空格)。
1.2.3Java程序的注释
看书时,在重要或精彩的地方都会做一些标记,或者在书的空白处做一些笔记,目的是在下次看书的时候有一个提示。通过书上的笔记,就能知道这部分讲了什么内容、上次是怎么理解的。在程序中,也需要这样一种方法,让人们能够在程序中做一些标记来帮助理解代码。想象一下,当奋斗了几个月写出成千上万行代码后,再看几个月前写的代码,有谁能记得当时是怎么理解的呢?此外,当一个人把已经写好的一个程序交给另一个人时,后者是不是要花很多时间才能读懂这段程序的功能?
为了方便程序的阅读, Java 语言允许在程序中注明一些说明性的文字,这就是代码的注释。编译器并不处理这些注释,所以不用担心添加了注释会增加程序的负担。
在 Java 中,常用的注释有两种:单行注释和多行注释。
1. 单行注释
如果说明性的文字较少,则可以放在一行中,即可以使用单行注释。单行注释使用 "//" 开头,每一行中 "//" 后面的文字都被认为是注释。单行注释通常用在代码行之间,或者一行代码的后面,用来说明某一块代码的作用。在示例1的代码中添加一个单行注释,用来说明 System.out.printin()行的作用,如示例 2 所示,这样,当别人看到这个文件的时候,就可知道注释下面那行代码的作用是输出信息到控制台。
示例二
public class HelloWorld{
public static void main(String [ ] args){
//输出信息到控制台
System.out.printIn("Hello World!!!");
}
}
2. 多行注释
多行注释以 "/*" 开头,以 "*/" 结尾,在 "/*" 和 "*/" 之间的内容都被看做注释。当要说明的文字较多,需要占用多行时,可使用多行注释。例如,在一个源文件开始之前,编写注释对整个文件做一些说明,包括文件的名称、功能、作者、创建日期等。现在在不例 1 程序的基础上添加两行代码并添加多行注释,如示例 3 所示。
/*
* HelloWorld.java
* 2015-4-23
* 第一个 Java 程序
*/
public class HelloWorldf
public static void main(String[] args){
System.out.printin("Hello World!!!");
/*
System.out.printIn("Hello World!!!
System.out.printin("Hello World!!!");
*/
}
}
为了美观,程序员一般喜欢在多行注释的每一行都写一个*,如示例3所示。有时,程序员也会在多行注释的开始和结束行输入一串*。它们的作用只是为了美观,对注释本身不会有影响。