欢迎光临散文网 会员登陆 & 注册

【reading】【中文】 1.1 Essentials | 基本要素

2023-07-12 22:26 作者:武宣博  | 我要投稿

Hello World

让我们来看看我们的第一个Java程序。运行时,下面的程序会将“Hello world!”打印到屏幕上。

对于像Python这样的语言来说,这可能看起来过于冗长。然而,这都是有原因的,我们将在接下来的几周内逐渐理解。需要注意的一些关键语法特点:

程序由一个类声明组成,使用关键字public class进行声明。在Java中,所有的代码都存在于类中。 运行的代码位于一个名为main的方法中,该方法声明为public static void main(String[] args)。 我们使用大括号{和}来表示代码段的开始和结束。 语句必须以分号结束。 这不是一本Java教材,所以我们不会详细讨论Java的语法。如果你需要参考资料,可以考虑Paul Hilfinger的免费电子书《A Java Reference》,或者如果你想要一本更传统的书,可以考虑Kathy Sierra和Bert Bates的《Head First Java》。

为了好玩,看看其他语言中的Hello World。

运行Java程序

执行Java程序最常见的方法是通过两个程序的顺序运行。第一个是Java编译器(javac),第二个是Java解释器(java)。

例如,要运行HelloWorld.java,我们会在终端中输入命令javac HelloWorld.java,然后输入命令java HelloWorld。结果会像这样:

上图中,$表示我们终端的命令提示符。你的命令提示符可能会更长。

你可能会注意到,我们在编译时包含了'.java',但在解释时没有包含'.class'。这就是它的工作方式(TIJTWII)。

练习1.1.1.在你的计算机上创建一个名为HelloWorld.java的文件,并复制粘贴上面的程序。尝试运行javac HelloWorld.java命令。看起来好像什么都没有发生。

然而,如果你查看目录,你会发现一个名为HelloWorld.class的新文件被创建了。我们稍后会讨论这是什么。

现在尝试输入java HelloWorld命令。你应该在终端上看到“Hello World!”被打印出来。

只是为了好玩。尝试使用像Notepad、TextEdit、Sublime、vim或你喜欢的任何文本编辑器打开HelloWorld.class。你会看到很多只有Java解释器才能理解的垃圾代码。这是Java字节码,我们在课程中不会讨论它。

变量和循环

下面的程序将打印出从0到9的整数。

当我们运行这个程序时,我们会看到:

这个程序的一些有趣特点可能会引起你的注意:

我们必须在使用变量之前声明它,并给它一个类型! 我们的循环定义包含在大括号{}中,被测试的布尔表达式包含在括号()中。 我们的打印语句只是System.out.print,而不是System.out.println。这意味着我们不应该包含换行符(回车)。 我们的打印语句在数字后面添加了一个空格。这样可以确保数字之间不会重叠。尝试删除空格看看会发生什么。 当我们运行它时,我们的提示符会出现在与数字同一行上(如果你愿意,你可以在下一个练习中修复这个问题)。 在这些特点中,最重要的特点是变量有一个声明的类型。我们稍后会回到这个问题,但首先,我们来做一个练习。

练习1.1.2.修改HelloNumbers,使其打印出从0到9的累加和。例如,你的输出应该以0 1 3 6 10...开始,以45结束。

此外,如果你有审美的追求,可以修改程序,使其在最后打印一个新行。

Gradescope

本课程的作业是通过一个名为gradescope的网站进行评分的。如果你正在参加与本课程配套的加利福尼亚大学课程,你将使用这个网站提交作业以获得成绩。如果你只是为了好玩,你可以使用gradescope来检查你的作业。要注册,请使用入口代码93PK75。有关gradescope和如何提交作业的更多信息,请参见gradescope指南(链接稍后提供)。

静态类型

Java最重要的特点之一是所有的变量和表达式都有所谓的静态类型。Java变量只能包含该类型的值,而且类型一旦确定就不能改变。

Java编译器的一个关键特点是它执行静态类型检查。例如,假设我们有下面的程序:

编译这个程序,我们会看到:

$ javac HelloNumbers.java HelloNumbers.java:9: error: incompatible types: String cannot be converted to int        x = "horse";                ^ 1 error 编译器在运行之前就拒绝了这个程序。这是一件大事,因为这意味着在世界上运行这个程序的人永远不会遇到类型错误!

这与Python等动态类型语言不同,用户可以在执行过程中遇到类型错误!

除了提供额外的错误检查外,静态类型还可以让程序员准确地知道自己正在处理的对象的类型。我们将在接下来的几周中看到这一点的重要性。这是我个人最喜欢的Java特性之一。

总结一下,静态类型具有以下优点:

编译器确保所有的类型是兼容的,这使得程序员更容易调试他们的代码。 由于代码保证没有类型错误,因此编译后的程序的用户永远不会遇到类型错误。例如,Android应用程序是用Java编写的,通常只以.class文件的形式分发,即以编译格式分发。因此,这样的应用程序不应该由于类型错误而崩溃,因为它们已经被编译器检查过了。 每个变量、参数和函数都有一个声明的类型,这使得程序员更容易理解和推理代码。 然而,我们将看到静态类型也有缺点,这将在后面的章节中讨论。

额外的思考练习

在Java中,我们可以说System.out.println(5 + " ");。但在Python中,我们不能像上面那样说print(5 + "horse")。为什么会这样?

考虑下面这两个Java语句:

这两个语句中,第一个会成功;第二个会给出一个编译错误。由于Java是强类型的,如果你告诉它h是一个字符串,它可以连接这些元素并给你一个字符串。但是当h是一个整数时,它不能连接一个数字和一个字符串并给你一个数字。

Python不限制类型,它无法假设你想要的类型。x = 5 + "horse"应该是一个数字吗?一个字符串?Python不知道。所以它会报错。

在这种情况下,System.out.println(5 + "horse");,Java将参数解释为字符串连接,并打印出"5horse"作为结果。或者更有用的是,System.out.println(5 + " ");将在你的"5"后面打印一个空格。

System.out.println(5 + "10");会打印什么?510还是15?System.out.println(5 + 10);呢?

在Java中定义函数

在像Python这样的语言中,函数可以在任何地方声明,甚至在函数外部。例如,下面的代码声明了一个返回两个参数中较大值的函数,并使用这个函数计算并打印出8和10中较大的数:

由于所有的Java代码都是类的一部分,所以我们必须定义函数,使它们属于某个类。作为类的一部分的函数通常被称为“方法”。我们将在整个课程中交替使用这两个术语。与上面的代码相对应的Java程序如下所示:

这里的新语法是我们使用关键字public static声明了我们的方法,这是Python的def关键字的一个非常粗略的类比。我们将在下一章中看到其他声明方法的方式。

这里给出的Java代码确实看起来更冗长!你可能会认为这种编程语言会减慢你的速度,事实上,在短期内确实会减慢你的速度。把所有的东西都想象成我们还不理解的安全设备。当我们构建小型程序时,所有这些东西似乎都是多余的。然而,当我们开始构建大型程序时,我们会开始欣赏到所有额外的复杂性。

作为类比,使用Python编程有点像Dan Osman在Lover's Leap上进行自由攀岩。速度可能很快,但危险。相比之下,Java更像在这个视频中使用绳索、头盔等。

代码风格、注释、Javadoc

代码可以以许多方式变得美观。它可以简洁。它可以巧妙。它可以高效。初学者最不重视的代码方面之一是代码风格。当你作为初学者编程时,你通常只关注让它工作,而不考虑再次查看它或在很长一段时间内维护它。

在这门课程中,我们将努力保持我们的代码可读性。良好的编码风格的一些最重要特点是:

一致的风格(间距、变量命名、大括号风格等) 大小(行不宽,源文件不太长) 描述性命名(变量、函数、类),例如使用year或getUserName这样的变量或函数名称,而不是x或f。 避免重复的代码:你几乎不应该有两个几乎相同但除了一些更改之外的重要代码块。 适当的注释。Java中的行注释使用//分隔符。块(也称为多行注释)注释使用/和/。 黄金法则是:编写你的代码,使陌生人能够轻松理解。

这是课程的官方代码风格指南。值得一看!

通常情况下,我们愿意承担轻微的性能损失,只是为了让我们的代码更简单易懂。我们将在后面的章节中举例说明。

注释

我们鼓励你编写自解释的代码,即通过选择易于理解的变量名和函数名来知道发生了什么。然而,这并不总是足够的。例如,如果你正在实现一个复杂的算法,你可能需要添加注释来描述你的代码。你使用注释应该审慎。通过经验和接触他人的代码,你会对何时适合使用注释有一个感觉。

一个特殊的注意事项是,几乎所有的方法和大多数的类都应该使用所谓的Javadoc格式的注释进行描述。在Javadoc注释中,块注释以额外的星号开始,例如/**,注释通常(但不总是)包含描述性的标签。我们不会在这本教材中讨论这些标签,但可以参考上面的链接了解它们的工作原理。

作为一个没有标签的示例:

广泛使用的javadoc工具可以用来生成代码的HTML描述。我们将在后面的章节中看到示例。

接下来做什么 在每章的最后,将提供链接,让你知道可以使用到目前为止所学的材料完成哪些练习,按照应完成的顺序列出。

Homework 0

Lab 1b

Lab 1

Discussion 1

【reading】【中文】 1.1 Essentials | 基本要素的评论 (共 条)

分享到微博请遵守国家法律