System类
- system表示系统,因此它包含的一些成员变量与方法和当前jvm及应用程序的执行环境有关。利用该类可以得到与当前执行环境相关的一些参数。System中声明了一个私有的无参的构造方法,我们不能去创建它的对象。
- 字段:static InputStream in “标准”输入流,表示通过键盘的按键向程序中输入字符的通道。
- static PrintStream out “标准”输出流,表示通过控制台输出内容的通道。
- static PrintStream err “标准“错误输出流,也是针对控制台的输出,输出内容是程序编译或执行过程中产生的异常错误,字体颜色为红色。
- 方法:public static long currentTimeMillis(),返回当前时间(以毫秒为单位)。Date类就是调用该方法来得到当前的日期的。
- public static void arraycopy(Object src,int srcPos, Object dest,int destPos,int length) 用来复制数组的方法,ArrayList集合类。很多情况下在方法的参数中会使用Object类型的参数,编程中很少去创建Object对象,它主要作为超类使用,java的多态体现出来的就是超类型声明子类型的对象,在运行期该对象依然属于子类型,在编译期该对象属于超类型。如果方法的参数是Object类型的参数,按照多态中类型转换的规则及Object自身的作用,无论什么类型的对象都可以自动转换为Object的类型,因此Object类型的参数所在的位置可以传入任何对象。这种定义方式极大增强了方法的扩展性。
- public static Properties getProperties() 返回当前系统的属性集。java.runtime.name = Java™ SE Runtime Environment前面是属性名,后面是属性值。
- public static SecurityManager getSecurityManager() 在高版本的安卓应用中使用比较多,它能够识别当前应用程序的安全级别。
- public static void exit(int status) 终止当前运行的Java虚拟机。
package com.zhong.test3;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;
public class SystemDemo {
public static void main(String[] args) throws IOException {
int i = System.in.read();
System.out.println(i);
System.out.println("输出流");
System.err.println("错误流");
long date = System.currentTimeMillis();
Date dateNow = new Date(date);
System.out.println(dateNow);
int[] src = new int[]{1,2,3,4,5,6};
int[] desc = new int[]{0,7,8,9};
System.arraycopy(src,0,desc,1,3);
for (int k : desc) {
System.out.println(k);
}
Properties properties = System.getProperties();
System.out.println(properties);
}
}
StringBuilder类
- String类表示不可变字符串,因为它的类型声明和内部表示字符数组的字段都是final,也就是该类不能被继承,它表示的字符串数据一旦赋值就不能改变了。所以,对String对象的任何改变它内部都会创建一个新的对象,就会大量消耗资源,这种做法不可取。
- StringBuilder的出现主要就是解决String对象不可变问题。
- StringBuilder、StringBuffer都是用来表示可变字符串,如果字符串的值经常发生变化,应该使用这两个类之一。StringBuilder是非线程安全的,StringBuffer是线程安全。线程安全的前提是在同一时刻不允许多个线程操作同一个变量。因此线程安全的对象执行起来效率较低。
- StringBuilder的主要操作就是调用append(各种类型的参数)实现字符串连接。
- 它还有很多其他的字符串方法进行增删改查操作。
package com.zhong.test3;
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("123");
System.out.println(sb);
sb.append(2.3).append("xzd").append('1');
System.out.println(sb);
}
}
包装类
- 它的根本设计思想就是把一份要使用的数据用类的对象进行封装,我们需要使用这份数据时,不会直接操作这份数据,而是通过调用对象的方法来实现各种功能。
- 包装类最典型的设计就是八大基本类型都具有各自的包装类。这些包装类的对象内部都持有与之对应的一份数据。包装类必须提供对数据进行操作的方法,因此基于包装类对基本数据进行操作,会让功能变得更加强大。
装箱与拆箱
- 在程序设计时,经常会用基本类型或包装类型去表示一份数据,在方法调用或表达书写时,就可能会让这两种类型的数据进行相互转换。
- java中的装箱就是把一份基本类型的数据转换为包装类型的对象,拆箱就是把包装类型的数据拿出来转换为基本类型的数据。
- 有了装箱和拆箱,让两种不同性质类型数据的互转变得非常容易且简单,直接。因此在基本类型和包装类型之间的转换可以直接进行赋值,也可以直接进行传参。
- 包装类型提供了数据类型之间的转换,比如把本类型转化为字符串。比如把字符串转换为基本类型。(parseXXX)
- 把基本类型或字符串转换为包装类型,valueOf(字符串或基本类型)以后如果需要在不同类型的数据间进行转换,可以利用各种包装类型包括字符串所提供的一些转换操作来完成。
- 栈区中存在着基本类型数据的常量池,一些常用的数据会保存在常量池中,如果有变量引用了这些数据,其实引用的都是常量池的数据。