Beginng Java7(译):Java入门(第一章)

欢迎来到Java。 本章通过关注基础知识,向您介绍这项技术。 首先,您会收到“什么是Java?”问题的答案。 如果您以前没有遇到Java,答案可能会让您感到惊讶。 接下来,介绍一些可帮助您开始开发Java程序的基本工具,以及NetBeans集成开发环境,它简化了这些程序的开发。 最后,您将探索基本语言功能。

什么是Java?

Java是一种用于描述程序的语言,Java是一个运行用Java和其他语言编写的程序的平台(例如,Groovy,Jython和JRuby)。 本节向您介绍Java语言和Java平台。


注意要发现Java的历史,请查看Wikipedia的“Java(编程语言)”

(http://en.wikipedia.org/wiki/Java_(programming_language)#History)和“Java(软件平台)”platform)”
(http://en.wikipedia.org/wiki/Java_(software_platform)#History) .


Java是一种语言

Java是一种通用的,基于类的,面向对象的语言,采用C和C ++格式化,使现有的C / C ++开发人员能够更轻松地迁移到该语言。 毫不奇怪,Java借用了这些语言中的元素。 以下列表列出了其中一些元素:

•Java支持与C / C ++中相同的单行和多行注释样式,用于记录源代码。

•Java提供C和C ++语言中的if,switch,while,for和其他保留字。 Java还提供了在C ++中但在C中没有的try,catch,class,private和其他保留字。

•与C和C ++一样,Java支持字符,整数和其他基本类型。 此外,Java共享相同的保留字以命名这些类型; 例如,char(用于字符)和int(用于整数)。

•Java支持许多与C / C ++相同的运算符:算术运算符(+, - ,*,/和%)和条件运算符(?:)是示例。

•Java还支持使用大括号字符{和}来分隔语句块。

尽管Java类似于C和C ++,但它在许多方面也有所不同。 以下列表列出了其中一些差异:

•Java支持另一种称为Javadoc的注释样式。

•Java提供了在C或C ++中找不到的transient,synchronized,strictfp和其他保留字。

•Java的字符类型的大小比在C和C ++中找到的此类型的版本大,Java的整数类型不包括这些类型的无符号变体(例如,Java没有等效的C / C ++无符号长整数类型), Java的原始类型具有保证的大小,而不保证等效的C / C ++类型。

•Java不支持所有C / C ++运算符。 例如,没有sizeof运算符。 此外,Java提供了一些在C / C ++中找不到的运算符。 例如,>>>(无符号右移)和instanceof是Java独有的。

•Java提供标记的break和continue语句。 C / C ++ break和continue语句的这些变体提供了一种比C / C ++的goto语句更安全的替代方法,Java不支持该语句。


注释注释,保留字,类型,运算符和语句是基本语言功能的示例,本章稍后将对此进行讨论


Java程序最初是符合Java语法的源代码,用于将符号组合成有意义的实体的规则。 Java编译器将存储在具有“.java”文件扩展名的文件中的源代码转换为等效的可执行代码,称为字节码,它存储在具有“.class”文件扩展名的文件中。


注意存储编译的Java代码的文件称为类文件,因为它们通常存储Java类的运行时表示,这是第2章中讨论的语言特性。


Java语言在设计时考虑了可移植性。 理想情况下,Java开发人员编写Java程序的源代码一次,将此源代码编译为字节码一次,并在支持Java的任何平台(例如,Windows,Linux和Mac OS X)上运行字节码,而无需更改 源代码和重新编译。 通过确保原始类型在不同平台上具有相同的大小来实现可移植性。 例如,Java的整数类型的大小始终为32位。

Java语言的设计也考虑了健壮性。 Java程序应该比它们的C / C ++对应程序更容易崩溃。 Java部分地通过不实现某些可能使程序不那么健壮的C / C ++特性来实现稳健性。 例如,指针(存储其他变量地址的变量)会增加程序崩溃的可能性,这就是Java不支持此C / C ++功能的原因。

Java是一个平台

Java是一个执行基于Java的程序的平台。 与具有物理处理器(例如,Intel处理器)和操作系统(例如,Windows 7)的平台不同,Java平台包括虚拟机和执行环境。

虚拟机是基于软件的处理器,具有自己的一组指令。 Java虚拟机(JVM)的关联执行环境包含一个庞大的预构建功能库,通常称为标准类库,Java程序可以使用它来执行例行任务(例如,打开文件并读取其内容)。 执行环境还包括将JVM连接到底层操作系统的“粘合”代码。


注意“粘合”代码由特定于平台的库组成,用于访问操作系统的窗口,网络和其他子系统。 它还包含使用Java Native Interface(JNI)在Java和操作系统之间桥接的代码。 我在附录C中讨论了JNI。您可能还想查看Wikipedia的“Java Native Interface”条目(http://en.wikipedia.org/wiki/Java_Native_Int rface)以了解JNI。


当Java程序启动程序启动Java平台时,JVM将被启动并被告知通过称为类加载器的组件将Java程序的启动类文件加载到内存中。 加载类文件后,执行以下任务:

在执行期间,类文件可能引用另一个类文件。 在这种情况下,类加载器用于加载引用的类文件,字节码验证器然后验证类文件的字节码,解释器/ JIT在这个其他类文件中执行适当的字节码序列。

Java平台的设计考虑了可移植性。 通过在底层操作系统上提供抽象,字节码指令序列应该在Java平台上一致地执行。 然而,这在实践中并不总是得到证实。 例如,许多Java平台依赖底层操作系统来调度线程(在第4章中讨论),并且线程调度实现因操作系统而异。 因此,您必须小心确保程序旨在适应这些变幻莫测

Java平台的设计也考虑了安全性。 除了字节码验证器之外,该平台还提供了一个安全框架,以帮助确保恶意程序不会破坏运行程序的底层环境。 附录C讨论了Java的安全框架。

安装和使用JDK 7

存在三个用于开发不同类型的Java程序的软件开发工具包(SDK):
Java SE(标准版)软件开发工具包(称为JDK)用于创建面向桌面的独立应用程序和称为applet的Web浏览嵌入式应用程序。 您将在本节后面介绍独立应用程序。 我不讨论小程序,因为它们不像以前那样受欢迎。

•Java ME(移动版)SDK用于创建称为MIDlet和Xlet的应用程序。 MIDlet以移动设备为目标,这些设备具有小型图形显示,简单的数字键盘接口和有限的基于HTTP的网络访问。 Xlet通常以面向电视的设备为目标,例如蓝光光盘播放器。 Java ME SDK要求也安装JDK。 我不讨论MIDlet或Xlet。

•Java EE(企业版)SDK用于创建基于组件的企业应用程序。 组件包括servlet,可以将其视为applet的服务器等效项,以及基于servlet的Java Server Pages(JSP)。 Java EE SDK要求也安装JDK。 我不讨论servlet。

本节首先向您介绍JDK 7(也称为Java 7,后面章节中使用的术语),首先向您展示如何安装此最新的主要Java SE版本。 然后,它将向您展示如何使用JDK 7工具开发一个简单的独立应用程序 - 我将使用从现在开始的较短的应用程序术语。

安装JDK 7

将浏览器指向http://www.oracle.com/technetwork/java/jav se / downloads / index-jsp- 138363.html并按照生成的网页上的说明下载相应的JDK 7安装exe或gzip tarball 适用于Windows,Solaris或Linux平台的文件。

下载后,运行Windows可执行文件或取消归档Solaris / Linux gzip tarball,并修改PATH环境变量以包含生成的主目录的bin子目录,以便您可以从文件系统中的任何位置运行JDK 7工具。 例如,您可以在Windows平台上的PATH中包含C:\ Program Files \ Java \ jdk1.7.0主目录。 您还应该更新JAVA_HOME环境变量以指向JDK 7的主目录,以确保任何Java相关软件都可以找到此目录。
JDK 7的主目录包含几个文件(例如,README.html和LICENSE)和子目录。 从本书的角度来看,最重要的子目录是bin,它包含了我们将在本书中使用的各种工具。 以下列表列出了其中一些工具:
•jar:用于将类文件和资源文件打包成具有“.jar”文件扩展名的特殊ZIP文件的工具

•java:用于运行应用程序的工具

•javac:启动Java编译器以编译一个或多个源文件的工具

•javadoc:一种从Javadoc注释生成特殊的基于HTML的文档的工具

JDK的工具在命令行环境中运行。 您可以通过启动命令窗口(Windows)或shell(Linux / Solaris)来建立它,它会向您显示一系列输入命令(程序名称及其参数)的提示。 例如,命令窗口(在Windows平台上)通过显示驱动器号和路径组合(例如,C:\)提示您输入命令

您可以通过键入命令来响应提示,然后按Return / Enter键告诉操作系统执行命令。 例如,javac x.java后跟Return / Enter键按下会导致操作系统启动javac工具,并将正在编译的源文件的名称(x.java)作为其命令行参数传递给此工具。 如果您指定了星号(*)通配符,就像在javac * .java中一样,javac将编译当前目录中的所有源文件。 要了解有关在命令行工作的更多信息,请查看Wikipedia的“命令行界面”条目(http://en.wikipedia.org/wiki/Command line_interface)。

另一个重要的子目录是jre,它存储JDK的Java运行时环境(JRE)的私有副本。 JRE实现了Java平台,可以运行Java程序。 对运行(但不开发)Java程序感兴趣的用户将下载公共JRE。 由于JDK包含自己的JRE副本,因此开发人员无需下载和安装公共JRE。


注意JDK 7附带了外部文档,其中包含对Java的许多API的广泛参考(请参阅http://en.wikipedia.org/wiki/Application_prog amming_interface以了解该术语)。 您可以从http://www.oracle.com/technetwork/java/jav se / downloads / index-jsp-138363.html下载文档存档,以便您可以脱机查看此文档。 但是,由于存档相当大,您可能更愿意在http://download.oracle.com/javase/7/docs/index.html上在线查看文档。


使用JDK 7

应用程序由一个名为main的入口点方法组成。 尽管对类和方法的正确讨论必须等到第2章,但现在只需将类视为创建对象的工厂(也在第2章中讨论),并将方法视为命名的指令序列即可。 调用方法时执行的。 清单1-1向您介绍了第一个应用程序。

Listing 1-1. Greetings from Java
class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello, world!");
}
}

清单1-1声明了一个名为HelloWorld的类,它为这个简单的应用程序提供了一个框架。 它还在此类中声明了一个名为main的方法。 当您运行此应用程序时,您将很快学会如何执行此操作,这是被调用的入口点方法及其执行的指令。

main()方法包括标识此方法的标头和位于开括号字符({)和闭括号字符(})之间的代码块。 除了命名此方法之外,标头还提供以下信息:

•public:这个保留字使main()对调用此方法的启动代码可见。 如果public不存在,编译器将输出一条错误消息,指出它找不到main()方法。

•static:此保留字使此方法与类关联,而不是与从此类创建的任何对象关联。 因为调用main()的启动代码不会从类中创建对象以调用此方法,所以它要求将该方法声明为static。 虽然如果缺少static,编译器不会报告错误,但是不能运行HelloWorld,如果没有正确的main()方法,它将不是应用程序。

•void:此保留字表示该方法不返回值。 如果将void更改为类型的保留字(例如,int),然后插入返回此类型值的语句(例如,返回0;),则编译器不会报告错误。 但是,您将无法运行HelloWorld,因为不存在正确的main()方法。

•(String [] args):此参数列表由名为args的String []类型的单个参数组成。 启动代码将一系列命令行参数传递给args,这使得这些参数可用于main()中执行的代码。 您将在第2章中了解参数和参数。

代码块由单个System.out.println(“Hello,world!”)组成; 方法调用。 从左到写,System标识一个标准的系统实用程序类,out标识位于System中的对象变量,其方法允许您输出各种类型的值,可选地后跟换行符到标准输出设备,println标识一个打印它的方法 参数后跟换行字符到标准输出,“Hello,world!” 是一个字符串(由双引号“字符和单元处理”分隔的字符序列),作为参数传递给println并写入标准输出(不写入起始“和结束”双引号字符;这些字符分隔 但不是字符串的一部分)。


注意可以在命令行运行所有桌面Java / nonJava应用程序。 在图形用户界面及其用于输入和输出值的控件(例如,文本字段)之前,这些应用程序在标准I / O(一种源自Unix操作系统的输入/输出机制)的帮助下获得其输入并生成其输出,以及 它由标准输入,标准输出和标准错误设备组成。

用户可以通过标准输入设备(通常是键盘输入数据,但可以指定文件–Unix将所有内容视为文件)。 应用程序的输出将出现在标准输出设备上(通常是计算机屏幕,但可选择文件或打印机)。 表示错误的输出消息将输出到标准错误设备(屏幕,文件或打印机),以便可以单独处理这些消息。


现在您已了解清单1-1的工作原理,您将需要创建此应用程序。 完成以下步骤以完成此任务:

1.将清单1-1复制到名为HelloWorld.java的文件中。
2.执行javac HelloWorld.java以编译此源文件。 如果您没有指定“.java”文件扩展名,javac会抱怨。

如果一切顺利,您应该在当前目录中看到HelloWorld.class文件。 现在执行java HelloWorld来运行这个类文件的main()方法。 不要指定“.class”文件扩展名或java会抱怨。 您应该观察以下输出:Hello,world!恭喜! 您已经运行了第一个基于Java的应用程序。 您将有机会在本书中运行更多应用程序。

安装和使用NetBeans 7

Java语言基础知识

大多数计算机语言都支持注释,标识符,类型,变量,表达式和语句。 Java也不例外,本节将从Java的角度介绍这些基本语言特性。

注释

需要记录程序的源代码,以便您(以及任何其他必须维护它的人)可以现在和以后理解它。 源代码应在编写时以及修改时记录。 如果这些修改影响现有文档,则必须更新文档,以便准确地解释代码。

Java提供了用于在源代码中嵌入文档的注释功能。 编译源代码时,Java编译器会忽略所有注释 - 不生成任何字节码。 支持单行,多行和Javadoc注释。

单行注释

单行注释占用一行源代码的全部或部分。 此注释以//字符序列开头,并继续说明文字。 编译器忽略从//到//出现的行末尾的所有内容。 以下示例显示单行注释:

int x = (int) (Math.random()*100); // Obtain a random x coordinate from 0 through 99.

单行注释对于在此代码中插入简短但有意义的源代码说明非常有用。 不要使用它们来插入无用的信息。 例如,在声明变量时,不要插入无意义的注释,例如//此变量是整数。

多行注释

多行注释占用一行或多行源代码。 此注释以/ 字符序列开头,以解释性文本继续,以 /字符序列结束。 编译器忽略/ /的所有内容。 以下示例演示了多行注释:

static boolean isLeapYear(int year)
{
/*
A year is a leap year if it is divisible by 400, or divisible by 4 but
not also divisible by 100.
*/
if (year%400 == 0)
return true;
else
if (year%100 == 0)
return false;
else
if (year%4 == 0)
return true;
else

return false;
}




该示例介绍了用于确定一年是否是闰年的方法。 要理解的代码的重要部分是多行注释,它澄清了确定年份值是否代表闰年的表达式。


小心您不能在另一个内部放置一条多行注释。 例如,/ * / *嵌套多行注释是非法的! * / * /不是有效的多行注释。


Javadoc注释

Javadoc注释(也称为文档注释)占用一行或多行源代码。 此注释以/ *字符序列开头,以解释性文本继续,以 /字符序列结束。 编译器忽略/ * /的所有内容。 以下示例演示了Javadoc注释:

/**
* Application entry point
*
* @param args array of command-line arguments passed to this method
*/
public static void main(String[] args)
{
// TODO code application logic here
}

此示例以描述main()方法的Javadoc注释开头。 夹在/ * /之间的是方法的描述,它可以(但不包括)HTML标记(例如

/ </ code>)和@param Javadoc标记( @ -prefixed指令)。该
以下列表标识了几个常用标记:
•@author识别源代码的作者。

•@deprecated标识不再使用的源代码实体(例如,方法)。

•@ param标识方法参数之一。

•@ see提供了一个参见参考。

•@since标识实体首次发起的软件版本。

•@return标识方法返回的值的类型。

清单1-2给出了我们的HelloWorld应用程序,其中包含描述HelloWorld类及其main()方法的文档注释。

Listing 1-2. Greetings from Java with documentation comments
/**
A simple class for introducing a Java application.
@author Jeff Friesen
*/
class HelloWorld
{
/**
Application entry point
@param args array of command-line arguments passed to this method
*/
public static void main(String[] args)
{
System.out.println("Hello, world!");
}
}

我们可以使用JDK的javadoc工具将这些文档注释提取到一组HTML文件中,如下所示:

javadoc -private HelloWorld.java

javadoc默认为公共类和这些类的公共/受保护成员生成基于HTML的文档,您将在第2章中了解这些概念。因为HelloWorld不公开,指定javadoc HelloWorld.java会导致javadoc抱怨没有公共或受保护 发现了课程的文件。 解决方法是指定javadoc的-private命令行选项。

javadoc通过输出以下消息进行响应:

Loading source file HelloWorld.java...
Constructing Javadoc information...
Standard Doclet version 1.7.0
Building tree for all the packages and classes...
Generating \HelloWorld.html...
Generating \package-frame.html...
Generating \package-summary.html...
Generating \package-tree.html...
Generating \constant-values.html...
Building index for all the packages and classes...
Generating \overview-tree.html...
Generating \index-all.html...
Generating \deprecated-list.html...
Building index for all classes...
Generating \allclasses-frame.html...
Generating \allclasses-noframe.html...
Generating \index.html...
Generating \help-doc.html...

它还会生成多个文件,包括index.html入口点文件。 将浏览器指向此文件,您应该看到类似于图1-4中所示的页面。
在这里插入图片描述

图1-4。 进入HelloWorld的javadoc的入口点页面提供了对文档的轻松访问


注意JDK 7的外部文档与图1-4具有相似的外观和组织,因为该文档也是由javadoc生成的。


标识符

需要对源代码实体(如类和方法)进行命名,以便可以从代码中的其他位置引用它们。 Java为此提供了标识符功能。

标识符由字母(AZ,az或其他人字母表中的等效大写/小写字母),数字(0-9或其他人字母表中的等效数字),连接标点字符(例如,下划线)和货币符号组成( 例如,美元符号$)。 此名称必须以字母,货币符号或连接标点符号开头; 它的长度不能超过它出现的线。

有效标识符的示例包括i,counter,loop10,border $ color和_char。 无效标识符的示例包括50y(以数字开头)和第一#name(#不是有效的标识符符号)。


注意Java是区分大小写的语言,这意味着仅在大小写不同的标识符被视为单独的标识符。 例如,salary 和Salary 是单独的标识符。


几乎任何有效的标识符都可以被选择来命名类,方法或其他源代码实体。 但是,某些标识符是为特殊目的而保留的; 它们被称为保留词。 Java保留以下标识符:abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, enum, else, extends, false, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, null, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, true, try, void, volatile, and while. 如果您尝试在其使用上下文之外使用任何这些保留字,编译器将输出错误消息。


注意Java的大部分保留字也称为关键字。 三个例外是false,null和true,它们是文字的例子(逐字指定的值)。


类型

程序处理不同类型的值,例如整数,浮点值,字符和字符串。 类型标识一组值(及其在内存中的表示)以及一组将这些值转换为该集合的其他值的操作。 例如,整数类型标识没有小数部分和面向整数的数学运算的数值,例如添加两个整数以产生另一个整数。


注意Java是一种强类型语言,这意味着每个表达式,变量等都具有编译器已知的类型。 此功能可帮助编译器在编译时检测与类型相关的错误,而不是在运行时显示这些错误。 表达式和变量将在本章后面讨论。


Java将类型分类为基本类型,用户定义类型和数组类型。

原始类型

基本类型是由语言定义的类型,其值不是对象。 Java支持布尔,字符,字节整数,短整数,整数,长整数,浮点和双精度浮点基本类型。 它们在表1-1中描述。

Table 1-1. Primitive Types

在这里插入图片描述

表1-1根据其保留字,大小,最小值和最大值描述了每种基本类型。 “ - ”条目表示它出现的列不适用于该条目行中描述的基元类型。

size列根据该类型的值在内存中占用的位数(二进制数字 - 每个数字为0或1)来标识每个基本类型的大小。 除了布尔值(其大小取决于实现 - 一个Java实现可能在一个位中存储布尔值,而另一个实现可能需要一个8位字节以提高性能),每个基本类型的实现都具有特定的大小。

最小值和最大值列标识可由每种类型表示的最小值和最大值。除布尔值(其唯一值为真和假)外,每个基元类型都具有最小值和最大值。

字符类型的最小值和最大值是指Unicode,它是在世界上大多数书写系统中表达的文本的一致编码,表示和处理的标准。 Unicode的是与通用字符集,编码占世界的书面语言的各种符号标准联合开发。 Unicode 0是“第一个Unicode代码点”的简写 - 代码点是一个整数,4表示符号(例如,A)或控制字符(例如,换行符或制表符),或者与其他代码点组合形成一个符号。查看Wikipedia的“Unicode”条目(http://en.wikipedia.org/wiki/Unicode)以了解有关此标准的更多信息,以及Wikipedia的“通用字符集”条目(http://en.wikipedia.org/wiki/ Universal_Char cter_Set)了解有关此标准的更多信息。


注意字符类型的限制意味着此类型是无符号的(所有字符值都是正数)。 相反,

每个数字类型都是有符号的(它支持正值和负值)。


猜你喜欢

转载自blog.csdn.net/m0_37696990/article/details/83034880