h# java常用类库

java基础类库

CharSequence

在jdk1.4的时候被抽离出来

CharSequence是一个描述字符串结构的接口,在这个接口里面一般有三种常用子类

分别是:String,StringBuilder,StringBuffer

这三个类都实现了CharSequence接口,只有要字符串都可以被CharSequence接收

CharSequence本身也是一个接口,在该接口之中也定义有如下的操作方法

  • 获取指定索引字符:public char charAt(int index);
  • 获取字符串的长度:public int length();
  • 截取部分字符串:public CharSequence subSequence(int start,int end)

 对于一个抽象类或者是接口类,不能使用new来进行赋值,但是可以通过以下的方式来进行实例的创建:
 CharSequence cs=”hello”;

AutoCloseable

AutoCloseable主要是用于日后进行资源开发的处理上,以实现资源的自动关闭,(释放资源)列入:用户在进行文件,网络,数据库开发的过程之中,由于服务器的资源有限,使用之后一定要关闭,所以使用之后一定要关闭资源,这样才可以 被更多的使用者所使用

jdk.17的时候退出了AutoCloseable这个接口

  • 关闭方法:void close() throws Exception;

要想使用自动关闭,除了要使用AutoCloseable之外,还需要结合异常语句才可以正常调用

try(继承了AutoCloseable类的实例化){
    //只在这个作用域之中会有效
}catch(Exception e){

}
//出了代码块会自动给调用close方法进行关闭

Runtime

Runtime描述的是运行时的状态,也就是说在整个jvm之中,Runtime类是唯一一个与jvm有关的类,并且都会默认提供有一个该类的实例化对象

由于在每一个jvm进程里面只允许提供有一个Runtime类的对象,所以这个类的构造方法被私有化了,那么就证明该类是单例是寂寞是,一定会有一个static提供这个类的实例

由于单例设计模式,想要获取实例化对象可以有getRuntime来进行获取

public class Main{
    Integer a=1;
    public static void main(String[] args) {
        Runtime run =Runtime.getRuntime();
        //打印可用的内核数
        System.out.println(run.availableProcessors());//12
        //获取最大可用内存空间返回long
        System.out.println(run.maxMemory());
        //获取可用内存空间返回long
        System.out.println(run.totalMemory());
        //获取空闲内存空间返回long
        System.out.println(run.freeMemory());
        //手工进行GC处理
        run.gc();
    }
}

System

1.0就有了

返回当前时间,毫秒为单位:public static long currentTimeMillis()

垃圾回收(其实还是runtime类中的gc):public static void gc()

数组拷贝

public static void arraycopy(Object src,int srcPos, Object dest,int destPos,int length)

数字操作类

Math

math类的主要功能是进行数学运算计算的操作类,提供有基础的计算公式

这个类的中所有方法都是static方法,并且构造方法被私有化了

public class Main{
    public static void main(String[] args) {
        //绝对值
        System.out.println(Math.abs(-10));//10
        //最大值
        System.out.println(Math.max(1,20));//20
        //四舍五入,取整
        System.out.println(Math.round(15.21312));//15
        //开方
        System.out.println(Math.pow(10,3));//10的三次方 1000
    }
}

Random

主要是用来生成随机数字的

import java.util.Random;

public class Main{
    public static void main(String[] args) {
        Random rand=new Random();
        System.out.println(rand.nextInt(100));//随机产生一个0-100之间的整数
    }
}

大数字操作类

BigInteger与BigDecimal

number的子类

  • BigInteger类构造:public BigInteger(String val);
  • BigDecimal类构造:public BigDecimal(String val);
import java.math.BigInteger;
import java.util.Random;

public class Main{
    public static void main(String[] args) {
        BigInteger bigA = new BigInteger("111111111111111111111111111111111");
        BigInteger bigB=new BigInteger("1111111111111111");
        System.out.println("加法操作"+bigA.add(bigB));//加法操作111111111111111112222222222222222
        System.out.println("减法操作"+bigA.subtract(bigB));//减法操作111111111111111110000000000000000
        System.out.println("乘法操作"+ bigA.multiply(bigB));//乘法操作123456790123456777777777777777777654320987654321
        System.out.println("除法操作"+bigA.divide(bigB));//除法操作100000000000000010
    }
}

需要注意的是,虽然提供有大数字操作类,但是整体的操作中,我们还是需要考虑到一个性能问题

开发中,该计算没有超过基本数据类型所包含的位数,强烈不建议使用大数字类,因为这种计算性能很差

日期处理类

java.util.Date

这个类直接实例化就可以获取当前的日期时间

Date类只是lang数据类型的一种包装

  • 将long转为Date:public Date(long date);
  • 将Date转为long:public long getTime()

SimpleDateFormat

虽然Date类可以明确读出当前的日期时间可以通过java.text.SimpledateFormat类来完成

开发支持库

java.util.UUID

System.out.println(UUID.randomUUID());

全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。

正常情况下不会产生重复,极端情况下会重复,对一些文件进行命名的话,uuid非常好用

Optional

1.8开始支持

optional主要功能是进行null相关的处理.

在引用接收的一方往往都是被动的判断,所以为了解决这种被动的判断,java中提供了这个类,可以提供空的处理操作.

  • 返回空数据:public static <T> Optional<T>empty();
  • 获取数据public T get();
  • 保存数据但是不允许出现空public static <T>Optional<T>of(T value)如果为空会抛出异常
  • 保存数据,允许为空:public static<T>Optional<T>ofNullable(T value);
  • 空的时候返回其它数据:public T orElse(T other);

ThreadLocal

1.2版本开始支持

ThreadLocal是线程之间相互隔离的

public class Main{
    static ThreadLocal<Integer> threadLocal=new ThreadLocal<>();
    public static void main(String[] args) throws InterruptedException {
        Thread t1=new Thread(()->{
           System.out.println(threadLocal.get());//null
           threadLocal.set(0);
           System.out.println(threadLocal.get());//0
            threadLocal.remove();//清除
        });

        Thread t2=new Thread(()->{
            System.out.println(threadLocal.get());//null
            threadLocal.set(0);
            System.out.println(threadLocal.get());//0
            threadLocal.remove();
        });
        t1.start();
        t1.join();//等这个线程执行完了再去执行
        t2.start();

    }
}

建议使用完之后对ThreadLocal进行清除

ThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。

如果使用线程池,一个对象可能被反复使用,因此用完一定啊哟remove()

部分转载自https://www.jianshu.com/p/3c5d7f09dfbd

java.util.TimerTast

第一步:创建一个Class来继承 TimerTask 重写run方法

第二步:创建timer对象 调用timer的Scheduler的方法,设置延迟时间和触发时间就可以了。

实现定时任务处理

import java.util.Timer;
import java.util.TimerTask;
//  继承TimerTaks
class TimerDemo extends TimerTask {


    // 重写TimerTask的run方法
    @Override
    public void run() {
        System.out.println("现在的执行之间为" + System.currentTimeMillis());
    }
    public static void main(String[] args) {

// 重写TimerTask的run方法
        Timer timer = new Timer();
        //延迟10秒后开始执行,每5秒执行一次
        timer.schedule(new TimerDemo(), 10*1000, 5*1000);
    }
}
Last modification:April 4, 2020
如果觉得我的文章对你有用,请随意赞赏