一.java常用类库--UUID

--UUID类库的使用非常简单,只需要使用静态方法UUID.randomUUID(就可以正常使用)

 public class MyUUID {
public static void main(String[] args) {
System.out.println(UUID.randomUUID());
}
}

--使用for循环包裹这个输出语句,执行5次输出,观察输出结果

629f5938-978c-4a8f-8f88-e990456f002e
97155521-8b02-4f16-9316-07fbed37cb8e
c2b8a9d6-8d82-4544-9207-3d0ccbee3fd9
064fe1c3-5ec4-4541-9e90-9a9f280f8c8b
62d25115-e9d7-4e97-861c-72e6dca31e40 Process finished with exit code 0

--UUID是一种生成无重复字符串的一种程序类,这种程序类的主要功能是根据时间戳实现一个自动的无重复的字符串

无重复:只不过是它在某种特出情况下定义的无重复,或者说是它出现重复的概率很低,可能是千万亿分之一.查看JAVA文档中的UUID类的实现,一般在获取UUID的时候往往都是随机生成的一个内容,所以可以通过如下方法获得
获取UUID对象:public static UUID randomUUID();
根据字符串获取UUID内容: uuid.toString();
--如果要对一些文件自行自动命名的时候,UUID对象非常好用,例如,网络上的图片的命名结构往往是UUID的结构

二.Optional 类----进行null的相关处理 
--在以前进行程序开发的时候,如果是为了防止程序之中出现空指针异常,往往会追加有空对象的验证处理

 interface IMessage{
public String getContent();
}
class MessageImpl implements IMessage{
@Override
public String getContent() {
return "test";
}
}
class MessageUtil{
public static IMessage getMessage(){
return new MessageImpl();
}
public static void useMessage(IMessage msg){
System.out.println(msg.getContent()); //有可能出现为null,而导致空指向
}
}
public class MyOptional {
public static void main(String[] args) {
//如此将会出现空指向异常
MessageUtil.useMessage(null);
}
}

--为了防止出现空指向异常,可以在MessageUtil.useMessage()方法中进行分null值的判断

     public static void useMessage(IMessage msg){
if(msg == null){
System.out.println("对象为空");
}else {
System.out.println(msg.getContent());
}
}

--如此在传统的引用传递之中,我们是被动的进行判断(接收的一方往往都是被动的判断),就像一个工厂在接收原产品时,都需要对原产品进行合格检查,但是,如果在一开始就知道原产品的合格率是百分百,那么就不要在进行生产上线前的合格检查了(合格检查这个动作往往就是被动的).因此为了解决这一问题,java提供了Optional<T>类,该类是JDK1.8中提供的新类,并且现在被广泛使用,在这个类中提供有如下的操作方法

返回空的数据:static <T> Optional<T> empty() 返回一个空的 Optional实例。 
获取数据:T get() 如果 Optional中有一个值,返回值,否则抛出 NoSuchElementException 。  
保存数据,但是不允许出现空,如果为空,则抛出异常:static <T> Optional<T> of(T value) 
保存数据,允许为空:static <T> Optional<T> ofNullable(T value)  
空的时候返回其他数据T orElse(T other)  
--范例:修改程序,按照正规结构完成

 interface IMessage{
public String getContent();
}
class MessageImpl implements IMessage{
@Override
public String getContent() {
return "test";
}
}
class MessageUtil{
public static Optional<IMessage> getMessage(){
//次操作不允许对象为空,如果未空,则会在此处出现异常
return Optional.of(new MessageImpl()); //有对象
}
public static void useMessage(IMessage msg){
if(msg == null){
System.out.println("对象为空");
}else {
System.out.println(msg.getContent());
}
}
}
public class MyOptional {
public static void main(String[] args) {
IMessage iMessage = MessageUtil.getMessage().get(); //获取数据
MessageUtil.useMessage(iMessage);
}
}

--这样修改代码结构会,如果值为空null,则会在保存处出现异常:


--运行结果

Exception in thread "main" java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at java.util.Optional.<init>(Optional.java:96)
at java.util.Optional.of(Optional.java:108)
at 常用类库.optional.MessageUtil.getMessage(MyOptional.java:21)
at 常用类库.optional.MyOptional.main(MyOptional.java:33) Process finished with exit code 1

--如此可以明确的保证在获取处所得到的对象不为空,由于Optional类中允许保存有null的内容,所以在数据获取的时候也可以进行null的处理,但是如果为空,则在使用get()获取数据的时候就会存在这样的信息

--范例 处理空值

 package 常用类库.optional;

 import java.util.Optional;

 /**
* @author : S K Y
* @version :0.0.1
*/
interface IMessage{
public String getContent();
}
class MessageImpl implements IMessage{
@Override
public String getContent() {
return "test";
}
}
class MessageUtil{
public static Optional<IMessage> getMessage(){
//次操作不允许对象为空,如果未空,则会在此处出现异常
return Optional.ofNullable(null); //有对象
}
public static void useMessage(IMessage msg){
if(msg == null){
System.out.println("对象为空");
}else {
System.out.println(msg.getContent());
}
}
}
public class MyOptional {
public static void main(String[] args) {
IMessage iMessage = MessageUtil.getMessage().get();
MessageUtil.useMessage(iMessage);
}
}

--此时将会出现如下异常

Exception in thread "main" java.util.NoSuchElementException: No value present
at java.util.Optional.get(Optional.java:135)
at 常用类库.optional.MyOptional.main(MyOptional.java:33) Process finished with exit code 1

--此时可以将代码修改时使用orElse()方法来获取数据

public class MyOptional {
public static void main(String[] args) {
IMessage iMessage = MessageUtil.getMessage().orElse(new MessageImpl());
MessageUtil.useMessage(iMessage);
}
}

--在所有引用数据类型的操作处理之中,null是一个重要的技术问题,所以来讲,JDK1.8后提供的这个新的类对于空值的处理很有帮助

常用开发类库支持--UUID及空值处理Optional的更多相关文章

  1. Android 常用开发类库

    android.app :提供高层的程序模型.提供基本的运行环境    android.content :包含各种的对设备上的数据进行访问和发布的类    android.database :通过内容 ...

  2. 程序开发常用第三方类库一览表(VendorLib)

    以下是自己开发过程中用到的第三方类库,记录下来方便查阅 ------------------------------------------------------------------------ ...

  3. iOS - 开发类库

    开发类库   UI 项目名称 项目信息 1.MJRefresh 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...

  4. JAVA程序员常用开发工具

    1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利 ...

  5. 必学PHP类库/常用PHP类库大全,php 类库分类-收集

    依赖管理( Dependency Management ) 用于依赖管理的包和框架 Composer / Packagist - 一个包和依赖管理器. Composer Installers - 一个 ...

  6. 最强常用开发库总结 - JSON库详解

    最强常用开发库总结 - JSON库详解 JSON应用非常广泛,对于Java常用的JSON库要完全掌握.@pdai JSON简介 JSON是什么 JSON 指的是 JavaScript 对象表示法(Ja ...

  7. SharePoint 2013常用开发工具分享

    众所周知,一款好的开发工具不仅能提高项目开发效率,而且能够协助开发人员简化开发流程.本文汇总几款SharePoint 2013开发常用开发工具,希望能够对大家有所帮助.如果您有更好的工具,没有包含在本 ...

  8. Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库

    Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库1.1. 5种常用的Photoshop滤镜,分别针对照片的曝光.风格色调.黑白照片处理.锐利度.降噪这五大 ...

  9. SharePoint 2013常用开发工具

    SharePoint 2013常用开发工具分享 2014-04-01 00:59 by jv9, 589 阅读, 1 评论, 收藏, 编辑 众所周知,一款好的开发工具不仅能提高项目开发效率,而且能够协 ...

随机推荐

  1. C Sleepy Kaguya

    链接:https://ac.nowcoder.com/acm/contest/338/C来源:牛客网 题目描述 Houraisan☆Kaguya is the princess who lives i ...

  2. CSS-03 queue方法

    queue方法 摘自W3C school手册,用于简单理解使用queue方法 队列 每个元素均可拥有一到多个由 jQuery 添加的函数队列.在大多数应用程序中,只使用一个队列(名为 fx).队列运行 ...

  3. Java笔试题-List l = new List()

    前言: 最近遇到的一道很基础的题,有时候大家可能离开了编译器就不行了. import java.util.List; /** * * @author catchegg * create date: 2 ...

  4. 【知识强化】第三章 存储系统 3.4 主存储器与CPU的连接

    我们这节课来看一下关于主存的一些知识.我们将要讲解主存的简单的模型和主存与CPU连接的连接原理. 我们之前呢在第一章已经学过了存储器的构成,包括了存储体.MAR(也就是地址寄存器).MDR(也就是数据 ...

  5. 2019-8-31-C#-条件编译

    title author date CreateTime categories C# 条件编译 lindexi 2019-08-31 16:55:58 +0800 2019-07-18 15:27:1 ...

  6. smbstatus - 报告当前 samba 的联接状态

    总览 smbstatus [-b] [-d] [-L] [-p] [-S] [-s configuration file] [-u username] 描述 此程序是 samba 套件的一部分. sm ...

  7. bzoj5161 最长上升子序列 状压DP(DP 套 DP) + 打表

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5161 题解 回顾一下以前用二分求 LIS 的方法:令 \(f[i]\) 表示长度为 \(i\) ...

  8. phpstrom 安装

    环境: ubuntu18.4 一. 安装 1. 下载安装包.tar.gz 下载地址:https://www.jetbrains.com/phpstorm/download/#section=linux ...

  9. Java中的String、StringBuffer、StringBuilder区别以及Java之StringUtils的用法

    1.String.StringBuffer.StringBuilder的区别 String是Java中基础类型,是immutable类(不可变)的典型实现,利用string进行拼接是会产生过多无用对象 ...

  10. postman自动化接口测试

    背景描述 有一个项目要使用postman进行接口测试,接口所需参数有: appid: 应用标识: sign:请求签名,需要使用HMACSHA1加密算法计算,签名串是:{appid}${url}${st ...