1.StringBuffer:
StringBuffer主要注意一点是他的返回类型还是StringBuffer类型,不能直接用String来进行接收。凡是需要频繁修改字符串内容的时候都要用StringBuffer,而不是用String,StringBuffer的效率要高很多。StringBuffer中还提供了一些String的所没有的一些方法,如insert,delete需要的时候直接查找API文档。
public class StringBufferDemo01{
public static void main(String[] args){
StringBuffer buf = new StringBuffer();
buf.append("wky");
buf.append(12);
buf.append(true);
String str = buf.reverse().toString();//将StringBuffer toString后附给String。
int a = buf.indexOf("21");
buf.insert(buf.length(),"new");
System.out.println(a);
System.out.println(str);
System.out.println(buf);
}
}
2.Runtime:
每个 Java 应用程序都有一个 Runtime
类实例,使应用程序能够与其运行的环境相连接。可以通过 getRuntime
方法获取当前运行时。
应用程序不能创建自己的 Runtime 类实例。
class RuntimeDemo01{
public static void main(String[] args){
Runtime run = Runtime.getRuntime();
System.out.println("JVM最大内存量:"+run.maxMemory());
System.out.println("JVM可用内存量:"+run.freeMemory());
String a="asdfsd";
for(int i=0;i<3000;i++){//会产生垃圾占用内存
a+=i;
}
System.out.println("JVM可用内存量:"+run.freeMemory());
run.gc();//垃圾回收,释放被占用内存。
System.out.println("JVM可用内存量:"+run.freeMemory());
}
}
class RuntimeDemo02{
public static void main(String[] args){
Runtime run = Runtime.getRuntime();//获得runtime的实例化对象,Runtime是系统自带的直接使用,不能创建自己的Runtime
Process p=null; //定义进程变量
/*
可以调用本机程序
*/
try{
p=run.exec("notepad.exe");//run.exec()返回值为Process类型
}catch(Exception e){
System.out.println(e);
}
try{
Thread.sleep(5000);
}catch(Exception e){
System.out.println(e);
}
p.destroy(); //五秒后关闭p
}
}
3.System:
可以查看某个程序运行时间:
class SystemDemo01{
public static void main(String[] args){
/*
计算机程序的运行时间,System类方法的返回值,全都是static类型的。
*/
long starttime=System.currentTimeMillis();//返回以毫秒为单位的当前时间
int sum=0;
for(int i=0;i<300000000;i++){
sum+=i;
}
long endtime=System.currentTimeMillis();
System.out.println("程序运行了:"+(endtime-starttime)+"毫秒");
}
}
可以打印系统全部属性:
class SystemDemo02{
public static void main(String[] args){
System.getProperties().list(System.out); //列出系统的全部属性
System.out.println("当期系统用户:"+System.getProperty("os.name") //列出系统的某个单个属性
+System.getProperty("os.version")
+System.getProperty("user.name")
);
System.out.println("当前工作目录:"+System.getProperty("user.dir"));
}
}
最重要的,java中对象的垃圾回收机制,自动释放和手动释放的方法。如果一个对象不使用了,肯定要等待垃圾回收,垃圾回收可以自动调用,也可以手动调用,手工调用就是使用System.gc()或Runtime getRuntime.gc()来进行回收但是一个对象在回收之前要做一些收尾的工作,则就要复写Object中的public void finalize() throws Throwable方法,它在对象回收之前调用,处理收尾工作,例如释放资源等等。不手动调用垃圾回收,系统会在一定时间内自己处理掉,本程序直接自己调用垃圾回收,自己处理掉。
/*
手动释放内存空间的操作,及对象生命周期的理解
*/
class Person{
private String name;
private int age;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
public String toString(){
return this.name+this.age;
}
/*
如果一个对象不使用了,肯定要等待垃圾回收,垃圾回收可以自动调用,也可以手动调用,手工调用就是使用System.gc()或Runtime getRuntime.gc()来进行回收
但是一个对象在回收之前要做一些收尾的工作,则就要复写Object中的public void finalize() throws Throwable方法,它在对象回收之前调用,处理收尾工作,
例如释放资源等等。不手动调用垃圾回收,系统会在一定时间内自己处理掉,本程序直接自己调用垃圾回收,自己处理掉。
*/
public void finalize() throws Throwable{
System.out.println("对象被释放。。。"+this.toString());
}
}
class SystemDemo03{
public static void main(String[] args){
Person p = new Person("王丽丽",12);
p=null; //断开实例化对象
System.gc();//执行垃圾回收,但是在回收前会掉用finalize()方法,会打印出对象被释放,如果没有这句话不会打印出。
}
}