JAVA开发常用类库UUID、Optional、ThreadLocal、TimerTask、Base64使用方法与实例详解
1、UUID类库
UUID根据时间戳实现自动无重复字符串定义
//获取UUID publicstaticUUIDrandomUUID() //根据字符串获取UUID publicstaticUUIDfromString(Stringname)
应用:对文件进行自动命名处理
importjava.util.UUID; classDemo{ publicstaticvoidmain(String[]args){ System.out.println(UUID.randomUUID()); //85a8ccb1-88f8-4b3c-833d-d45b58e0204e System.out.println(UUID.fromString("85a8ccb1-88f8-4b3c-833d-d45b58e0204e")); //85a8ccb1-88f8-4b3c-833d-d45b58e0204e } }
2、Optional类库
Optional主要功能是进行null空指针处理
JDK>=1.8
示例:单独处理null参数
classMessage{ privateStringmessage; publicMessage(Stringmessage){ this.message=message; } publicStringgetMessage(){ returnthis.message; } } classDemo{ publicstaticvoidshowMessage(Messagemessage){ if(message!=null){ System.out.println(message.getMessage()); } } publicstaticvoidmain(String[]args){ Messagemessage=newMessage("这是消息"); showMessage(message); showMessage(null); } }
几个方法
publicfinalclassOptional{ publicstatic Optional empty(){ @SuppressWarnings("unchecked") Optional t=(Optional )EMPTY; returnt; } publicstatic Optional of(Tvalue){ returnnewOptional<>(value); } publicstatic Optional ofNullable(Tvalue){ returnvalue==null?empty():of(value); } publicTget(){ if(value==null){ thrownewNoSuchElementException("Novaluepresent"); } returnvalue; } publicTorElse(Tother){ returnvalue!=null?value:other; } }
使用示例
importjava.util.Optional; /** *存入 */ OptionaloptOf=Optional.of("message"); //Optional optOfNull=Optional.of(null); //java.lang.NullPointerException Optional optOfNullable=Optional.ofNullable("message"); Optional optOfNullableNull=Optional.ofNullable(null); /** *取出 */ System.out.println(optOf.get()); //message System.out.println(optOfNullable.get()); //message //System.out.println(optOfNullableNull.get()); //java.util.NoSuchElementException:Novaluepresent System.out.println(optOf.orElse("default")); //message System.out.println(optOfNullable.orElse("default")); //message System.out.println(optOfNullableNull.orElse("default")); //default
自定义函数实现
classDemo{ publicstaticStringgetDefault(Stringobject,StringdefaultValue){ returnobject!=null?object:defaultValue; } publicstaticvoidmain(String[]args){ System.out.println(getDefault("message","default")); //message System.out.println(getDefault(null,"default")); //default } }
3、ThreadLocal类库
ThreadLocal解决线程同步问题
publicTget() publicvoidset(Tvalue) publicvoidremove()
定义发送消息类
classMessage{ privateStringmessage; publicMessage(Stringmessage){ this.message=message; } publicStringgetMessage(){ returnthis.message; } } classChannel{ privatestaticMessagemessage; publicstaticvoidsetMessage(Messagemsg){ message=msg; } publicstaticvoidsend(){ System.out.println(message.getMessage()); } }
单线程下运行
classDemo{ publicstaticvoidmain(String[]args){ Messagemessage=newMessage("你好"); Chanel.setMessage(message); Chanel.send(); //你好 } }
多线程下运行,出现数据覆盖现象
classDemo{ publicstaticvoidmain(String[]args){ newThread(()->{ Channel.setMessage(newMessage("你好-1")); Channel.send(); },"线程-1").start(); newThread(()->{ Channel.setMessage(newMessage("你好-2")); Channel.send(); },"线程-2").start(); newThread(()->{ Channel.setMessage(newMessage("你好-3")); Channel.send(); },"线程-3").start(); /** *线程-2你好-3 *线程-1你好-1 *线程-3你好-3 */ } }
改造Channel
classChannel{ //privatestaticMessagemessage; privatestaticfinalThreadLocalTHREAD_LOCAL=newThreadLocal (); publicstaticvoidsetMessage(Messagemsg){ THREAD_LOCAL.set(msg); } publicstaticvoidsend(){ System.out.println(Thread.currentThread().getName() +"" +THREAD_LOCAL.get().getMessage()); } } //执行后数据对应 /** 线程-2你好-2 线程-1你好-1 线程-3你好-3 */
ThreadLocal,只允许保存一个数据
4、TimerTask类库定时调度
定时器进行定时任务处理,实现了一种间隔触发操作
java.util.TimerTask定时任务处理
java.util.Timer任务启动
//定时启动 publicvoidschedule(TimerTasktask,longdelay) //间隔任务 publicvoidscheduleAtFixedRate(TimerTasktask,longdelay,longperiod)
定义任务
importjava.util.TimerTask; classMyTaskextendsTimerTask{ @Override publicvoidrun(){ System.out.println("任务启动"+System.currentTimeMillis()); } }
示例:定时启动,会卡主
importjava.util.Timer; classDemo{ publicstaticvoidmain(String[]args){ Timertimer=newTimer(); timer.schedule(newMyTask(),100); //任务启动1574260837613 } }
示例:间隔任务
classDemo{ publicstaticvoidmain(String[]args){ Timertimer=newTimer(); timer.scheduleAtFixedRate(newMyTask(),100,1000); } }
5、Base64类库加密与解密
加密解密示例
Stringmessage="HelloJava";
StringencodeMessage=newString(Base64.getEncoder().encode(message.getBytes()));
System.out.println(encodeMessage);
//SGVsbG8gSmF2YQ==
StringdecodeMessage=newString(Base64.getDecoder().decode(encodeMessage));
System.out.println(decodeMessage);
//HelloJava
最好的方法是使用2-3中加密程序,进行多次加密
加密解密示例
importjava.util.Base64; classCrypto{ //加密重复次数,越高越安全 privatestaticfinalintREPEAT=3; /** *加密处理 *@parammessage *@return */ publicstaticStringencode(Stringmessage){ byte[]data=message.getBytes(); //重复加密 for(inti=0;i本文主要介绍了JAVA开发过程中常用类库UUID、Optional、ThreadLocal、TimerTask、Base64的基础使用方法,更多关于UUID、Optional、ThreadLocal、TimerTask、Base64类库的详细使用方法请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。