13计算机、程序和Java概述Programming is fun!FundamentalsFirstProblemDriven更进一步,你可以进行数学计算,并将结果显示到控制台上。程序清单1-3给出一个计算10.5+2×3的例子。45-3.5程序清单1-3ComputeExpression.java1 public class ComputeExpressionfpublic static voidmain(StringJ args)P3System.out.println((10.5+2*3)/(45-3.5));4570.39759036144578314Java中的乘法操作符是*。如你所看到的,将一个数学表达式翻译成Java表达式是一个非常直观的过程,我们将在第2章进一步讨论Java表达式。一复习题1.28什么是关键字?列举一些Java关键字。1.29Java是大小写敏感的吗?Java关键字是大写还是小写?1.30什么是注释?编译器会忽略注释吗?如何标识一行注释以及一段注释?1.31在控制台上显示一个字符串的语句是什么?1.32给出以下代码的输出:public class Test(publicstatic voidmain(StringlJ args)(System.out.println("3.54/2-2.5is");System.out.println(3.5*4/ 2-2.5);JJ1.8创建、编译和执行Java程序6要点提示:Java源程序保存为java文件,编译为.class文件。.class文件由Java虚拟机(JVM)执行。在执行程序之前,必须创建程序并进行编译。这个过程是反复执行的,如图1-6所示。如果程序有编译错误,必须修改程序来纠正错误,然后重新编译它。如果程序有运行时错误或者不能产生正确的结果,必须修改这个程序,重新编译,然后重新执行。可以使用任何一个文本编辑器或者集成开发环境来创建和编辑Java源代码文件。本节演示如何从命令窗口创建、编译和运行Java程序。1.10节和1.11节将介绍使用NetBeans和Eclipse来开发Java程序。从命令窗口,可以使用文本编辑器比如记事本(NotePad)来创建Java源代码文件,如图1-7所示。6注意:源文件的扩展名必须是java,而且文件名必须与公共类名完全相同。例如,程序清单1-1中源代码的文件必须命名为Welcome.java,因为公共类的类名就是welcome。Java编译器将Java源文件翻译成Java字节码文件。下面的命令就是用来编译Welcomejava的:
计算机、 程序和java 概述 13 Programming is fun! Fundamentals First Problem Driven 更进一步,你可以进行数学计算,并将结果显示到控制台上。程序清单 1 - 3 给出一个计 當 10.5+2x 3 45 - 3.5 的例子。 程序清单 1 - 3 ComputeExpression.java 1 public class ComputeExpression { 2 public static void main(String[] args){ 3 System.out.printlnCClO.5 + 2 * 3) / (45 - 3.5)); |0.397S9036144578314 | ~~ Java 中的乘法操作符是 *。如你所看到的,将一个数学表达式翻译成 Java 表达式是一 个非常直观的过程,我们将在第 2 章进一步讨论 Java 表达式。 复习题 1.28 什么是关键字?列举一些 Java 关键字。 1.29 Java 是大小写敏感的吗? Java 关键字是大写还是小写? 1.30 什么是注释?编译器会忽略注释吗?如何标识一行注释以及一段注释? 1.31 在控制台上显示一个字符串的语句是什么? 1.32 给出以下代码的输出: public class Test { public static void main(String[] args){ System.out.println("3.5 * 4 / 2 - 2.5 is "); System.out.println(3.5 * 4 / 2 - 2.5); 1 . 8 创建、编译和执行 Java 程序 〆要点提示:Java 源程序保存为 .java 文件,编译为 .class 文件。.class 文件由 Java 虚拟机 (JVM)执行0 在执行程序之前,必须创建程序并进行编译。这个过程是反复执行的,如图 1 - 6 所示。 如果程序有编译错误,必须修改程序来纠正错误,然后重新编译它。如果程序有运行时错误 或者不能产生正确的结果,必须修改这个程序,重新编译,然后重新执行。 可以使用任何一个文本编辑器或者集成开发环境来创建和编辑 Java 源代码文件。本节 演示如何从命令窗口创建、编译和运行 Java 程序。1.10 节和 1.11 节将介绍使用 NetBeans 和 Eclipse 来开发 Java 程序。从命令窗口,可以使用文本编辑器比如记事本( NotePad) 来创建 Java 源代码文件,如图 1 - 7 所示。 〆注意:浠文件的扩展名必须是 .java, 而且文件名必须与公共类名完全相同。例如,程序 清单 1 - 1 中源代码的文件必须命名为 Welcomejava, 因为公共类的类名就是 Welcome。 Java 编译器将 Java 源文件翻译成 Java 字节码文件。下面的命令就是用来编译 Welcome, java 的:
14第1本创建/修改源代码源代码(由程序员开发)存盘pub1icclass.welcomepub1icstatic voidmain(Stringl args)tSystem.out.prntln(welcometoJaval")源代码字节码(由编译器产生,不是让你来理解的编译源代码、例如,是让Java虚拟机读取和解释的)javacWelcome.javaMethodWelcome()如果出现编译错误0aload_0存盘Methodvoidmain(java.1ang.String(l)字节码0 getstatic #23Tdc#3 <String"welcome to Javai",5invokevirtual#48 return运行字节码,例如,fava weicome在控制台上打印出“WelcometoJavaWelcome to Java!结果如果出现运行错误或不正确的结果图1-6Java程序开发过程就是重复地创建/修改源代码、编译和执行程序Wecome.java-Notepad区BeEdtFormatYewHeppublicclasswelcomepubiicstaticvoidmain(stringUargs)(System.out.printin("weicometoJaval");图1-7可以使用Windows记事本创建Java源程序文件javac Welcome.java6注意:在编译和运行程序前必须先安装和配置JDK。补充材料I.B介绍如何安装JDK8以及如何设置Java程序的编译和运行环境。如果你在编译和运行Java程序的过程中遇到问题,请参考补充材料I.C,这个补充材料还解释了如何使用基本的DOS命令,以及如何使用Windows记事本来创建和编辑文件。所有补充材料都在本书配套网站wwwcs.armstrong.edu/liang/intro10e/supplement.html上。如果没有语法错误,编译器(compiler)就会生成一个扩展名为,class的字节码文件。所以,前面的命令会生成一个名为Welcome.class的文件,如图1-8a所示。Java语言是高级语言,而Java字节码是低级语言。字节码类似于机器指令,但它是体系结构中立的,是可以在任何带Java虚拟机(JVM)的平台上运行的,如图1-8b所示。虚拟机不是物理机器,而是一个解释Java字节码的程序。这正是Java的主要优点之一:Java字节码可以在不同的硬件平台和操作系统上运行。Java源代码编译成Java字节码,然后Java字节码被JVM解释执行。你的Java代码可能要用到Java库中的代码。JVM将执行你的程序代码以及库中的代码
14 第 1 幸 源代码(由程序员开发) public class Welcome { public static void main(String[] args) { System.out.pHntln(wWelcome to 3ava! w ); 字节码(由编译器产生,不是让你来理解的, 是让 Java 虚拟机读取和解释的) Method WelcomeC) 0 aload.O Method void main(java.1ang.StHng[]) 0 getstatic #2 3 ldc #3 <String "Welcome to Java!% 5 invokevirtual #4 - 8 return [Wei 在控制台上打印出 “ Welcome to Java ” » Java! 创建 / 修改源代码 存盘 源代码 [ 缠译攤代码,例如, javac Welcome.java 存盘 如果出现编译错误 字节码 运行宇节码,例如, java Welcome 〈 结 果 ) 如果出现运行错误或不正碥的结果 图 1 » 6 Java 程序开发过程就是重复地创建 / 修改源代码、编译和执行程序 B* Fflnmt 你 » public class welcome { ^ 1 public static void nain(String[] args) { 71 1 Systea.out.printlnCwelcome to Javal"); } _ M 图丨 - 7 可以使用 Windows 记事本创建 Java 源程序文件 javac Weicome.java (/ 注意:在编译和运行程序前必须先安装和配置 JDK。补充材料 I.B 介绍如何安装 JDK 8 以及如何设置 Java 程序的编译和运行环境。如果你在编译和运行 Java 程序的过程中遇 到问題,请参考补充材料 I.C, 这个补充材料还解释了如何使用基本的 DOS 命令,以 及如何使用 Windows 记事本来创建和编辑文件。所有补充材料都在本书配套网站 www. cs.armstrong.edu/liang/intro1Oe/supplement.html 上。 如果没有语法错误,编译器(compiler) 就会生成一个扩展名为 .class 的宇节码文件。 所以,前面的命令会生成一个名为 Welcome.class 的文件,如图 l - 8a 所示。Java 语言是高 级语言,而 Java 字节码是低级语言。字节码类似于机器指令,但它是体系结构中立的,是 可以在任何带 Java 虚拟机( JVM)的平台上运行的,如图 l - 8b 所示。虚拟机不是物理机器, 而是一个解释 Java 字节码的程序。这正是 Java 的主要优点之一:Java 字节码可以在不同的 硬件平台和操作系统上运行。Java 源代码编译成 Java 字节码,然后 Java 字节码被 JVM 解 释执行。你的 Java 代码可能要用到 Java 库中的代码。JVM 将执行你的程序代码以及库中的 代码
15计算机、程序和Java概述Java字节码Java虚拟机Welcome.class送去执行Welcome.iava送去编译产生Java任意一台(Java源代码(Java字节码JVM编译器文件)可执行文件)计算机库代码a)Java源代码被翻译为字节码b)Java字节码可以在任意一个装有Java虚拟机的计算机上执行图1-8执行Java程序就是运行程序的字节码,可以在任何一个装有JVM的平台上运行字节码,解释Java字节码。解释的过程就是一次将字节码中单独的一步翻译为目标机器语言代码,而不是将整个程序翻译成单独的一块。翻译完一步之后就立即执行这一步。下述命令用来运行程序清单1-1中的字节码:java Welcome图1-9显示了用于编译Welcomejava的命令javac。编译器生成Welcome.class文件使用命令java执行这个文件。注意:为了简单性和一致性,除非特别指明,否则所有的源代码和类文件都放在c:lbook下。OXsaCommandPrompt-编译:Vbook>javacVelcone-Java显示文件4Directoryof c:Vbook187337281183124 Uolcone-clane.java209运行Lbook>Java MelconWelcone to Javatc:(book>图1-9程序清单1-1的输出显示消息“WelcometoJava!”6警告:在命令行执行程序时,不要使用扩展名.class。使用javaClassName来运行程序。如果在命令行使用javaClassName.class,系统就会尝试读取ClassName.class.class。提示:如果要运行一个不存在的类,就会出现NoClassDefFoundError的错误。如果执行的类文件中没有main方法或鼓错了main方法(例如,将main错敲成Main),则会出现提示NoSuchMethodError。6注意:在执行一个Java程序时,JVM首先会用一个称为类加载器(classloader)的程序将类的字节码加载到内存中。如果你的程序中使用其他类,类加载程序会在需要它们之前动态地加载它们。当加载该类后,JVM使用一个称为字节码验证器(bytecodeverifier)的程序来检验字节码的合法性,确保字节码不会违反Java的安全规范。Java强制执行严格的安全规范,以确保来自网络的Java程序不会基改和危害你的计算机
计算机、程序和Java 概述 15 送去编译 a) 执行 Java 程序就是运行程序的字节码,可以在任何一个装有 JVM 的平台上运行字节 码,解释 Java 字节码。解释的过程就是一次将字节码中单独的一步翻译为目标机器语言代 码,而不是将整个程序翻译成单独的一块。翻译完一步之后就立即执行这一步。 下述命令用来运行程序清单 M 中的字节码: java Welcome 图 1 - 9 显示了用于编译 Welcome.java 的命令 javac。编译器生成 Welcome.class 文件, 使用命令 java 执行这个文件。 (/ 注意:为了简单性和一致性,除非特别指明,否則所有的源代码和类文件都放在 c:\book 下。 编译 显示文件 运行 图丨-9 程序清单 1-丨的输出显示消息 “ Welcome to Java!” 〆菁告:在命令行执行程序时,不要使用扩展名 .class。使用 java ClassName 来运行程序。 如果在命令行使用 java ClassName.class, 系统就会尝试读取 ClassName.class.class。 〆提示:如果要运行一个不存在的类,就会出现 NoClassDefFoundError 的错误。如果执行 的类文件中没有 main 方法或敲错了 main 方法(例如,将 main #敲成 Main), 則会出现提 示 NoSuchMethodError。 t/ 注意:在执行一个 Java 程序时,JVM 首先会用一个称为类加载器(class loader) 的程序将 类的字节码加栽到内存中。如果你的程序中使用其他类,类加栽程序会在需要它们之前动 态地加栽它们。当加栽该类后,JVM 使用一个称为字节码验证器( bytecode verifier) 的程 序来检验字节码的合法性,确保字节码不会违反 Java 的安全规范。Java S制执行严格的 安全规范,以确保来自网络的 Java 程序不会篡改和危害你的计算机。 B:Sbook>J«v«c ItolcoM.java | I e:\book>dir lie leone.« I Uoluiw in drive C has no label. Uolirne Serial Nunber is 2EF7-CA93 Directory 找溫i 君:SS 424 UelcoM.clas囂 176 Welcone.Java 2 Fil«<«> 6B0 by Dir<s> 70,200,397,824 淡:: :\book>J«u« Ifelc eleone to :Sbook^ Welcome.java (Java 源代码 文件) Java 编译器 产生 lcome.class (Java 字节码 可执行文件〉 送去执行 库代码 JVM Java 字节码 Java 虚拟机 广任意一台 V it 算机 、 / /a 源代码被翻译为字节码 b) Java 字节码可以在任意一个装有 Java 虚拟机的计算机上执行 图 1-8
第1章166教学提示:教师可能需要学生使用包来组织程序。例如,你可能将本章的所有程序都放在一个名为chapterl的包里。要得到如何使用包的指南,请参考教材补充材料I.F。一复习题1.33什么是Java源程序的文件后级名,什么是Java字节码文件后缀?1.34Java编译器的输人和输出是什么?1.35编译Java程序的命令是什么?1.36运行Java程序的命令是什么?1.37什么是JVM?1.38Java可以运行在任何机器上吗?在一台计算机上运行Java需要什么?1.39如果运行程序的时候出现NoClassDefFoundError错误,是什么原因导致了这个错误?1.40如果运行程序的时候出现NoSuchMethodError错误,是什么原因导致了这个错误?1.9程序设计风格和文档6要点提示:良好的程序设计风格和正确的文档使程序更易阅读,并且能帮助程序员避免错误。程序设计风格(programmingstyle)决定程序的外观。如果把整个程序写在一行,它也会被正确地编译和运行,但是这是非常不好的程序设计风格,因为程序的可读性很差。文档(documentation)是关于程序的解释性评注和注释的一个结构体。程序设计风格与文档和编写代码的作用一样重要。良好的程序设计风格和适当的文档可以减少出错的机率,并且提高程序的可读性。本节给出儿条指导原则。关于Java程序设计风格和文档更详细的指南,可以在本书配套网站上的补充材料I.D中找到。1.9.1正确的注释和注释风格在程序的开头写一个总结,解释一下这个程序是做什么的、其主要特点以及所用到的独特技术。在较长的程序中还要加上注释,介绍每一个主要步骤并解释每个难以读懂之处。注释写得简明要是很重要的,不能让整个程序都充满注释而使程序很难读懂。除了行注释(以//开始)和块注释(以/开始)之外,Java还支持一种称为Java文档注释(javadoccomment)的特殊注释形式。javadoc注释以/**开始,以*/结尾。它们能使用JDK的javadoc命令提取成一个HTML文件。要获得更多信息,参见配套网站的补充材料III.Y。使用javadoc注释(/**...*/)来注释整个类或整个方法。为了将这些注释提取出来放在一个javadocHTML文件中,这些注释必须放在类或者方法头的前面。要注释方法中的某一步骤,使用行注释(/)。可以从www.cs.armstrong.edu/liang/javadoc/Exercise1.html看到一个javadocHTML文件的示例。相应的Java代码在www.cs.armstrong.edu/liang/javadoc/Exercisel.java中。1.9.2正确的缩进和空白保持一致的缩进风格会使程序更加清晰、易读、易于调试和维护。缩进(identation)用于描述程序中组成部分或语句之间的结构性关系。即使将程序的所有语句都写在一行中,Java也可以读懂这样的程序,但是正确的对齐能够使人们更易读懂和维护代码。在嵌套结构
16 弟 / 章 〆教学提示:教师可能需要学生使用包来组织程序。例如,你可能将本幸的所有程序都放在 , 一个名为 chapter丨的包里。要得到如何使用包的指南,请参考教材补充材料 I.F。 厂复习题 1.33 什么是 Java 源程序的文件后缀名,什么是 hva 宇节码文件后缀? 1.34 Java 编译器的输人和输出是什么? 1.35 编译 Java 程序的命令是什么? 1.36 运行 Java 程序的命令是什么? 1.37 什么是 JVM ? 1.38 Java 可以运行在任何机器上吗?在一台计算机上运行 Java需要什么? 1.39 如果运行程序的时候出现 NoClassDefFoundError 错误,是什么原因导致了这个错误? 1.40 如果运行程序的时候出现 NoSuchMethodError 错误,是什么原因导致了这个错误? 1 . 9 程序设计风格和文档 (/ 要点提示:良好的程序设计风格和正确的文档使程序更易阅读,并且能帮助程序员避免 触。 程序设计风格( programming style)决定程序的外观。如果把整个程序写在一行,它也 会被正确地编译和运行,但是这是非常不好的程序设计风格,因为程序的可读性很差。文档 ( documentation)是关于程序的解释性评注和注释的一个结构体。程序设计风格与文档和编 写代码的作用一样重要。良好的程序设计风格和适当的文档可以减少出错的机率,并且提髙 程序的可读性。本节给出几条指导原则。关于 Java 程序设计风格和文档更详细的指南,可 以在本书配套网站上的补充材料 I.D中找到。 1.9.1 正确的注释和注释风格 在程序的开头写一个总结,解释一下这个程序是做什么的、其主要特点以及所用到的独 特技术。在较长的程序中还要加上注释,介绍每一个主要步骤并解释每个难以读懂之处。注 释写得简明扼要是很重要的,不能让整个程序都充满注释而使程序很难读懂。 除了行注释(以 // 开始)和块注释(以 /* 开始)之外,Java 还支持一种称为 Java 文档 注释(javadoc comment)的特殊注释形式。javadoc 注释以 / * * 开始,以 V结尾。它们能使 用JDK 的 javadoc 命令提取成一个 HTML文件。要获得更多信息,参见配套网站的补充材 料 III.Yo 使用javadoc 注释( /**.*/)来注释整个类或整个方法。为了将这些注释提取出来放 在一个javadoc HTML 文件中,这些注释必须放在类或者方法头的前面。要注释方法中的某 一步骤,使用行注释(//)。 可以从 www.cs.armstrong.edu/liang/javadoc/Exercisel.html 看到一个javadoc HTML 文件 的示例。相应的 Java 代码在 www.cs.armstrong.edu/liang/javadoc/Exercisel.java 中。 1.9.2 正确的缩进和空白 保持一致的缩进风格会使程序更加清晰、易读、易于调试和维护。缩进(identation )用 于描述程序中组成部分或语句之间的结构性关系。即使将程序的所有语句都写在一行中, Java 也可以读懂这样的程序,但是正确的对齐能够使人们更易读懂和维护代码。在嵌套结构
17计算机、程序和Java概述中,每个内层的组成部分或语句应该比外层缩进两格。二元操作符的两边应该各加一个空格,如下面语句所示:System.out.println(3+4*4):不好的风格良好的风格System.out.println(3+4*4);1.9.3块的风格块是由花括号围起来的一组语句。块的写法有两种常用方式:次行(next-line)风格和行尾(end-of-line)风格,如下所示。public class Testpublic class Test(pubiic static void main(String) args)publicstaticvoidmain(String[l args)System.out.println("Block Styles";System.out.println("Block Styles");次行风格行尾风格次行风格将括号垂直对齐,因而使程序容易阅读,而行尾风格更节省空间,并有助于避免犯一些细小的程序设计错误。这两种风格都是可以采纳的。选择哪一种完全依赖于个人或组织的偏好。应该统一采用一种风格,建议不要将这两种风格混合使用。本书与JavaAPI源代码保持一致,都采用行尾风格。复习题1.41使用行尾括号风格,将下面的程序根据程序设计风格和文档指南进行重新格式化。public class Test//Main methodpublic static voidmain(String)args)/*tDisplayoutput*System.out.println("welcometoJava");11.10程序设计错误6要点提示:程序设计错误可以分为三类:语法错误、运行时错误和逻辑错误。1.10.1语法错误在编译过程中出现的错误称为语法错误(syntaxerror)或编译错误(compileerror)。语法错误是由创建代码时的错误引起的,例如:拼错关键字,忽略了一些必要的标点符号,或者左花括号没有对应的右花括号。这些错误通常很容易检测到,因为编译器会告诉你这些错误在哪儿,以及是什么原因造成的。例如:编译下面程序清单1-4中的程序会出现语法错误如图1-10所示。程序清单1-4ShowSyntaxErrors.java1 public class ShowSyntaxErrors(2public staticmain(String[]args)(3System.out.println("welcometoJava);45
计算机、程序和 java 概述 17 中,每个内层的组成部分或语句应该比外层缩进两格。 二元操作符的两边应该各加一个空格,如下面语句所示: System.out.println(3+4*4); 不好的风格 System,out.println(3 + 4 * 4); 良好的风格 1.9.3 块的风格 块是由花括号围起来的一组语句。块的写法有两种常用方式:次行(next - line) 风格和 行尾(end - of - line) 风格,如下所示。 public class Test public class Test { { public static void main(String[] args) { public static void main(String[] args) System,out.pri ntl n("Bl ock Styl es'* ); \ l System.out.println("Block Styles"); } } / } 次行风格 行尾风格 次行风格将括号垂直对齐,因而使程序容易阅读,而行尾风格更节省空间,并有助于避 免犯一些细小的程序设计错误。这两种风格都是可以采纳的。选择哪一种完全依赖于个人 或组织的偏好。应该统一采用一种风格,建议不要将这两种风格混合使用。本书与 Java API 源代码保持一致,都采用行尾风格。 复习题 1.41 使用行尾括号风格,将下面的程序根据程序设计风格和文档指南进行重新格式化。 public class Test { // Main method public static void main(String[] args) { /** Display output V System.out.println("Weicome to Java"); 1 . 1 0 程序设计错误 要点提示:程序设计错误可以分为三类:语法媒误、运行时样误和逻辑错误。 1.10.1 语法错误 在编译过程中出现的错误称为语法错误( syntax error) 或编译媒误(compile error)。语 法错误是由创建代码时的错误引起的,例如:拼错关键字,忽略了一些必要的标点符号,或 者左花括号没有对应的右花括号。这些错误通常很容易检测到,因为编译器会告诉你这些错 误在哪儿,以及是什么原因造成的。例如:编译下面程序清单中的程序会出现语法错误, 如图 1 - 10 所示。 程序清单 ShowSyntaxErrors.java 1 public class ShowSyntaxErrors { 2 public static main(String[] args) { 3 System.out.println("Weicome to Java); 4 > 5 >