java.lang.System

答: 系统类即java.lang.System是一个特殊的类,它是Object类的子类。其最主要的特点是使用前不需要用new语句进行初始化,因为在系统启动时,已自动对系统类进行初始化,分配了相应的内存区。系统类是专门为用户程序而设置的,它为用户程序提供当前环境下的系统资源。
     系统类主要提供下述功能:
     ①标准的输入/输出
     System类通过三个对象System.in,System.out和System.err提供输入/输出功能和出错指示功能。这三个对象的名字在表示上比较特殊,只是为了便于程序员调用。
     System.in最主要的功能是提供方法 read()用来读字符。若没有读到字符,则返回值为-1。
     System.out最主要的功能是提供print(),println()和write()三个方法。print()方法和println()方法的功能基本相同,都是打印字符串,只是后者自动在字符串后面加一个换行符而前者没有加。所以,下面二个语句是等效的:
         System.out.println(“We are students.”);

         System.out.print(“We are students.\n”);
由于 print语句没有换行功能,所以在字符串后加“\n”,增添了换行动作。
     在使用println()方法和print()方法时,程序中不需要创建System类的对象,而是直接用如上语句调用这两个方法。
     println()方法也可以这样使用:
         String sir= “We are students.”;
         System.out.println(str);
这两个语句和上述语句功能相同。
     在以后的章节中,我们将看到许多例子使用println()方法。
     事实上,对于系统类的任何方法,都可以这样调用。这无疑为应用程序使用系统资源带来很多方便。
     下面的例子中既用了read方法,又用了println方法:
          1  class Count{
          2      public static void main(String sir[]){
          3           int c=0;
          4           while(System.in.read()! == -1)
          5                 c++;
          6           System.out.println(“There are”+ c +”chars”);
          7      }
          8  }
上述程序中,第4行语句用read()方法读取字符。只要返回值不是-1,即读到了字符,则使 c加1。第6行语句则打印出信息,两对引号中是要打印的字符串,中间的“c”是程序运行中统计的字符数。
     System.err的功能是为用户程序显示出错信息。
     ②系统属性的获取和设置
     系统类提供了getProPerty方法用来获取系统的属性,包括Java版本号、操作系统号和用户目录等。
     比如:
         System.getProperty(“OS.name”);
上述语句可获得当前系统的操作系统名字。
     又比如:
         system.getProperty(“Java.version”);
上述语句执行后返回Java版本号。
     如果在getProgerty的入口参数中采用下列关键字,将获得相应属性:
     user.dir 用户目录
     user.name 用户名
     path.seParator 当前操作系统的路径分隔符
     OS.name 当前操作系统的名字
     Java.version Java版本号
     Java.name Java安装目录
     File.separator 文件分隔符
     System类的setProperties方法用来设置或修改系统的属性。不过,经过用户程序修改的系统属性是暂时性的,如果系统重新启动,那么,系统属性又将是其原始属性了。
     比如:
         System.setProperties(p);
上述语句将系统属性按对象P的内容来设置,p是此前已经创建的一个属性对象。
     由于一般程序员并不需要设置系统属性,所以,这里不再对此作详述。如果作为系统管理员需要这方面的技术,可查阅相关的资料。
     ③获取当前时间
     System类提供currentTimeMillis()方法来获取当前时间,这个功能常用在一些系统管理程序中。比如,笔者从事的科研项目“Java远程教学系统”要统计用户在系统上的学习时间,便是在用户开始学习和结束时分别获取当前时间,再据此计算学习时间。
     ④退出系统
     System类提供exit方法使程序退出系统。就是说,如程序中用如下语句:
         System.exit()
则退出程序,也退出Java解释器。 
`java.lang.System.arraycopy` 是 Java 标准库中的一个本地方法,用于高效地复制数组内容。它可以直接操作内存地址来进行数据块的转移,因此比逐个元素赋值的方式更快捷也更安全(避免了手动索引可能出现的错误)。以下是关于 `System.arraycopy` 更详细的介绍: ### 方法签名 ```java public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) ``` #### 参数说明: - **src**:源数组,即从中复制元素的数组。 - **srcPos**:从源数组中开始复制的第一个元素的位置(索引),必须是非负数并且不大于源数组长度减去要复制的元素数目 (`length`)。 - **dest**:目标数组,即将复制过来的元素放入其中的新数组。 - **destPos**:在目标数组中放置第一个新元素的位置(索引),同样需要满足非负以及不超过目标数组剩余空间的要求。 - **length**:想要复制的元素数量,这个数字不能超过两个数组各自的可用部分。 #### 特点及注意事项: 1. **型一致性**:源和目标数组的组件型应当兼容。对于原始型的数组来说就是完全相同的型;而对象引用型的数组则允许子向上转型的关系存在。 2. **性能优势**:因为它是通过 JVM 内部优化过的机制直接操作内存完成工作,所以在大量连续元素迁移任务上效率极高。 3. **抛出异常的情况**: - 如果任一输入参数非法(比如负数、超出界限等)会立即抛出 `ArrayIndexOutOfBoundsException`。 - 若传入的对象不是真正的数组,则会有 `NullPointerException` 或者其他运行时异常发生。 4. **线程安全性问题**:由于这是一个低级别的原生函数,所以不会涉及到高级别的同步控制,这意味着并发环境下使用该方法需要注意外部锁定或其他协调策略。 示例代码展示了如何使用 `System.arraycopy` 来快速复制一部分整型数组的内容到另一个新的整型数组里: ```java import java.util.Arrays; class Main { public static void main(String[] args) { // 初始化源数组 int[] source = {1, 2, 3, 4, 5}; // 创建一个新的足够大的目标数组 int[] destination = new int[source.length]; // 执行arraycopy操作 System.arraycopy(source, 0, destination, 0, source.length); // 输出结果验证 System.out.println("Source: " + Arrays.toString(source)); System.out.println("Destination after copy: " + Arrays.toString(destination)); } } ``` 以上程序将会把整个 `source` 数组的所有元素完整无误地转移到 `destination` 数组当中,并打印出来进行确认。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值