2022/1/10 1/17
1.System类的常用方法
package ln.javatest.day11.demo01;
/*
java.lang.System类中提供了大量的静态方法,可以获取系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
public static long currentTimeMillis():返回以毫秒为单位的当前时间
public static void arraycopy(Object src,int srcPos,Object dest,it destPos,int length):
将数组指定的数据拷贝到另一个数组中
*/
import java.util.Arrays;
public class Demo01System {
public static void main(String[] args) {
demo01();
demo02();
}
/*
public static long currentTimeMillis():返回以毫秒为单位的当前时间
用来测试程序的效率
练习:
验证for循环打印数字1-9999所需要使用的时间(毫秒)
*/
private static void demo01(){
//程序执行前,获取一次毫秒值
long s = System.currentTimeMillis();;
//执行for循环
for (int i = 0; i < 9999; i++) {
System.out.println(i);
}
//程序执行前,在获取一次毫秒值
long e = System.currentTimeMillis();
System.out.println("花了" + (e-s));
}
/*
public static void arraycopy(Object src,int srcPos,Object dest,it destPos,int length):
将数组指定的数据拷贝到另一个数组中
参数:
src:源数组
scrPos:源数组中的起始位置
dest:目标数组
destPos:目标数组中的起始位置
length:要复制的数组元素的数量
练习:
将src数组中前3个元素,赋值到dest数组 前3个位置上
复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10]
复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]
*/
private static void demo02(){
//定义源数组
int[] src = {1,2,3,4,5};
//定义目标数组
int[] dest = {6,7,8,9,10};
System.out.println("复制前:" + Arrays.toString(dest));
//使用System类方法arraycopy将src数组中前3个元素,赋值到dest数组 前3个位置上
System.arraycopy(src,0,dest,0,3);
System.out.println("复制后:" + Arrays.toString(dest));
}
}
2.StringBuilder的原理:
1)String类:
字符串是常量;它们的值在创建之后不能改变;
字符串的底层是一个final修饰的数组,不能改变,是一个常量
private final byte[ ] value;
进行字符串相加,内存中就会有多个字符串,占用空间多,效率低下
String s = "a"+"b"+"c" = "abc"
首先是单独的三个字符串,a+b之后又多了一个字符串ab,变成四个字符串,
再由ab+c变成abc,又多了一个字符串,一共五个字符串。
2)StringBuilder类:
字符串缓冲区,可以提高字符串的操作效率(看成一个长度可以变化的字符串)
底层也是一个数组,但是没有被final修饰,可以改变长度
byte[ ] value = new byte[16];
StringBuilder在内存中始终是一个数组,占用空间少,效率高。
如果超出了StringBuilder的容量,会自动扩容,再扩充16.
3.StringBuilder类中的构造方法和成员方法
package ln.javatest.day11.demo01;
/*
java.lang.StringBuilder类:字符串缓冲区,可以提高字符串的效率
构造方法:
public StringBuilder():构造一个空的StringBuilder容器。
public StringBuilder(String str):构造一个StringBuilder容器,并把字符串添加进去
成员方法:
public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身。
向缓冲区内容不断追加数据。
参数:
可以是任意的数据类型
public StringBuilder reverse():反转内容。
public String toString():将缓冲区内容转换为字符串
*/
import com.sun.security.jgss.GSSUtil;
public class Demo01StringBuilder {
public static void main(String[] args) {
//有参/无参构造方法
StringBuilder sb = new StringBuilder();
System.out.println(sb); //
StringBuilder sb1 = new StringBuilder("abc");
System.out.println(sb1); //abc
//成员方法
//使用append方法网StringBuilder中添加数据
//向缓冲区内容不断追加数据。
//append方法返回的是this
StringBuilder sb2 = sb1.append("def");
System.out.println(sb); //
System.out.println(sb1); //abcdef
System.out.println(sb2); //abcdef
System.out.println(sb1 == sb2); //true 两个对象是同一个对象,地址相同
//使用append方法无需接受返回值
sb1.append("efg");
sb1.append("123");
System.out.println(sb1); //abcdefefg123
System.out.println(sb2); //abcdefefg123
//链式编程:方法的返回值是一个对象,可以根据对象继续调用方法
sb1.append("7").append("9").append("中");
System.out.println(sb1); //abcdefefg12379中
System.out.println(sb2); //abcdefefg12379中
//reverse方法:将缓冲区内容进行反转
sb1.reverse();
System.out.println(sb1); //中97321gfefedcba
System.out.println(sb2); //中97321gfefedcba
//toString方法:将缓冲区内容转换为字符串
String str = "Hello";
System.out.println("str:" + str); //str:Hello
StringBuilder bu = new StringBuilder(str);
//往stringBuilder中添加数据
bu.append("world");
System.out.println("bu:" + bu); // bu:Helloworld
System.out.println("str:"+ str); //str:Hello
//转换为字符串
String s = bu.toString();
System.out.println("s:" + s); //s:Helloworld
}
}
4.包装类
在java.lang包中,无需声明可以直接使用
基本数据类型的数据,使用起来非常的方便,但是没有对应的方法来操作这些数据
所以我们可以使用一个类,把基本类型的数据包装起来,这个类叫包装类
在包装类中可以定义一些方法,用来操作基本类型的数据
每个基本数据类型都对应一个包装类
int-->Integer char-->character
其它类把数据类型首字母大写就行
5.装箱与拆箱
<