Java最高

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程

1.概述

在本教程中,我们将快速浏览类及其特性和核心功能。

2.IO

系统是一部分. lang,它的主要特性之一是允许我们访问标准I/O流。

简单地说,它公开了三个字段,每个字段对应一个流:

  • 犯错

2.1。system . out

system . out指向标准输出流,将其公开为PrintStream,我们可以使用它来将文本打印到控制台:

system . out。打印(“一些内联消息”);

的高级用法系统是调用System.setOut,我们可以使用它来自定义位置system . out会写:

//重定向到文本文件系统。一套(新PrintStream(“filename.txt”);

2.2。System.err

System.err很像system . out。这两个字段都是PrintStream,两者都用于将消息打印到控制台。

System.err表示标准错误,我们专门使用它来输出错误消息:

System.err。print("一些内联错误消息");

控制台通常会呈现不同于输出流的错误流。

如需更多信息,请查看PrintStream文档。

2.3。系统

系统指出标准,暴露它作为一个InputStream,我们可以用它从控制台读取输入。

尽管需要更多的参与,我们仍然可以做到:

public String readUsername(int length) throws IOException {byte[] name = new byte[length];System.in.read(name, 0, length); // by default, from the console return new String(name); }

通过调用System.in.read时,应用程序停止并等待来自标准in的输入。无论下一个长度字节将从流中读取并存储在字节数组中。

用户键入的任何其他内容都保留在流中他在等另一个电话阅读。

当然,在这么低的水平上操作是很有挑战性的,而且很容易出错,所以我们可以稍微清理一下BufferedReader:

public String readUsername() throws IOException {BufferedReader reader = new BufferedReader(new InputStreamReader(system .));返回reader.readLine ();}

按照上述安排,readLine会读的系统直到用户点击return,这更接近我们的预期。

注意,在这种情况下,我们故意不关闭流。关闭的标准意味着在程序的生命周期中不能再次读取它!

最后,一个高级用法系统是调用System.setIn重定向到不同的InputStream

3.实用方法

系统为我们提供了很多方法来帮助我们,比如:

  • 访问控制台
  • 复制数组
  • 观测日期和时间
  • 退出JRE
  • 访问运行时属性
  • 访问环境变量和
  • 垃圾收集管理

3.1。访问控制台

Java 1.6引入了与控制台交互的另一种方式,而不仅仅是简单的使用system . out直接。

我们可以通过调用来访问它System.console:

public String readUsername() {Console Console = System.console();返回控制台== null ?空:控制台。readLine("%s", "Enter your name: "); }

注意,根据底层操作系统以及我们启动Java来运行当前程序的方式,控制台可能会返回空,所以在使用前一定要检查

检查控制台更多用途的文档。

3.2。复制数组

System.arraycopy是一种古老的c风格的方法,用于将一个数组复制到另一个数组中。

大多数情况下,arraycopy将一个完整的数组复制到另一个数组中:

int[] a = {34, 22, 44, 2, 55, 3};int[] b = new int[a.length];System.arraycopy(a, 0, b, 0, a.length); assertArrayEquals(a, b);

但是,我们可以指定两个数组的起始位置,以及要复制多少个元素。

例如,我们想要从一个,从一个[1]b,从b [3]:

System.arraycopy(a, 1, b, 3, 2); assertArrayEquals(new int[] {0, 0, 0, 22, 44, 0}, b);

同时,也要记住,arraycopy将把:

  • NullPointerException如果任意一个数组
  • IndexOutOfBoundsException如果复制引用了超出其范围的任何一个数组
  • ArrayStoreException如果复制导致类型不匹配

3.3。观测日期和时间

有两种方法与时间相关系统。一个是currentTimeMillis另一个是nanoTime

currentTimeMillis返回自Unix纪元以来经过的毫秒数,即UTC时间1970年1月1日12:00:

public long nowPlusOneHour() {return System.currentTimeMillis() + 3600 * 1000L;} public String nowprettyprint(){返回新的日期(System.currentTimeMillis()).toString();}

nanoTime返回相对于JVM启动的时间。我们可以多次调用它来标记应用程序中时间的流逝:

long startTime = System.nanoTime();/ /……long endTime = System.nanoTime();assertTrue(endTime - startTime < 10000);

注意,因为nanoTime细粒度,这样做更安全endTime—startTime < 10000endTime <开始时间由于数值溢出的可能性

3.4。退出程序

如果我们想以编程方式退出当前执行的程序,system . exit就能达到目的。

调用退出,我们需要指定一个退出码,该退出码将被发送到启动程序的控制台或shell。

按照Unix的惯例,状态为0表示正常退出,而非0表示发生了一些错误:

if (error) {System.exit(1);} else {System.exit(0);}

注意,对于现在的大多数程序来说,需要调用这个函数是很奇怪的。例如,在web服务器应用程序中调用时,它可能会关闭整个站点!

3.5。访问运行时属性

系统提供对运行时属性的访问getProperty

我们可以用setPropertyclearProperty:

public String getJavaVMVendor() {System.getProperty("java.vm.vendor");}系统。setProperty(“abckey”、“abcvaluefoo”);assertequal(“abcvaluefoo System.getProperty (abckey "));System.clearProperty(“abckey”);assertNull (System.getProperty(“abckey”));

通过指定的属性- d可以通过访问getProperty

我们也可以提供一个默认值:

System.clearProperty(“dbHost”);myKey = System。getProperty("dbHost", "db.host.com"); assertEquals("db.host.com", myKey);

System.getProperties提供所有系统属性的集合:

属性属性= System.getProperties();

从中我们可以做任何属性操作:

public void clearAllProperties() {System.getProperties().clear();}

3.6。访问环境变量

系统还提供对环境变量的只读访问采用

如果我们想要访问路径例如,环境变量,我们可以做:

public String getPath() {return System.getenv("PATH");}

3.7。垃圾收集管理

通常,垃圾收集工作对我们的程序是不透明的。不过,有时我们可能想直接向JVM提出建议。

System.runFinalization是一种方法,允许我们建议JVM运行它的finalize例程。

system . gc是一个允许我们建议JVM运行其垃圾收集例程的方法。

因为这两个方法的契约不能保证终结或垃圾收集将会运行,所以它们的用处是有限的。

然而,它们可以作为优化(比如调用)来执行gc当桌面应用最小化时:

public void windowStateChanged(windowStateChanged(windowstate event)) {if (event == windowstate event);WINDOW_DEACTIVATED) {System.gc();//如果它最终运行,很好!}}

更多关于最终定稿的信息,请查看我们的完成向导

4.结论

在本文中,我们了解了一些字段和方法系统提供了。完整的列表可以在官方系统文档

另外,查看本文中的所有示例在Github

Java底部

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程
本文评论关闭!