企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## [小试牛刀](https://lingcoder.gitee.io/onjava8/#/book/03-Objects-Everywhere?id=%e5%b0%8f%e8%af%95%e7%89%9b%e5%88%80) 最后,我们开始编写第一个完整的程序。我们使用 Java 标准库中的**Date**类来展示一个字符串和日期。 ~~~ // objects/HelloDate.java import java.util.*; public class HelloDate { public static void main(String[] args) { System.out.println("Hello, it's: "); System.out.println(new Date()); } } ~~~ 在本书中,所有代码示例的第一行都是注释行,其中包含文件的路径信息(比如本章的目录名是**objects**),后跟文件名。我的工具可以根据这些信息自动提取和测试书籍的代码,你也可以通过参考第一行注释轻松地在 Github 库中找到对应的代码示例。 如果你想在代码中使用一些额外的类库,那么就必须在程序文件的开始处使用**import**关键字来导入它们。之所以说是额外的,因为有一些类库已经默认自动导入到每个文件里了。例如:`java.lang`包。 现在打开你的浏览器在[Oracle](https://www.oracle.com/)上查看文档。如果你还没有从[Oracle](https://www.oracle.com/)网站上下载 JDK 文档,那现在就去 \[^8\] 。查看包列表,你会看到 Java 附带的所有不同的类库。 选择`java.lang`,你会看到该库中所有类的列表。由于`java.lang`隐式包含在每个 Java 代码文件中,因此这些类是自动可用的。`java.lang`类库中没有**Date**类,所以我们必须导入其他的类库(即 Date 所在的类库)。如果你不清楚某个类所在的类库或者想查看类库中所有的类,那么可以在 Java 文档中选择 “Tree” 查看。 现在,我们可以找到 Java 附带的每个类。使用浏览器的“查找”功能查找**Date**,搜索结果中将会列出**java.util.Date**,我们就知道了**Date**在**util**库中,所以必须导入 \**java.util.\*\**才能使用**Date**。 如果你在文档中选择**java.lang**,然后选择**System**,你会看到**System**类中有几个字段,如果你选择了**out**,你会发现它是一个静态的**PrintStream**对象。 所以,即使我们不使用**new**创建,**out**对象就已经存在并可以使用。**out**对象可以执行的操作取决于它的类型:**PrintStream**,其在文档中是一个超链接,如果单击该链接,我们将可以看到**PrintStream**对应的方法列表(更多详情,将在本书后面介绍)。 现在我们重点说的是**println()**这个方法。 它的作用是 “将信息输出到控制台,并以换行符结束”。既然如此,我们可以这样编码来输出信息到控制台。 代码示例: ~~~ System.out.println("A String of things"); ~~~ 每个 java 源文件中允许有多个类。同时,源文件的名称必须要和其中一个类名相同,否则编译器将会报错。每个独立的程序应该包含一个`main()`方法作为程序运行的入口。其方法签名和返回类型如下。代码示例: ~~~ public static void main(String[] args) { } ~~~ 关键字**public**表示方法可以被外界访问到。( 更多详情将在**隐藏实现**章节讲到)**main()**方法的参数是一个 字符串(**String**) 数组。 参数**args**并没有在当前的程序中使用到,但是 Java 编译器强制要求必须要有, 这是因为它们被用于接收从命令行输入的参数。 下面我们来看一段有趣的代码: ~~~ System.out.println(new Date()); ~~~ 上面的示例中,我们创建了一个日期(**Date**)类型的对象并将其转化为字符串类型,输出到控制台中。 一旦这一行语句执行完毕,我们就不再需要该日期对象了。这时,Java 垃圾回收器就可以将其占用的内存回收,我们无需去主动清除它们。 查看 JDK 文档时,我们可以看到在**System**类下还有很多其他有用的方法( Java 的牛逼之处还在于,它拥有一个庞大的标准库资源)。代码示例: ~~~ // objects/ShowProperties.java public class ShowProperties { public static void main(String[] args) { System.getProperties().list(System.out); System.out.println(System.getProperty("user.name")); System.out.println(System.getProperty("java.library.path")); } } ~~~ 输出结果(前20行): ~~~ java.runtime.name=Java(TM) SE Runtime Environment sun.boot.library.path=C:\Program Files\Java\jdk1.8.0_112\jr... java.vm.version=25.112-b15 java.vm.vendor=Oracle Corporation java.vendor.url=http://java.oracle.com/ path.separator=; java.vm.name=Java HotSpot(TM) 64-Bit Server VM file.encoding.pkg=sun.io user.script= user.country=US sun.java.launcher=SUN_STANDARD sun.os.patch.level= java.vm.specification.name=Java Virtual Machine Specification user.dir=C:\Users\Bruce\Documents\GitHub\on-ja... java.runtime.version=1.8.0_112-b15 java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment java.endorsed.dirs=C:\Program Files\Java\jdk1.8.0_112\jr... os.arch=amd64 java.io.tmpdir=C:\Users\Bruce\AppData\Local\Temp\ ~~~ `main()`方法中的第一行会输出所有的系统字段,也就是环境信息。**list()**方法将结果发送给它的参数**System.out**。在本书的后面,我们还会接触到将结果输出到其他地方,例如文件中。另外,我们还可以请求特定的字段。该例中我们使用到了**user.name**和**java.library.path**。