Java常用包
作者:gqk;
本节目标:
1、 掌握 StringBuffer 的使用
2、 掌握正则表达式、大数操作、日期格式化、Random 类的使用
3、 理解 System、Runtime、Process、Math、Calendar 类的使用
StringBuffer(重点):
在程序中可以使用 String表示一个字符串的操作,但是 String本身有如下特点:
两 种 声明的方式,而且比较的时候靠equals()比较内容 ·
一个字符串的内容声明之后则不可改变 实际上 String最要命的一个问题就是内容无法改变,但是这种功能在实际的开发中又不可能避免掉,此时就可以依靠 StringBuffer 类来完成这种功能。当字符串的内容需要被改变的时候就使用 StringBuffer。
StringBuffer 是 java.lang提供的一个开发包,类的定义如下:
如果现在需要将一个 StringBuffer 的类型变成 String的话,则必须依靠 toString()方法完成
根据 StringBuffer 的特点实际上就可以发现,对于需要经常改变内容的字符串肯定要使用 StringBuffer,而相反,如果 某些内容不需要随时改变的话,那么使用 String就够了。
1、 字符串反转 · 方法:public StringBuffer reverse()
2、 字符串替换 · 在 String类中依靠replaceAll()方法完成替换 · 方法:public StringBuffer replace(int start,int end,String str)
Runtime(理解)
Runtime 表示的是运行时的状态对象,即:每当有一个 JVM 进程产生的时候都会自动生成一个 Runtime 类的对象。 但是在此类的定义中发现并没有构造方法的声明,很明显构造方法被私有化了,那么一旦构造方法被私有化,则内部一定 会存在一个方法,可以取得本类的实例化对象:public static Runtime getRuntime()。
取得系统信息
在 Runtime 类中定义了如下的三个方法,这些方法可以取得系统的内存使用情况:
总 共可以使用的内存:public long totalMemory()
取得最大可用的内存:public long maxMemory()
取得当前空余的内存:public long freeMemory()
package com.xkrj.gqk; public class HelloWorld { public static void main(String[] args) { Runtime run = Runtime.getRuntime(); run.gc(); System.out.println("最大的内存空间:"+run.maxMemory()); System.out.println("总共可以使用的空间:"+run.totalMemory()); System.out.println("当前的空余空间:"+run.freeMemory()); String str = ""; for (int i = 0; i < 10000; i++) {//产生垃圾 str+=i; } System.out.println("===========产生垃圾后=========="); System.out.println("最大的内存空间:"+run.maxMemory()); System.out.println("总共可以使用的空间:"+run.totalMemory()); System.out.println("当前的空余空间:"+run.freeMemory()); } }
由于本程序中产生大量的垃圾,所以当操作完成之后,freeMemory()的空间明显减少。
在 Java 中对于垃圾收集实际上存在两种形式: ·
手工回收:public void gc() ·
自动回收:由系统完成
System 类(理解)
System.out.println()代码一直在使用着,根据之前学习到的知识,可以发现,System 肯定是一个类,而 out 是一个静 态属性,而 println()是 out 对象所提供的一个方法。
package com.xkrj.gqk; public class HelloWorld { public static void main(String[] args) { long beginTime = System.currentTimeMillis(); String str = ""; for (int i = 0; i < 10000; i++) {//产生垃圾 str+=i; } long endTime = System.currentTimeMillis(); System.out.println("===========产生垃圾后=========="); System.out.println("花费的时间为:"+(endTime-beginTime)); } }
垃圾回收与对象生命周期(重点)
在 System 类中定义了如下的方法:public static void gc()。
当调用此方法的时候实际上就等同于调用了 Runtime 类中提供的 gc()方法,两个是一样的。
package com.xkrj.gqk; public class HelloWorld { public static void main(String[] args) { Person p = new Person(); p = null; System.gc(); } } class Person{ public Person(){ System.out.println("我出生了......"); } @Override protected void finalize() throws Throwable { System.out.println("我完了,我被回收了......"); } }
一般一个对象都要经历以下的生命周期:
加载 初始化 使用 回收 卸载
Math 类
Math 类本身表示的是数学的操作类,里面提供了各种各样的数学操作方法
方法:public static long round(double a),四舍五入
这个四舍五入是将小数点之后的内容全部进行了省略,那么如果要想进行准确的四舍五入的话,最早的做法是通过 BigDecimal 类完成的,这个类也称为大数操作类
大数操作类
现在如果假设有两个数字非常的大,那么如果进行相乘的话,则肯定数字的会更大,此时,传统的数据类型已经无 法装下了(Infinity 无穷大)
package com.xkrj.gqk; public class HelloWorld { public static void main(String[] args) { double d1 = Double.MAX_VALUE; double d2 = Double.MAX_VALUE; System.out.println(d1 * d2); } }
所以在Java 中为了解决这种大数的操作,提供了两个类:BigInteger、BigDecimal
大整数操作类:BigInteger
package com.xkrj.gqk; import java.math.BigInteger; public class HelloWorld { public static void main(String[] args) { BigInteger bi1 = new BigInteger(Long.MAX_VALUE+""); BigInteger bi2 = new BigInteger(Long.MAX_VALUE+""); System.out.println("加法:"+bi1.add(bi2)); System.out.println("减法:" + bi1.subtract(bi2)); System.out.println("乘法:" + bi1.multiply(bi2)); System.out.println("除法:" + bi1.multiply(new BigInteger("333"))); BigInteger res[] = bi1.divideAndRemainder(new BigInteger("333")) ; System.out.println("整数部分:" + res[0]) ; System.out.println("小数部分:" + res[1]) ; } }
随机数
在 java.util.Random 类中主要的功能是用于产生随机数的。
产生 10 个数字,都不大于 100
package com.xkrj.gqk; import java.util.Random; public class HelloWorld { public static void main(String[] args) { Random r = new Random(); for (int i = 0; i < 10; i++) { System.out.println(r.nextInt(10)); } } }
日期操作(重点)
Date 类
java.util.Date 类是一个专门取得日期的操作类,本身的使用非常的简单,直接实例化对象输出即可。
获得系统当前的时间
package com.xkrj.gqk; import java.util.Date; public class HelloWorld { public static void main(String[] args) { System.out.println(new Date()); } }
确实是取得了一个日期,但是这个日期的格式并不符合于中国的习惯。
Calendar 类
Calendar 类是采用手工的方式取得日期,可以通过此类精确到毫秒,此类的定义如下:
public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar>
这个类本身是一个抽象类,抽象类要想实例化肯定使用子类:GregorianCalendar
package com.xkrj.gqk; import java.util.Calendar; import java.util.GregorianCalendar; public class HelloWorld { public static void main(String[] args) { Calendar calender = new GregorianCalendar(); System.out.println("年:"+calender.get(Calendar.YEAR)); System.out.println("月:"+(calender.get(Calendar.MONTH)+1)); System.out.println("日:"+calender.get(Calendar.DATE)); System.out.println("时:"+calender.get(Calendar.HOUR_OF_DAY)); System.out.println("分:"+calender.get(Calendar.MINUTE)); System.out.println("秒:"+calender.get(Calendar.SECOND)); System.out.println("毫秒:"+calender.get(Calendar.MILLISECOND)); } }
作业: //封装获取 xxxx年xx月xx日 xx时xx分xx秒的方法;
SimpleDateFormat 类(绝对重点)可以对时间进行格式化,也可以和Date和字符串之间转换
Date 本身提供的数据已经属于一个完整的日期时间了,但是其显示的效果并不完整,所以如果现在需要将显示的日 期进行格式化的话,就可以通过 java.text.SimpleDateFormat 类完成功能。 但是如果要进行格式化的话,有一点必须注意的是,需要指定一个格式化日期的模板: ·
年 ( yyyy)、 月 ( MM)、日(dd)、 时 ( HH)、 分 ( mm)、 秒 ( ss)、 毫秒(SSS)
package com.xkrj.gqk; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class HelloWorld { public static void main(String[] args) throws ParseException { String str = "2018-08-08"; SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sf.parse(str); System.out.println(date); System.out.println(sf.format(date)); } }
Arrays 类(操作数组的类)
package com.xkrj.gqk; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class HelloWorld { public static void main(String[] args) throws ParseException { int temp[] = { 50, 45, 8, 9, 1, 23, 4, 5, 23, 21, 324 }; Arrays.sort(temp); //数组的排序 System.out.println(Arrays.toString(temp)); Arrays.fill(temp, 2); //将指定的int型数据分配给temp的每个元素 System.out.println(Arrays.toString(temp)); } }
但是在这个类的sort()方法中有一个以下的排序操作:public static void sort(Object[] a)
对数组对象进行排序
package com.xkrj.gqk; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class Person { private String name; private int age; public static void main(String[] args) throws ParseException { Person per[] = { new Person("张三", 20), new Person("李四", 19), new Person("王五", 23) }; Arrays.sort(per); for (int i = 0; i < per.length; i++) { System.out.println(per[i]); } } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } }
报错:
此时提示的是一个类转换异常:Person 类的对象不能向 Comparable 转换。
比较器(绝对重点)
Comparable(重点)
Comparable 接口中只存在了一个 compareTo()的方法,此方法的主要功能是编写比较规则的,此方法返回一个 int 型 的数据,此值会返回三种结果:
· 0:两个对象相等
· 1:大于
· -1:小于
如果要使用 Arrays.sort()进行排序的话,则肯定要在对象所在的类中进行编写比较器的操作。
package com.xkrj.gqk; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class Person implements Comparable<Person> { private String name; private int age; public static void main(String[] args) throws ParseException { Person per[] = { new Person("张三", 20), new Person("李四", 19), new Person("王五", 23) }; Arrays.sort(per); for (int i = 0; i < per.length; i++) { System.out.println(per[i]); } } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } @Override public int compareTo(Person o) { if(this.age>o.age){ return 1; }else if(this.age<o.age){ return -1; }else{ return 0; } } }