这篇文章我们来总结下Java中的常用类库。类库中的这些类和方法都是精心设计的,其运行的效率高、质量高,这些类和方法几乎包含在所有的Java软件中,所以可移植性很高。
下面我们详细学习下。
StringBuffer类
StringBuffer是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类中的内容一旦确定之后不能改变,改变的只是它内存地址的指向,而StringBuffer类中的内容是可以改变的。
对于StringBuffer而言,它本身是一个具体的操作类,所以它不能和String一样直接赋值,必须通过构造方法完成。
StringBuffer常用方法:append(); 用于字符串连接,效果等于String中的+;
insert():在指定位置为字符串添加字符;
reverse():对字符串进行反转操作;
replace();替换掉指定位置的字符内容;
substring();截取字符串指定内容;
delete();删除指定字符串;
indexOf(); 查找指定内容是否存在;
实例:
public class StringBuffer01 { public static void main(String[] args) { // TODO Auto-generated method stub StringBuffer buffer = new StringBuffer(); buffer.append("hello"); buffer.append("nhpop12345656");//串联字符串 System.out.println(buffer); buffer.insert(2, "***"); //插入 System.out.println(buffer); buffer.replace(7, 9, "AAA"); //替换 System.out.println(buffer); String str1 = buffer.substring(7,12);//截取 System.out.println(str1); StringBuffer str2 = buffer.reverse();//倒置 System.out.println(str2); System.out.println(buffer); buffer.delete(5, 7); //删除 System.out.println(buffer); if (buffer.indexOf("pop") == -1) { //查找 System.out.println("不可以找到"); } else { System.out.println("可以找到"); } } }
Runtime类
Runtime是一个封装了JVM进程的类,每一个Java程序都是启动了一个JVM进程,每一个JVM进程都是对应一个Runtime实例,此实例是JVM为其实例化的。
Runtime定义中没有构造方法,本类的构造方法被私有化了。
Runtime类实例:
public class Runtime01 { public static void main(String[] args) { // TODO Auto-generated method stub Runtime run = Runtime.getRuntime(); System.out.println("JVM最大内存量:" + run.maxMemory()); System.out.println("JVM运行内存量:" + run.freeMemory()); String str = "sss"; for (int i = 0; i < 1000; i++) { str += i; } System.out.println("运行后JVM内存量:" + run.freeMemory()); System.gc(); System.out.println("启动垃圾回收器之后的JVM内存" + run.freeMemory()); } }
Runtime与Process
使用Runtime可以直接调用本机应用程序。
实例:调用应用程序记事本,并且在5秒之后关掉
public class Runtime01 { public static void main(String[] args) { // TODO Auto-generated method stub Runtime run = Runtime.getRuntime(); Process p = null; try { p = run.exec("notepad.exe"); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } try { Thread.sleep(5000); // 此线程存活5秒 } catch (Exception e) { // TODO: handle exception } p.destroy(); } }
System类
System类是一些与系统相关的方法和属性集合。
实例:使用System类打印运行时间:
public class System01 { public static void main(String[] args) { // TODO Auto-generated method stub long startTime = System.currentTimeMillis(); int sum = 0; for (int i = 0; i < 30000000; i++) { sum += i; } long endTime = System.currentTimeMillis(); System.out.println("TotalTime:"+(endTime-startTime)); } }
System类还可以显示出本机全部系统属性:
public class System01 { public static void main(String[] args) { System.getProperties().list(System.out); } }
日期操作类(Date,Calendar)
Date类直接输出实例化对象即可。
import java.util.Date ; public class DateDemo01{ public static void main(String args[]){ Date date = new Date() ; // 直接实例化Date对象 System.out.println("当前日期为:" + date) ; } };Calendar类则可以将时间精确到毫秒。
import java.util.* ; public class DateDemo02{ public static void main(String args[]){ Calendar calendar = new GregorianCalendar(); // 实例化Calendar类对象 System.out.println("YEAR: " + calendar.get(Calendar.YEAR)); System.out.println("MONTH: " + (calendar.get(Calendar.MONTH) + 1)); System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH)); System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY)); System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE)); System.out.println("SECOND: " + calendar.get(Calendar.SECOND)); System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND)); } };
Math与Random类
Math类中的方法都是静态方法,所以只要直接类名.方法即可使用。
Math中常用的方法有:max、min、sqrt(开方)、pow(m,n)m的n次方、round(省略小数点后数字)。
Random类主要是生成随机数,可以生成指定大小范围的随机数。
Random random = new Random(); for(int i = 0;i<10;i++){ System.out.print(random.nextInt(50)+" "); }
大数操作(BigInteger、BigDecimal)
对于大数操作,Java提供了两个类,其中BigInteger可以对大的整形数进行操作。
实例:
import java.math.BigInteger ; public class BigIntegerDemo01{ public static void main(String args[]){ BigInteger bi1 = new BigInteger("123456789") ; // 声明BigInteger对象 BigInteger bi2 = new BigInteger("987654321") ; // 声明BigInteger对象 System.out.println("加法操作:" + bi2.add(bi1)) ; // 加法操作 System.out.println("减法操作:" + bi2.subtract(bi1)) ; // 减法操作 System.out.println("乘法操作:" + bi2.multiply(bi1)) ; // 乘法操作 System.out.println("除法操作:" + bi2.divide(bi1)) ; // 除法操作 System.out.println("最大数:" + bi2.max(bi1)) ; // 求出最大数 System.out.println("最小数:" + bi2.min(bi1)) ; // 求出最小数 BigInteger result[] = bi2.divideAndRemainder(bi1) ; // 求出余数的除法操作 System.out.println("商是:" + result[0] + ";余数是:" + result[1]) ; } };
BigInteger类可以对大数进行小数操作,从而可以进行精确的四舍五入。
比较器(Comparable、Comparator)
比较器的类只要适用于数字之间进行比较。
例:实现二叉树算法。
class BinaryTree{ class Node{ // 声明一个节点类 private Comparable data ; // 保存具体的内容 private Node left ; // 保存左子树 private Node right ; // 保存右子树 public Node(Comparable data){ this.data = data ; } public void addNode(Node newNode){ // 确定是放在左子树还是右子树 if(newNode.data.compareTo(this.data)<0){ // 内容小,放在左子树 if(this.left==null){ this.left = newNode ; // 直接将新的节点设置成左子树 }else{ this.left.addNode(newNode) ; // 继续向下判断 } } if(newNode.data.compareTo(this.data)>=0){ // 放在右子树 if(this.right==null){ this.right = newNode ; // 没有右子树则将此节点设置成右子树 }else{ this.right.addNode(newNode) ; // 继续向下判断 } } } public void printNode(){ // 输出的时候采用中序遍历 if(this.left!=null){ this.left.printNode() ; // 输出左子树 } System.out.print(this.data + " ") ; if(this.right!=null){ this.right.printNode() ; } } }; private Node root ; // 根元素 public void add(Comparable data){ // 加入元素 Node newNode = new Node(data) ; // 定义新的节点 if(root==null){ // 没有根节点 root = newNode ; // 第一个元素作为根节点 }else{ root.addNode(newNode) ; // 确定是放在左子树还是放在右子树 } } public void print(){ this.root.printNode() ; // 通过根节点输出 } }; public class ComparableDemo03{ public static void main(String args[]){ BinaryTree bt = new BinaryTree() ; bt.add(8) ; bt.add(3) ; bt.add(3) ; bt.add(10) ; bt.add(9) ; bt.add(1) ; bt.add(5) ; bt.add(5) ; System.out.println("排序之后的结果:") ; bt.print() ; } };
此外常用类库还有观察者模式所用的Observable类、支持正则表达式的类库、定时调度类Timer,以后会在使用到的时候进行总结。