java 常用包_Java常用包

作者:gqk;

本节目标:

1、 掌握 StringBuffer 的使用

2、 掌握正则表达式、大数操作、日期格式化、Random 类的使用

3、 理解 System、Runtime、Process、Math、Calendar 类的使用

StringBuffer(重点):

在程序中可以使用 String表示一个字符串的操作,但是 String本身有如下特点:

两 种 声明的方式,而且比较的时候靠equals()比较内容   ·

一个字符串的内容声明之后则不可改变  实际上 String最要命的一个问题就是内容无法改变,但是这种功能在实际的开发中又不可能避免掉,此时就可以依靠 StringBuffer 类来完成这种功能。当字符串的内容需要被改变的时候就使用 StringBuffer。

StringBuffer 是 java.lang提供的一个开发包,类的定义如下:

23d5b1de411bf17d8c96e6a45a3c9b78.png

0832fea612ca0f3bc974f849c3ec9fa1.png

如果现在需要将一个 StringBuffer 的类型变成 String的话,则必须依靠 toString()方法完成

根据 StringBuffer 的特点实际上就可以发现,对于需要经常改变内容的字符串肯定要使用 StringBuffer,而相反,如果 某些内容不需要随时改变的话,那么使用 String就够了。

a66e68c5adbd28bcae4e2d047cbcb869.png

1、 字符串反转  · 方法:public StringBuffer reverse()

2、 字符串替换  · 在 String类中依靠replaceAll()方法完成替换  · 方法:public StringBuffer replace(int start,int end,String str)

fdbec12193717bc182452781876f4eb9.png

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

1ce78a054c52813e1b5884e3f12aeb8e.png

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

这个类本身是一个抽象类,抽象类要想实例化肯定使用子类: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 + "]";

}

}

报错:

1fc1026e99fe32a069b29009777f18fc.png

此时提示的是一个类转换异常:Person 类的对象不能向 Comparable 转换。

比较器(绝对重点)

Comparable(重点)

b5addac8c906b9474f31bc11ceb8ae25.png

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 {

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

return -1;

}else{

return 0;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值