重学Java(CS61b)

Hello World

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

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

一些关键的语法特征需要注意:

  • 该程序由一个类声明组成,该声明使用关键字public class声明。 在Java中,所有代码都存在于类中。
  • 运行的代码在一个名为 main的方法内, 该方法声明为public static void main(String[] args)
  • 用花括号 {} 来表示代码段的开头和结尾。
  • 语句必须以分号结束。

运行一个程序

执行Java程序最常用的方法是通过一系列程序运行它。 第一个是Java编译器,或者是javac。 第二个是Java解释器,或java

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

$ javac HelloWorld.java
$ java HelloWorld
Hello World! 

在上图中,$表示终端的命令提示符。

您可能会注意到我们在编译时包含’.java’,但在解释时我们不包含’.class’。 这就是它的方式(TIJTWII)。

变量和循环

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

public class HelloNumbers {
    public static void main(String[] args) {
        int x = 0;
        while (x < 10) {
            System.out.print(x + " ");
            x = x + 1;
        }
    }
}

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

$ javac HelloNumbers.java
$ java HelloNumbers
$ 0 1 2 3 4 5 6 7 8 9 

这个程序的一些有趣特性可能会让你大吃一惊:

  • 变量x必须在使用之前声明,并且必须给出一个类型。
  • 循环定义包含在花括号内,并且测试的布尔表达式包含在括号内。
  • print语句只是System.out.print而不是System.out.println。这意味着我们不应该包含换行符(返回)。
  • print语句在空格中添加了一个数字。这可以确保数字不会相互碰撞。尝试删除空间以查看会发生什么。
  • 当我们运行它时,我们的提示最终与数字相同。

在这些特征中,最重要的是变量具有声明的类型。

静态类型

Java最重要的特性之一是所有变量和表达式都具有所谓的静态类型。Java变量可以包含该类型的值,并且只包含该类型。此外,变量的类型永远不会改变。

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

public class HelloNumbers {
    public static void main(String[] args) {
        int x = 0;
        while (x < 10) {
            System.out.print(x + " ");
            x = x + 1;
        }
        x = "horse";
    }
}

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

$ 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代码都是类的一部分,因此我们必须定义函数,使它们属于某个类。 属于类的函数通常称为“方法”。 我们将在整个课程中互换使用这些术语。Java程序如下:

public class LargerDemo {
    public static int larger(int x, int y) {
        if (x > y) {
            return x;
        }
        return y;
    }

    public static void main(String[] args) {
        System.out.println(larger(8, 10));
    }
}

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

代码风格,注解,Javadoc

代码在很多方面都很漂亮。它可以简洁。它可以很聪明。它可以很有效率。新手代码中最不受重视的一个方面是代码风格。 当你作为一个新手编程时,你通常会一心想要让它工作,而不必再考虑它或者长时间保持它。

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

  • 一致的风格(间距,可变命名,支撑样式等)
  • 大小(不太宽的行,源文件不太长)
  • 描述性命名(变量,函数,类),例如 名称为year或getUserName而不是x或f的变量或函数。
  • 避免重复代码:除了一些更改之外,您几乎不应该有两个几乎完全相同的代码块。
  • 适当的注释。 Java中的行注释使用//分隔符。 块(又名多行注释)注释使用/* 和 */。

黄金法则是:编写代码,以便陌生人易于理解。

我们鼓励您编写自我记录的代码,即通过选择变量名称和函数名称,以便于确切地知道发生了什么。 但是,这并不总是足够的。例如,如果要实现复杂算法,则可能需要添加注释来描述代码。您对评论的使用应该是明智的。 通过经验和对他人代码的接触,您会感受到评论最合适的时候。

一个特别的注意事项是,您所有的方法和几乎所有的类都应该用一个注释来描述,使用所谓的Javadoc格式。在Javadoc注释中,块注释以一个额外的星号开始,例如/**,注释通常(但不总是)包含描述性标记。我们不会在这本教科书中讨论这些标签,但是请参阅上面的链接来了解它们是如何工作的。

作为没有标签的示例:

public class LargerDemo {
    /** Returns the larger of x and y. */           
    public static int larger(int x, int y) {
        if (x > y) {
            return x;
        }
        return y;
    }

    public static void main(String[] args) {
        System.out.println(larger(8, 10));
    }
}

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

你可能感兴趣的:(Java)