StringBuffer是使用缓冲区的,本身也是操作字符的,但是与String不同,String的内容一旦声明则不能改变,改变的只是其内存地址的指向,而StringBuffer的内容是可以改变的。
对于StringBuffer而言,本身是一个具体的操作类,所以不能像String那样采用直接赋值的方式进行对象的实例化,必须通过构造方法完成。
StringBuffer连接字符串的操作:
·当一个字符串的内容需要被经常改变时就要使用StringBuffer
·在StringBuffer中使用append()方法,完成字符串的连接操作。
代码如下:
public class StringBufferDemo01 { public static void main(String args[]){ StringBuffer buf=new StringBuffer(); buf.append("Hello "); buf.append("World").append("!!!!");; buf.append(true+"、"); buf.append(12+"、"); buf.append(12.3+"、"); buf.append(12.3f+"、"); System.out.println(buf); //程序输出 //Hello World!!!!true、12、12.3、12.3、 } }
注意:StringBuffer的内容是可以修改的,其有public StringBuffer reverse()方法,为逆序输出当前StringBuffer的内容。
public class StringBufferDemo02 { public static void main(String args[]){ StringBuffer buf=new StringBuffer(); buf.append("Hello"); fun(buf); System.out.println(buf); //输出当前StringBuffer内容 System.out.println(buf.reverse()); //逆序输出内容 } public static void fun(StringBuffer str){ //传递StringBuffer引用 str.append("123"); //修改StringBuffer的内容 } }
Runtime:运行时,是一个封装了JVM进程的类。每一个java程序实际上都是启动了一个JVM进程,那么每一个JVM进程都是对应着一个Runtime实例,此类是由JVM为其实例化的。
一旦取得JVM实例之后,以上的类都是可以使用的。
每一个Runtime对象都是由JVM进行实例化,所以,可以直接通过此类取得一些信息。
代码实例:(具体的东东请到帮助文档里面自行查找)
public class RuntimeDemo01 { public static void main(String args[]){ Runtime run=Runtime.getRuntime(); //通过Runtime类中的静态方法返回一个Runtime类的实例 System.out.println("当前JVM最大内存:"+run.maxMemory()); //取得当前JVM最大内存 System.out.println("当前JVM空闲内存:"+run.freeMemory()); //取得当前JVM空闲内存 run.gc(); //执行垃圾回收 System.out.println("当前JVM空闲内存:"+run.freeMemory()); //取得当前JVM空闲内存 } }
可以使用Runtime类运行本机的可执行程序,例如:调用记事本
public Process exec(String command) throws IOException
代码如下:
public class RuntimeDemo02 { public static void main(String args[]){ Runtime run=Runtime.getRuntime(); //通过Runtime类中的静态方法返回一个Runtime类的实例 try{ run.exec("notepad.exe"); //启动记事本程序 run.exec("C:\\Program Files\\KuGou7\\kugou7.exe"); //启动本机酷狗音乐 }catch(Exception e){ e.printStackTrace(); } } }
以上代码启动了一个进程,那么run.exec(String command)返回的是Process类型,那么通过Process类中的destroy()方法可以结束当前进程。
public class RuntimeDemo03 { public static void main(String args[]){ Runtime run=Runtime.getRuntime(); //通过Runtime类中的静态方法返回一个Runtime类的实例 Process pro=null; try{ pro=run.exec("notepad.exe"); //启动记事本程序 }catch(Exception e){ e.printStackTrace(); } try{ Thread.sleep(3000); //当前线程休眠3秒钟,记事本打开3秒 }catch(InterruptedException e){ e.printStackTrace(); } pro.destroy(); //结束当前进程 关闭记事本 } }
System.out.println()本身是一个系统提供好的类。而且out.println()方法也是经常使用到的。
System类是一些与系统相关的属性和方法的集合在System类中所有的属性都是静态的。
其中public static void exit(int status)方法和public static void gc()方法之前都有介绍,而public static void gc()实际上就是调用的Runtime类中得gc方法。
public static long currentTimeMills()用法如下:
public class SystemDemo01 { public static void main(String args[]){ long startTime=System.currentTimeMillis(); //取得开始计算之前的时间 int sum=0; //声明变量 for(int i=0;i<400000000;i++){ //执行累加操作 sum+=i; } long endTime=System.currentTimeMillis(); //取得计算之后的时间 System.out.println("操作用时:"+(endTime-startTime)+"毫秒"); //取得操作用时 } }
列出本机的全部系统属性:
public class SystemDemo02 { public static void main(String args[]){ System.getProperties().list(System.out); } }
效果图如下:
此处得到的是全部的属性,如果想得到指定的属性,通过键值找到value;
public class SystemDemo03{ public static void main(String args[]){ System.out.println("系统版本:" + System.getProperty("os.name") + System.getProperty("os.version") + System.getProperty("os.arch")) ; System.out.println("系统用户:" + System.getProperty("user.name")) ; System.out.println("当前用户目录:" + System.getProperty("user.home")) ; System.out.println("当前用户工作目录:" + System.getProperty("user.dir")) ; } };
一个对象如果不使用,则肯定要等待进行垃圾收集,垃圾收集可以自动调用也可以是手工调用,手工调用的时候就是调用System.gc()或 Runtime.getRuntime().gc();但是,如果一个对象要在被回收之前需要做一些收尾的工作,则就要覆写Object类中的
protected 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 String toString(){ // 覆写toString()方法 return "姓名:" + this.name + ",年龄:" + this.age ; } public void finalize() throws Throwable{ // 对象释放空间时默认调用此方法 System.out.println("对象被释放 --> " + this) ; } }; public class SystemDemo04{ public static void main(String args[]){ Person per = new Person("张三",30) ; per = null ; // 断开引用 System.gc() ; // 强制性释放空间 } };
只有强制性调用gc()方法的时候才可以发现对象被调用,当然,如果不调用,则系统也会在一定的时间内进行自动回收。
总结:对象的生命周期:初始化à对象实例化à垃圾收集à对象终结à卸载