java中system类详细解读

System类

java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作。 它不能被实例化。

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

System类的成员变量:

  1. public static final InputStream in;
    

    “标准”输入流。 此流已打开并准备好提供输入数据。该流通常对应于**键盘输入**或由主机环境或用户指定的另一输入源。

    // main方法的args接收参数。用于控制台运行java程序。
    // 1、先将HelloWorld.java文件编译为class文件 :
    javac HelloWorld.java
    // 2、通过java命令运行class文件
    //HelloWorld表示HelloWorld的class文件,后面的hello和world代表传递的参数,之间使用空格隔开的
    java HelloWorld hello world
    

    例子:

    public class HelloWorld{
    	public static void main(String[] args){
    		if(args.length == 0){
    			System.out.println("此main方法没有传递参数!");
    			return;
    		}
    		System.out.println("此main方法传递de参数!");
    		for(String arg : args){
    			System.out.print(arg+"\t");
    		}
    	}
    }
    

    main方法传参

    //在jdk1.5之后java引入了Scanner类便于用户输入
    Scanner sc = new Scanner(System.in);
    
    在读取前一般需要使用 hasNext()hasNextLine()判断是否还有输入的数据:
    String str = sc.next(); 
    next():
      //1、一定要读取到有效字符后才可以结束输入。
      //2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
      //3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
      //4、next() 不能得到带有空格的字符串。
        
    str = sc.nextLine(); 
    nextLine()//1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
      //2、可以获得空白。
        
    如果要输入 intfloat 等类型的数据,在Scanner类中也有支持,但是在输入之前最好先使用 hasNextXxx()方法进行验证
    int i1 = sc.nextInt(); // 接收输入整数
    float f1 = sc.nextFloat(); // 接收输入的浮点数
    double d1 = sc.nextDouble(); // 接收输入的双精度浮点数
    long l1 = sc.nextLong();
    Byte b1 = sc.nextByte();
    Short s1 = sc.nextShort();
    booleam bool1 = sc.nextBoolean();
    BigInteger big1 = sc.nextBigInteger();
    
  2. public static final PrintStream out;
    

    “标准”输出流。 此流已打开并准备接受输出数据。 通常,该流对应于主机环境或用户指定的显示输出或另一输出目的地。

    对于简单的独立Java应用程序,编写一行输出数据的典型方法是:

    System.out.println(data)
    
  3. public static final PrintStream err;
    

    “标准”错误输出流。 此流已打开并准备接受输出数据。 通常,该流对应于主机环境或用户指定的显示输出或另一输出目的地。

    按照惯例,此输出流用于显示应立即引起用户注意的错误消息或其他信息

成员方法:

  1. public static void gc()运行垃圾回收器。

  2. public static void exit(int status)终止当前正在运行的java虚拟机,参数用作状态码;根据惯例,非 0 的状态码表示异常终止。

    public static void main(String[] args){
        System.out.println("我正在学java");
        System.exit(0);
        System.out.println("我正在学java");
        System.out.println("我正在学java");
        System.out.println("我正在学java");
    }
    // 正常情况会打印四句"我正在学java",但是遇到System.exit(0);将会终止当前运行的虚拟机(java程序是运行在jvm上的),所以java程序也会终止运行。
    
  3. static long currentTimeMills()基于系统时间返回当前时间的毫秒数,从1970年1月1日0:0:0到当前时间。

     // 打印输出10000个helloworld需要花费的毫秒数
    public static void main(String[] args){
        //获取当前时间的毫秒值
        long start = System.currentTimeMillis();
        for(int i = 0 ; i < 10000 ; i++){
            System.out.println("第"+i+"个hello world");
        }
        // 获取打印完成后的毫秒数
        long end = System.currentTimeMillis();
        //输出结果自己测试
        System.out.println("这段程序共用了"+(end - start)+"毫秒");
    }
    

    补充:

    public static long nanoTime(): 返回正在运行的Java虚拟机的高分辨率时间源的当前值,以纳秒为单位。 仅当计算在Java虚拟机的同一实例中获得的两个此类值之间的差异时,此方法返回的值才有意义。

    区别:

    • System.nanoTime()的精确度更高一些,如今的硬件设备性能越来越好,如果要更精密计算执行某行代码或者某块代码所消耗的时间,该方法会测量得更精确。
    • 记录当前时间,用System.currentTimeMills()单独获取System.nanoTime()没有什么意义,因为该值是随机的,无法表示当前的时间。
    • System.currentTimeMills()得到的值是基于系统时间的,值可以人为地进行修改。能够和Date类方便地转换
    • 如果需要根据时间差来过滤某些频繁的操作,用System.nanoTime()会比较合适。
  4. public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。

    参数说明:
    src - 源数组。
    srcPos - 源数组中的起始位置。
    dest - 目标数组。
    destPos - 目标数据中的起始位置。
    length - 要复制的数组元素的数量。
    异常
    IndexOutOfBoundsException - 如果复制会导致访问数组边界外的数据。
    ArrayStoreException - 如果由于类型不匹配, src阵列中的元素无法存储到 dest阵列中。
    NullPointerException - 如果 src或 dest是 null。
    
    
    public static void main(String[] args){
        int[] arr = {11 , 12 , 13 , 14 , 15};
        int[] arr2 = {1, 2 , 3 , 4 , 5};
    
        System.arraycopy(arr, 1, arr2, 2, 2);
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arr2));
        //输出结果为:
        //[11 , 12 , 13 , 14 , 15]
        //[1 , 2 , 12 , 13 , 5]
    }
    

如果 src或 dest是 null。


```java
public static void main(String[] args){
    int[] arr = {11 , 12 , 13 , 14 , 15};
    int[] arr2 = {1, 2 , 3 , 4 , 5};

    System.arraycopy(arr, 1, arr2, 2, 2);
    System.out.println(Arrays.toString(arr));
    System.out.println(Arrays.toString(arr2));
    //输出结果为:
    //[11 , 12 , 13 , 14 , 15]
    //[1 , 2 , 12 , 13 , 5]
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值