开发支持类库
-
方法
获取UUID对象:public static UUID randomUUID()
根据字符串获取UUID内容:public static UUID fromString(String name)
-
作用
对文件进行自动命名,使用UUID类
2、Optional类
-
作用
对null做一些相关处理
-
方法
返回数据:public static<T> Optional<T> empty()
获取数据 public T get()
保存数据但不允许出现null:public static <T> Optional<T> of(T value)
保存数据允许有null:public static <T> Optional<T> ofNullable(T value)
null的时候返回其他数据:public T orElse(T other)
-
范例
public class Test02 {
public static void main(String[] args) {
// 为null,报错java.util.NoSuchElementException: No value present
//Message02.getMessage03().get().useMessage02();
// 处理办法
Message02.getMessage03().orElse(Message02.getMessage02()).useMessage02();
}
}
class Message02{
private Message02(){
}
public static Message02 getMessage02() {
return new Message02();
}
public static Optional<Message02> getMessage03() {
//return Optional.of(getMessage02());// 不为空
//return Optional.of(null); // 为空,报错java.lang.NullPointerException
// 为空处理办法
return Optional.ofNullable(null);// 可以为空
}
public void useMessage02(){
System.out.println("hello world");
}
}
3、ThreadLocal类
-
作用
把对象与线程对象绑定在一起,保证线程同步。
每个线程通过ThreadLocal只允许保存一个数据
-
方法
构造方法:public ThreadLocal()
设置数据:public void set(T value)
取出数据:public T get();
删除数据:public void remove()
public class Test03 {
public static void main(String[] args) {
new Thread(()->{
Message message=new Message(); // 创建message对象
message.setInfo("hello A"); // 设置信息
Channel.setMessage(message);// 设置要发送的信息
Channel.sendMessage();// 发送信息
},"发送消息A").start();
new Thread(()->{
Message message=new Message(); // 创建message对象
message.setInfo("hello B"); // 设置信息
Channel.setMessage(message);// 设置要发送的信息
Channel.sendMessage();// 发送信息
},"发送消息B").start();
new Thread(()->{
Message message=new Message(); // 创建message对象
message.setInfo("hello C"); // 设置信息
Channel.setMessage(message);// 设置要发送的信息
Channel.sendMessage();// 发送信息
},"发送消息C").start();
}
}
// 消息对象
class Message{
private String info;
public String getInfo() {
return this.info;
}
public void setInfo(String info) {
this.info = info;
}
}
class Channel{
private final static ThreadLocal<Message> THREAD_LOCAL=new ThreadLocal<>();
private Channel(){}
public static void setMessage(Message m) {
THREAD_LOCAL.set(m);// 把对象与当前线程绑定在一起
}
public static void sendMessage(){
System.out.println(Thread.currentThread().getName()+":消息发送:"+THREAD_LOCAL.get().getInfo());// 从当前线程中获取Message对象
}
}
发送消息B:消息发送:hello B 发送消息C:消息发送:hello C 发送消息A:消息发送:hello A
4、定时调度
-
作用
进行定时任务的处理,实现固定年月日时分秒实现很复杂,不适用此场景。
-
TimerTask抽象类
-
Timer类
启动定时任务:public void schedule(TimerTask task,long delay) 间隔启动定时任务:public void scheduleAtFixedRate(TimerTask task,long delay,long period)
-
范例
public class Test04 {
public static void main(String[] args) {
Demo01 demo01=new Demo01();
Timer timer=new Timer();
//timer.schedule(demo01,1000);// 延迟1000毫秒后启动
// 延迟1000秒后 每隔1000秒启动一次
timer.scheduleAtFixedRate(demo01,1000,1000);
}
}
class Demo01 extends TimerTask{
@Override
public void run() {
// 需要处理的定时任务
System.out.println(Thread.currentThread().getName()+":定时任务执行,"+System.currentTimeMillis());
}
}
5、Base64加密和解密
加密:Base64.Encoder -- 加密处理:public byte[] encode(byte[] src) 解密:Base64.Decoder -- 解密处理: public byte[] decode(String src)
-
范例
public class Test05 {
private static final String SALT="hdsjijgd"; // 加密的盐值
private static final int REPATE=3; //加密的次数
public static void main(String[] args) {
String message="hello";
message=encode(message);
System.out.println("加密后:"+message);
message=decode(message);
System.out.println("解密后:"+message);
}
// 加密处理
public static String encode(String str){
String temp=str+"{"+SALT+"}";
byte[] data=temp.getBytes();
for (int i = 0; i <REPATE; i++) {
data= Base64.getEncoder().encode(data);//重复加密
}
return new String(data);s
}
// 解密处理
public static String decode(String str){
byte[] data=str.getBytes();
for (int i = 0; i <REPATE; i++) {
data= Base64.getDecoder().decode(data);// 重复解密
}
return new String(data).replaceAll("\\{\\w+\\}","");// 正则处理字符串
}
}
加密后:WVVkV2MySkhPVGRoUjFKNllXMXNjVm95VWprPQ== 解密后:hello

浙公网安备 33010602011771号