System类为什么不能实例化

在JAVA帮助文档中是这样写的:System 类包含一些有用的类字段和方法。它不能被实例化。

具体是哪些类字段和方法呢?为什么导致不能实例化?

System类是一个特殊类,它是一个公共最终类,不能被继承,也不能被实例化,即不能创建System类的对象。

System类功能强大,与Runtime一起可以访问许多有用的系统功能。System类保存静态方法和变量的集合。标准的输入、输出和Java运行时的错误输出存储在变量in,out和err中。由System类定义的方法丰富并且实用。System类中所有的变量和方法都是静态的,使用时以System作为前缀,即形如

“System.变量名”和“System.方法名”。

1.标准的输入输出
System类包含三个使用频繁的公共数据流,分别是:标准输入(in)、标准输出(out)、标准错误输出(err)。

① public static final InputStream in--------标准输入。

这个属性是InputStream类的一个对象,它是未经包装的原始Input Stream,读取System.in之前应该先加以包装。可以通过read()方法读取字节数据。

② public static final PrintStream out--------标准输出。

③ public static final PrintStream err---------标准输出。

out和err都已经被包装成PrintStream对象,所以可以直接使用System.out和System.err。可以通过方法print()、println()或write()方法很方便地完成各种数据类型的输出。out与err使用上的不同是: System.out用于输出普通信息,out的输出一般需要缓存;System.err一般情况下用来打印错误信息,不需要缓存,快速显示紧急信息。

System类的常用方法
System类有一些有用的方法,这些方法用于处理运行环境。下面简单介绍几个方法及其功能。

(1)获取当前时间

使用currentTineMillis( )可以记录程序执行的时间,这是一个特别有意义的用法。

currentTineMillis( )方法返回自从1970年1月1日午夜起到现在的时间,时间单位是毫秒。如果要记录程序中一段有问题程序的运行时间,可以在这段程序开始之前调用currentTineMillis( )方法存储当前时间,在这段程序结束处再次调用currentTineMillis( )方法。执行该段程序所花费的时间为其结束时刻的时间值减去其开始时刻的时间值。下面的程序段可以用来估计一下执行某个循环所占用的时间:

long startTime=System.currenTimerMillis( );//记录循环开始时间

int sum=0;

for(int i=0;i<100000;i++){

sum+=i;

}

long endTime=System.currentTimeMillis( );// 记录循环结束时间

System.out.Println("time: "+(endTime-startTime)+ "milliseconds. ");

注意:虽然使用cuttentTimeMillis()方法可以计算出当前的日期和时间,但是获取当前日期和时间最好使用java.util中的Date类。

(2)快速复制数组

使用arraycopy()方法可以将一个任意类型的数组快速地从一个地方复制到另一个地方。这比使用循环编写的程序要快得多。调用形式为:

System.arraycopy(a1,int sourceStart,a2,int targetStart,int size)------将数组a1从下标sourceStart开始,长度为size的元素依次复制到数组a2的以targetStart为起始的单元中。

(3)退出虚拟机

在用户的程序还未执行完之前,强制关闭Java虚拟机的方法是exit():

Public static void exit(int exitCode)

关闭虚拟机的同时把状态信息exitCode传递给操作系统,exitCoded非零时,表示非正常退出。

(4)强制垃圾收集

垃圾收集器一般情况下运行于后台,并自动地收集已不使用了的内存。使用gc()方法可强制垃圾收集器启动:

public static void gc()
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-10-17
看源码,System类的构造函数是私有方法,外界无法访问,所以不能被实例化。
Java文档上面,“System 类包含一些有用的类字段和方法。它不能被实例化”,中间是句号呀,压根就不是一句话,当然也不是因果关系,是两句没有关联的话。
看问题要抓住本质!!一个类不能被实例化,说明什么呢?实例化对象都需要调用构造函数,它的构造函数不可访问,如果才能让构造函数不可访问,用private修饰就好了嘛。
第2个回答  2008-11-03
/** Don't let anyone instantiate this class */
private System() {
}

上面是System类的唯一的构造函数,你能实例化它吗?
这样定义就是为了不让你去实例化它本回答被提问者采纳
第3个回答  2020-04-25
static(静态)的,不可以实例化