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);
}
}