当前位置: 首页 > news >正文

个性化网站定制网站建设公司的成本有哪些内容

个性化网站定制,网站建设公司的成本有哪些内容,网络营销的优势包括,二建注册查询系统目录 前言 一、站在开发视角#xff0c;从 JDK8 升级到 JDK17 都有哪些新特性 1.1、JDK8 新特性 1.1.1、Optional 类 a#xff09;简介 b#xff09;使用方法 c#xff09;使用场景 1.2、JDK9 新特性 1.2.1、Optional - ifPresentOrElse 解决 if-else 1.2.2、Opt…目录 前言 一、站在开发视角从 JDK8 升级到 JDK17 都有哪些新特性 1.1、JDK8 新特性 1.1.1、Optional 类 a简介 b使用方法 c使用场景 1.2、JDK9 新特性 1.2.1、Optional - ifPresentOrElse 解决 if-else 1.2.2、Optional - or 解决多重 if 嵌套 1.2.3、Optional - orElseThrow 内置异常 1.2.4、集合增强 - 集合静态工厂 1.2.5、集合增强 - takeWhile 方法 1.2.6、集合增强 - dropWhile 方法 1.2.7、接口可以定义私有方法 1.3、JDK10 1.3.1、copyOf 方法 1.4、JDK14 新特性 1.4.1、支持文本块 1.4.2、空指针异常的精确定位 1.4.3、instanceof 类型转换 1.5、JDK16 新特性 1.5.1、toList 方法 1.6、JDK17 新特性 1.6.2、switch 增强 前言 本文只是站在开发者视角来看看升级哪些咱们程序员常用的功能~ 一、站在开发视角从 JDK8 升级到 JDK17 都有哪些新特性 1.1、JDK8 新特性 1.1.1、Optional 类 a简介 经过统计空指针异常是导致 Java 应用程序失败的最常见原因因此 Google 公司 引入了 Optional 类以检查空值的方式来避免空指针异常使程序员写出更干净的代码. Optional 类Java.util.Optional是一个容器类可以保存类型T值表示这个值存在。或者也可以只保存 null表示这个值不存在。也就是说以前用 null 表示一个值不存在现在 Optional 就可以更好的表达这个概念避免空指针异常. b使用方法 Java文档中说明这是一个可以为 null 的容器对象. 如果值存在则 isPresent() 方法会返回 true调用 get() 方法就会返回该对象.如果值不存在则 isPresent() 方法会返回 false调用 get() 方法就会抛出空指针异常. Data public class Student {private String name;private Integer age;}1创建 Optional 对象案例 Optional.of(T t)创建一个 Optional 对象t 必须不为空.Optional.empty()创建一个空的 Optional 实例.Optional.ofNullable(T t)t 可以为 null. public void test1() {//创建一个空的 OptionalOptionalObject empty Optional.empty();//创建非空的 OptionalStudent student1 new Student();OptionalStudent os1 Optional.of(student1);//创建一个空的 OptionalStudent student2 null;OptionalStudent os2 Optional.of(student2);}2判断 Optional 容器中是否包含对象 boolea isPresent()判断是否包含对象.void ifPresent(Consumer? super T consumer) 如果 Optional 中有值就执行Consumer接口的实现代码并且该值会作为参数传给它. public void test2() {//ifPresent 无参使用: 判断 os1 中是否有值Student student new Student();OptionalStudent os1 Optional.of(student);System.out.println(os1.isPresent()); //true//ifPresent 有参使用: 若 student 对象不为空则对该对象进行赋值并打印一句话os1.ifPresent(aa - { //此处的 aa 就代指 studentaa.setName(cyk);aa.setAge(20);System.out.println(个人信息已初始化: student);});}3获取 Optional 容器的对象 T get()如果 Optional 包含值则返回值否则抛出异常.T orElse(T other)如果 Optional 包含值就返回否则返回指定的 other 对象.T orElseGet(Supplier? extends T other)如果 Optional 包含值就返回否则返回由Supplier接口实现提供的对象.T orElseThrow(Supplier? extends X exceptionSupplier)如果 Optional 包含值则将其返回否则抛出由 Supplier 接口实现提供的异常. public void test3() throws Exception {//get 获取空对象报错Student student null;OptionalStudent os1 Optional.ofNullable(student);Student student1 os1.get(); //此处抛出异常: java.util.NoSuchElementException: No value present//如果 student 为空就返回一个新对象Student student2 os1.orElse(new Student());//如果 student 为空就调用我们自己实现的函数Student student3 os1.orElseGet(() - new Student());//如果 student 为空就抛出我们指定的异常os1.orElseThrow(() - new Exception(自定义异常));}4过滤 OptionalT filter(Predicate? super T predicate)如果值存在并且这个值匹配给定的 predicate返回一个Optional用以描述这个值否则返回一个空的Optional。 public void test4() {Student student new Student(cyk, 20);OptionalStudent os1 Optional.ofNullable(student);os1.filter(aa - aa.getName().equals(cyk)) //此处 aa 代指 student.ifPresent(result - System.out.println(ok!));}5映射   map入参就是 Optional 中的值并且具有返回值返回类型就是Optional 对象中的值类型如果值才执行函数体否则返回空的 Optional. public void test5() {Student student new Student(cyk, 20);OptionalStudent os1 Optional.ofNullable(student);//如果 os1 中存在值就执行 lambda 表达式如果不存在值就返回一个空的 OptionalOptionalStudent result os1.map(aa - {aa.setAge(aa.getAge() 1);return aa;});System.out.println(result); //输出: Optional[Student(namecyk, age21)]}c使用场景 1例如当你根据 id 从数据库中获取到用户数据时如果用户数据不为 null才能可以将年龄 1. public void test1(Integer id) {//写法一: 原生Userinfo userinfo userinfoMapper.getUserinfoById(id);if(userinfo ! null) {userinfo.setAge(userinfo.getAge() 1);}//写法二: 使用 Optional 函数式编程一行搞定Optional.ofNullable(userinfoMapper.getUserinfoById(id)).ifPresent(p - p.setAge(p.getAge() 1));}2当传入的用户数据需要进行判空抛异常处理时 public void test2() {Userinfo userinfo new Userinfo(1, null, 20);//原生if(userinfo null || isEmpty(userinfo.getUsername())|| isEmpty(userinfo.getAge())) {throw new RuntimeException(用户数据不能为空!);}//用 Optional 改进Optional.ofNullable(userinfo).filter(p - isEmpty(p.getUsername()) || isEmpty(p.getAge())).orElseThrow(() - new RuntimeException(用户数据不能为空));}3对象赋值如果有值则执行业务逻辑如果没有值则返回一个默认的对象. Optional.ofNullable(userinfo).map(u - {//业务逻辑...u.setId(2);u.setUsername(cyk);u.setAge(20);return u;}).orElse(new Userinfo(100, xxx, 0)); 1.2、JDK9 新特性 1.2.1、Optional - ifPresentOrElse 解决 if-else 为了解决 if-else 的判断判空情况JDK9 增强了 Optional提供了 ifPresentOrElse. Userinfo userinfo new Userinfo(1, cyk, 20);//if-elseif(userinfo ! null) {System.out.println(hello userinfo.getUsername());} else {System.out.println(world);}//ifPresentOrElseOptional.ofNullable(userinfo).ifPresentOrElse(u - System.out.println(hello u.getUsername()),() - System.out.println(world));1.2.2、Optional - or 解决多重 if 嵌套 多重 if 容易导致代码可读性降低误判引发空指针并且对于多种if嵌套的情况我还是建议大家提前 return逻辑更清晰因此 JDK9 增强 Optional 提供了 or 方法. Userinfo nullinfo null;//原生if(nullinfo null) {Userinfo userinfo1 new Userinfo();userinfo1.setId(1);if(userinfo1 null) {Userinfo userinfo2 new Userinfo();userinfo2.setId(2);return userinfo2;}return userinfo1;}//Optional 改进后OptionalUserinfo or Optional.ofNullable(nullinfo).or(() - { // nullinfo 为 null因此执行此 orUserinfo userinfo1 new Userinfo();userinfo1.setId(1);return Optional.ofNullable(null); //返回一个空的 Optional}).or(() - { // 上一个 or 返回的 Optional 中没有值时执行此 orUserinfo userinfo2 new Userinfo();userinfo2.setId(2);return Optional.ofNullable(userinfo2);});System.out.println(or); //输出: Optional[Userinfo(id2, usernamenull, agenull)]1.2.3、Optional - orElseThrow 内置异常 Optional.ofNullable(null).orElseThrow(); 该方法会抛出Optional的内置异常NoSuchElementException. 1.2.4、集合增强 - 集合静态工厂 此方式创建的集合对象都不允许任何写操作并且都不能为 null.set/map 不能保证输出顺序和定义的顺序一致.与 Arrays.asList 创建的 List 不同Arrays 创建的 List 可以 update不能 add/remove 而静态工厂创建的完全不能进行写操作. //1.创建不可变的 ListListString strList List.of(aaa, bbb, ccc);//strList.add(ddd); //报错: Exception in thread main java.lang.UnsupportedOperationException//2.创建一个不可变的 set/mapSetString set Set.of(aaa, bbb, ccc);MapString, String map1 Map.of(1, aaa, 2, bbb, 3, ccc);//以上 map 创建方式可能会导致分不清 key value因此也可以通过以下方式创建MapString, String map2 Map.ofEntries(Map.entry(1, bbb), Map.entry(2, bbb));//set/map 不能保证输出的顺序和定义 键值对 的顺序一致System.out.println(map1);1.2.5、集合增强 - takeWhile 方法 takeWhile 用来从前向后遍历遇到不满足的就结束流最后返回从前到不满足的截断结果流对象. ListInteger list List.of(1, 2, 3, 4, 5, 6, 7);ListInteger result list.stream().takeWhile(val - val 5).toList();System.out.println(result); //输出: [1, 2, 3, 4]Ps如果使用不可修改的Set或者Map 在使用这个方法是要注意 会存在每次输出的结果都是不一样的 1.2.6、集合增强 - dropWhile 方法 takeWhile 用来从前向后删除遇到不满足的就结束流最后返回原始流剩下的结果流对象. 因此也可以理解为 takeWhile 的补集. ListInteger list List.of(1, 2, 3, 4, 5, 6, 7);ListInteger result list.stream().dropWhile(val - val 5).toList();System.out.println(result); //输出: [5, 6, 7]System.out.println(list); //Ps: 这里的删除不影响 list 中原本的值Ps如果使用不可修改的Set或者Map 在使用这个方法和takeWhile一样是要注意 1.2.7、接口可以定义私有方法 接口可以定义一些私有的方法给 default 方法调用仅此而已。 1.3、JDK10 1.3.1、copyOf 方法 集合提供了 copyOf 方法返回的不可以修改的集合修改就抛异常. Ps这里使用的深拷贝因此修改原集合不会影响副本. ListString srcList new ArrayList();srcList.add(aaa);srcList.add(bbb);ListString copyList List.copyOf(srcList);srcList.add(ccc);System.out.println(srcList); //[aaa, bbb, ccc]System.out.println(copyList);//[aaa, bbb]1.4、JDK14 新特性 1.4.1、支持文本块 文本代码块让整个String看上去都是比较整洁的并且无需进行繁琐的转义. //原始String before {\n \name\:\cyk\,\n \age\: 20;\n };//增强String after {name: cyk,age: 20};1.4.2、空指针异常的精确定位 不光可以定义是哪行代码空指针异常还能定位到调用到哪个方法/属性出现的异常. //Before:Exception in thread main java.lang.NullPointerExceptionat com.dev.wizard.feature.JDK17Demo.optionalMethod_orElseThrow(JDK17Demo.java:99)at com.dev.wizard.feature.JDK17Demo.main(JDK17Demo.java:23)//After:Exception in thread main java.lang.NullPointerException: Cannot read field student because persons is nullat com.dev.wizard.feature.JDK17Demo.optionalMethod_orElseThrow(JDK17Demo.java:99)at com.dev.wizard.feature.JDK17Demo.main(JDK17Demo.java:23) 1.4.3、instanceof 类型转换 以往 instanceof 只能帮我们检查数据类型是否符合JDK14 中不仅可以进行类型匹配还会将匹配到的类型直接赋值新的引用简化了开发提高了可读性. Object val aaa;//beforeif(val instanceof String) {String newVal (String) val;System.out.println(newVal);}//afterif(val instanceof String newVal) {System.out.println(newVal);}1.5、JDK16 新特性 1.5.1、toList 方法 stream().toList 和 Collectors.toUnmodifiableList()都是不可修改的集合Collectors.toList()是生成的是普通的list可写。 性能比较toList(优) -- Collectors.toList() -- Collectors.toUnmodifiableList(劣) ListString list1 List.of(aaa, bbb);//可读可写ListString list2 list1.stream().toList();//可读不可写ListString list3 list2.stream().collect(Collectors.toList());ListString list4 list1.stream().collect(Collectors.toUnmodifiableList());1.6、JDK17 新特性 1.6.2、switch 增强 JDK17 中的 switch 主要是使用 - 替代了 break 语句看上去更加简洁. 看上去 switch 是想替代 if-else 的感觉~ 1字符串匹配 //1.字符串匹配String val1 aaa;//beforeswitch (val1) {case abc:System.out.println(abc!);break;case aaa:System.out.println(aaa!);break;default:System.out.println(error!);}//afterswitch (val1) {case abc - System.out.println(abc!);case aaa - System.out.println(aaa);default - System.out.println(error);}2类型判断 //2.类型判断Object val2 aaa;//beforeif(val2 instanceof String) {String newVal (String) val2;System.out.println(String: newVal);} else if(val2 instanceof Integer) {Integer newVal (Integer) val2;System.out.println(Integer: newVal);} else {System.out.println(val2);}//afterswitch (val2) {case String str - {String newVal str;System.out.println(String: newVal);}case Integer num - {Integer newVal num;System.out.println(Integer: newVal);}default - System.out.println(val2);}3对 null 的处理 //3.对 null 的处理String val3 null;switch (val3) {case null - System.out.println(null!);case aaa - System.out.println(aaa!);case bbb - System.out.println(bbb!);default - System.out.println(error);}4对条件判断的处理 //4.对条件判断的处理Object obj 1;switch (obj) {case String str - {String newVal str;System.out.println(String: newVal);}case Integer num num 3 - {Integer newVal num;System.out.println(Integer: newVal);}default - System.out.println(error!);}
http://www.dnsts.com.cn/news/81007.html

相关文章:

  • 怎么制作免费建网站flex网站模板
  • 开购物网站需要多少钱外国域名注册网站
  • 保险网站建设的目标做美图 网站有哪些东西吗
  • 国外有建站公司吗合肥关键词排名技巧
  • 做网站帮外国人淘宝网络营销评价的名词解释
  • 四川网站建设套餐食品企业网站模板
  • 东莞房产网站建设化工网站建设
  • 网站 优化 分析免费做网站手机
  • wordpress 移动导航呼出企业seo顾问
  • 广州 网站开发 骏域怎么做网盘网站
  • 上海徐家汇网站建设填写网站信息
  • 登不了wordpress网站优化中友情链接怎么做
  • 怎么做一张图片的网站免费建网站家谱系统
  • 网站开发行业代码太原自助建站系统
  • 宁国网站开发长沙网络营销 公司
  • python 网站开发流程wordpress the7 安装
  • 医疗网站建设多少钱做网站彩票代理犯法吗
  • 网站高端定制wordpress增加网站网页关键词
  • 深圳led网站建设企业管理系统免费下载
  • 吉安知名网站建设国内产品网站建设
  • 杨家平网站建设如何搭建高品质网站
  • 域名注册哪个网站好电商美工培训哪个学校好
  • 基于django电商网站开发课设报告济南软件外包公司
  • 咸宁网站建设长沙制作网站的公司
  • 做网站登录的需求分析wordpress登不进后台
  • wordpress博客主题虎嗅营销型网站建设推荐乐云seo
  • 电子商务网站建设优势字体升级wordpress
  • 外贸建站网站建设学校门户网站建设
  • 淘客cms建站系统程序员培训班课程
  • 装修网站怎么做的网站关键词分布情况