System类

System 类

System 类包含一些有用的类字段和方法。它不能被实例化。

System 类提供的设施中,有标准输入、标准输出和错误输出流;对外部定义的属性和环境变量的访问;加载文件和库的方法;还有快速复制数组的一部分的实用方法。

成员变量

// 标准输入流,常用于键盘录入
public final static InputStream in = null
    
// 标准输出流,常用于打印信息
public final static PrintStream out = null;

// 标准错误输出流,常用于打印错误信息
public final static PrintStream err = null;
public class SystemFieldDemo {
	public static void main(String[] args) {
		// 通过Scanner测试标准输入
		Scanner sc = new Scanner(System.in);
		
		String next = sc.next();
		
		// 通过System.out.print测试标准输出流
		System.out.println(next);
		
		sc.close();
		
		// 通过System.err.print测试标准输出流
		System.err.println("打印错误报告");
	}
}

构造方法

构造方法私有化,无法创建对象

/** Don't let anyone instantiate this class */
private System() {
}

arraycopy()

这个方法表示复制数组,从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);

参数解释

src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。

public class ArraycopyDemo {
	public static void main(String[] args) {
		// 创建一个长度为5的int类型数组arr
		int[] arr = new int[5];
		
		// 为数组arr赋值
		for (int i = 0; i < arr.length; i++) {
			arr[i] = i;
		}

		// 遍历数组arr
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		
		System.out.println("------------------");
		
		// 创建一个新的长度为5的int类型数组newArr
		int[] newArr = new int[5];
		
		// 调用System的arraycopy方法,分别传入对应的参数
		System.arraycopy(arr, 0, newArr, 0, 5);
		
		// 遍历newArr数组
		for (int i = 0; i < newArr.length; i++) {
			System.out.println(newArr[i]);
		}
	}
}

currentTimeMills()

返回以毫秒为单位的当前时间。

public static native long currentTimeMillis();

【注意】

1、这个方法的返回值是long类型

2、当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)

public class CurrentTimeMillsDemo {
	public static void main(String[] args) {
		
		long currentTimeMillis = System.currentTimeMillis();
		
		System.out.println("毫秒:" + currentTimeMillis);
		System.out.println("年:" + currentTimeMillis/1000/60/60/24/365);	
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		String date = sdf.format(currentTimeMillis);
		
		System.out.println(date); // 2020-10-06 17:53:02
	}
}

gc()

运行垃圾回收器。在此之前会调用Object的finalize()

public static void gc()

System.gc()可用于垃圾回收。当使用System.gc()回收某个对象所占用的内存之前,通过要求程序调用适当的方法来清理资源。在没有明确指定资源清理的情况下,Java提高了默认机制来清理该对象的资源,就是调用Object类的finalize()方法。finalize()方法的作用是释放一个对象占用的内存空间时,会被JVM调用。而子类重写该方法,就可以清理对象占用的资源,该方法有没有链式调用,所以必须手动实现。

class Person {
	private String name;
	private int age;

	// 构造方法,getter、setter方法、toString方法

    /*
	 * 通过重写finalize方法验证调用gc会执行此方法
	 */
	@Override
	protected void finalize() throws Throwable {
		System.out.println("执行finalize方法回收垃圾:" + this);
		super.finalize();
	}
}

public class GcDemo {
	public static void main(String[] args) {
		System.out.println(new Person("张三", 16));
		System.gc();
	}
}

从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。

但是,不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器运行,这会耗费更多的系统资源,会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放,才调用垃圾回收最好

exit()

终止当前正在运行的 Java 虚拟机。参数用作状态码;根据惯例,非 0 的状态码表示异常终止。

public static void exit(int status)
public class ExitDemo {
	public static void main(String[] args) {
		System.out.println("程序执行开始");
		// 执行此方法后关闭虚拟机,程序不会再向下执行
		System.exit(0);
		System.out.println("程序执行结束");
	}
}

总结

System类提供了一些和系统相关的类字段和方法,便于我们和底层进行交互。

比较常用的就是arraycopy()和currentTimeMills(),其他不需要关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值