1.1 JAVA中的JDK
JDK指的是Java Development Kit,是一个由Oracle提供的Java开发工具包,包含了开发Java应用程序所需的各种组件,如Java编译器、Java运行时环境(JRE)、Java API类库、Java文档等等。其中JVM、JRE都是JDK的重要组成部件,初学者通常会混淆JRE和JVM下面我们来说一下这两者的区别。
-
JVM(Java虚拟机):是Java平台的核心组件之一,用于执行Java字节码。它将Java字节码翻译为操作系统可识别的机器码,使Java程序能够在不同的操作系统和硬件平台上运行。JVM是Java的运行时环境的核心,提供了内存管理、垃圾回收、安全性和线程管理等功能。
-
JRE(Java运行时环境):JRE(Java运行时环境)是一个包含了JVM(Java虚拟机)、Java类库和其他必要组件的软件环境,用于在计算机上运行Java程序。JRE提供了Java程序运行所必需的一切组件,包括Java类库、字节码解释器和JVM等,但不包括Java开发工具包(JDK)中的编译器和其他开发工具。与JDK不同,JRE只提供了运行Java程序所必需的组件,而不包括开发Java程序所必需的工具。如果您只是想运行Java程序而不打算进行Java应用程序的开发工作,那么安装JRE就足够了。
1.2 第一个JAVA程序
现在,让我们开始编写我们的第一个程序。首先启动NetBeans并从顶部菜单栏选择File> New Project …。 您将看到New Project对话框。在类别下选择Java with Maven,并在项目下选择Java Application。单击“下一步”继续。 在下一个屏幕上,将项目命名为mavenproject1并注意存储项目的位置。最后,单击“完成”以创建项目。
NetBeans会自动为您创建一个默认模板。我们把模板代码替换为以下代码:
/*
This is a simple JAVA program.
Call this file "Mavenproject1.java"
*/
package com.mycompany.mavenproject1;
//Print the words Hello World on the screen
public class Mavenproject1 {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Java中运行的每一行代码都必须在一个类(class)中。在上面的示例中,我们将类命名为Mavenproject1,Maven会在之后详细解释,注意类名应始终以大写字母开头。
注意:Java区分大小写:“MyClass”和“myclass”的含义不同。
Java文件的名称必须与类名相匹配。保存文件时,请使用类名并在文件名末尾添加“.java”后缀。
1.3 JAVA程序的基本架构
让我们深度刨析一下第一个程序。
1.3.1 注释(Comment)
我们的程序一开始是这样的:
/*
This is a simple JAVA program.
Call this file "Mavenproject1.java"
*/
这是一个Java注释。与大多数其他编程语言一样,Java允许您在程序源文件中输入注释。注释的内容会被编译器忽略。注释描述或解释程序的操作,以便任何阅读源代码的人都能理解。在第一个程序中,注释描述了程序,并提醒您源文件应该被称为Mavenproject1.java。当然,在实际应用程序中,注释通常解释程序的某个部分如何工作或特定功能的作用。
Java支持三种注释样式。第一个示例程序顶部显示的注释被称为多行注释。这种类型的注释必须以"/*“开始,并以”*/"结束。这两个注释符号之间的任何内容都会被编译器忽略。正如其名称所示,多行注释可以有多行。
在之后的代码段中,我们又给出了另一种注释,这种注释叫做单行注释。
//Print the words Hello World on the screen
单行注释以 // 开头,并在行末结束。通常,程序员使用多行注释进行较长的备注,而使用单行注释进行简短的逐行描述。第三种注释类型,文档注释,以 “/**” 开始,以 “*/” 结束,可以用来生成API文档。例如:
/**
* This class represents a person with a name and an age.
*/
public class Person {
// ...
}
文档注释可以包含一些特殊的标记,用于指示API文档中的特定元素,例如参数、返回值、异常等。例如:
/**
* Returns the sum of two integers.
*
* @param a the first integer
* @param b the second integer
* @return the sum of a and b
* @throws IllegalArgumentException if either a or b is negative
*/
public static int add(int a, int b) {
if (a < 0 || b < 0) {
throw new IllegalArgumentException("a and b must be non-negative");
}
return a + b;
}
1.3.2 包(Package)
在第一个Java程序中,我们除了注释程序的第一行如下:
package com.mycompany.mavenproject1;
在Java中,package是用来组织和管理类(关于类是什么,我们之后再说,它是很重要的!)的一种机制。它类似于文件系统中的文件夹,可以将相关的类组织在一起,并使它们更易于管理和复用。一个package可以包含多个类,也可以嵌套其他package,形成一个层次结构。
当我们在文件顶部写入package com.mycompany.mavenproject1;
,我们要求编译器将此文件包含在com.mycompany.mavenproject1
这个包中,在这个包中,com
是一个命名空间,用于表示这个包是一个商业或组织域名的一部分。mycompany
是公司或组织的名称,mavenproject1
是项目的名称。
这样设计的目的是为了避免不同公司或组织之间的类名冲突。通过使用不同的命名空间和包名,即使两个公司或组织使用了相同的类名,它们的完全限定名也不会冲突。
1.3.3 类(Class)
在上面的代码中,public class Mavenproject1
这行代码使用关键字class来声明一个新的类。Mavenproject1是类的名称标识符。整个类的定义,包括所有成员,将在开放花括号({)和闭合花括号(})之间。暂时不必过于关注类的细节,只需注意在Java中,所有程序活动都发生在类内。这是所有Java程序至少有一点面向对象的原因之一。
1.3.4 main()方法
main()
方法是所有Java应用程序的入口点。每当启动Java应用程序时,main()
方法是第一个被调用的方法。注意在我们的main()
方法的括号内部的String[] args
这几个词,这意味着main()方法可以接受一个字符串数组作为输入。目前不必担心这个问题。我们将在后续章节中介绍数组和输入。
public
关键字是一个访问修饰符,允许程序员控制类成员的可见性。当一个类成员被public
修饰时,那个成员可以被声明在其它类中的代码访问。(public
的相反是private
,它防止类外定义的代码使用该成员。)在这种情况下,main()
必须被声明为public
,因为当程序启动时,它必须被类外的代码调用。关键字static允许main()被调用而无需实例化类的特定实例。这是必要的,因为在创建任何对象之前,main()被Java虚拟机调用。关键字void
只是告诉编译器,main()
不返回任何值。正如你将看到的,方法也可以返回值。如果所有这些看起来有点混乱,不要担心。所有这些概念都将在后续章节中详细讨论。
如上所述,main()
是Java应用程序启动时调用的方法。请记住Java区分大小写。因此,Main和main是不同的。重要的是要了解Java编译器将编译不包含main()
方法的类。但是,Java无法运行这些类。因此,如果你打错了,将Main写成main,编译器仍然会编译你的程序。但是,Java会报告错误,因为它无法找到main()
方法。
让我们把目光转向main
方法里面:
System.out.println("Hello World!");
这行程序在输出窗口(位于屏幕底部)显示“Hello World”(不带引号)的行。在这个例子中,println()
显示传递给它的字符串。println()
也可用于显示其他类型的信息。该行以System.out开头。简要来说,System是一个预定义类,提供对系统的访问权限,而out是连接到控制台的输出流。这到之后详细解释。注意,此语句以分号结束。Java中的所有语句都必须以分号(;)结束。这类似于大多数其他编程语言,如C和C ++。 在System.out.println(“Hello World”);语句之后,我们用两个闭合大括号结束先前打开的大括号。