StringBuffer字符串缓冲类,System.RunTime类
如果需要频繁修改字符串内容,建议使用字符串缓冲类(StringBuffer)
StringBuffer其实是一个存储字符的容器。
笔试题目:使用StringBuffer无参的构造函数创建一个对象时,默认的初始容量是多少?如果长度不够使用,自动增长多少倍?
StringBuffer底层是依赖了一个字符数组才能存储字符数据的,该字符串数组默认的初始容量是16,如果字符数组的长度不够用时,自动增长一倍。
StringBuffer是一个存储字符的容器
容器的具备的行为
String
增加
append(Boolean b) 可以添加任意类型的数据到容器中
insert(int offset,boolean b) 指定插入的索引值,插入对应的内容。
删除
delete(int start,int end) 根据指定的开始于结束的索引值删除对应的内容。
deleteCharAt(int index) 根据指定的索引值删除一个字符。
修改
replace(int start,int end,String str) 根据指定的开始于结束索引代替成指定的内容
reverse() 翻转字符串缓冲类的内容、 abc——>cba
setCharAt(int index,char ch) 把指定索引值的字符串替换指定的字符。
substring(int sart,int end) 根基指定的索引值截取子串。
ensureCapacity(int minimumCapacity) 指定StringBuffer内容的字符数组长度的。
查看
indexOf(String str,int fromldex) 查找指定的字符串第一次出现的索引值,并且指定开始查找的位置
lastlndeOf(String str)
capacity() 查看当前字符数组的长度。
length()
charAt(int index)
toString() 把字符串缓冲类的内容转换成字符串返回。
StringBuffer与StringBuilder的相同点与不同点:
相同点:
1,两个类都是字符串缓冲类。
2,两个类的方法都是一致的。
不同点:
1,StringBuffer是线程安全的,操作效率低,StringBuilder是线程非安全的,操作效率高。
2,StringBuffer是jdk1,0出现的,StringBuilder是jdk1,5出现的。
推荐使用:StringBuilder,因为操作效率高
代码演示:
public class Demo10 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("abcjavaabc");
/*
添加
sb.append(true);
插入
sb.insert(2,"小白");
删除
sb.delete(2,4);
sb.deleteCharAt(3);
修改
sb.replace(2,4,"小白兔");
sb.reverse();
sb.setCharAt(3,'红');
String subString = sb.substring(2,4);
System.out.println("子串的内容:"+subString);
查看
*/
int index = sb.indexOf("abc",3);
System.out.println("索引值为:"+index);
sb.append("java");
System.out.println("查看字符数组的长度:"+sb.capacity());
System.out.println("存储的字符个数:"+sb.length());
System.out.println("索引指定的索引值查找字符:"+sb.charAt(2));
System.out.println("字符串缓冲内容:"+sb);
}
}
运行结果:
System系统类主要用于获取系统的属性数据。
System类常用的方法:
arraycopy(Object src ,int srcPos,Object dest,int destPos,int length)
src-源数组、
srcPos-源数组中的起始位置。
dest-目标数组。
length-要复制的数组元素的数量。
currentTimeMilllis() 获取当前系统时间,
exit(int status) 退出jvm 如果参数是0表示正常退jvm,非0表示异常退出jvm。
gc() 建议jvm赶快启动垃圾回收垃圾
getenv(String name) 根据环境变量名字获取环境变量
getproperty(key)
finalize() 如果一个对象被垃圾回收期回收的时候,会先调用对象的finallize()方法。
代码演示:
package aa;
import java.util.Arrays;
import java.util.Properties;
class person1{
String name;
public person1(String name){
this.name = name;
}
public void finalize() throws Throwable{
super.finalize();
System.out.println(this.name+"被回收了、、");
}
}
public class Demo11 {
public static void main(String[] args) {
int[] srcArr = {10,12,14,16,19};
int[] destArr = new int[4];
System.arraycopy(srcArr,1,destArr,0,4);
System.out.println("目前数组的元素:"+ Arrays.toString(destArr));
System.out.println("当前的系统时间:"+System.currentTimeMillis());
System.out.println("环境变量:"+System.getenv("path"));
for (int i = 0;i<4;i++){
new person1("阿婷"+i);
System.gc();
}
/*Properties properties = System.getProperties();
properties.list(System.out);*/
String value = System.getProperty("os.name");
System.out.println("当前系统:"+value);
}
}
运行结果:
RunTime 该类主要代表了应用程序运行的环境。
getRuntime() 返回当前应用程序的运行环境对象。
exec(String command) 根据指定的路径执行对应的可执行文件。
freeMemory() 返回java虚拟机中的空闲内存量。。以字节位单位
maxMemory() 返回java虚拟机试图使用的最大内存量。
totalMemory() 返回java虚拟机中的内存总量
代码演示:
import java.io.IOException;
public class Demo12 {
public static void main(String[] args) throws IOException, InterruptedException {
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("C:\\Windows\\notepad.exe");
Thread.sleep(3000);
process.destroy();
System.out.println("java虚拟机中的空闲内存量:"+runtime.freeMemory());
System.out.println("java虚拟机中试图使用的最大内存量:"+runtime.maxMemory());
System.out.println("java虚拟机中的内存总量:"+runtime.totalMemory());
}
}
运行结果: