Java9-17新特性解读,了解少于3个你可能脱节了

news2024/11/15 10:29:40

前言

Java8出来这么多年后,已经成为企业最成熟稳定的版本,相信绝大部分公司用的还是这个版本,但是一眨眼今年Java19都出来了,相信很多Java工程师忙于学习工作对新特性没什么了解,有的话也仅限于某一块。

本篇就是博主对自己感觉有用的新特性做了一个案例验证及简要说明,整合起来分享给大家。

特别说明:Java17是继Java8之后的一个重要里程碑,像SpringBoot3.0、IDEA2022、Jenkins新版、Kafka3.0等等很多生态都强制绑定支持这个版本,等于是给它背书,博主建议大家有必要花时间去了解一下。

如果没时间看,可以先收藏一下,闲下来一边喝茶一边品读。


你的收获

首先,你能通过一篇简单、连续、直观的文章就明白Java8之后Java未来整体发展的趋势,为之后几年适应Java相关工作打下基础;

其次,你可以通过了解Java9-17的新特性,为以后的面试加分,毕竟一个爱学习有态度的程序员会更受企业青睐;

最后,你可以看看博主对Java未来发展趋势的粗浅看法,也许能给迷茫的你带来收获。


准备工作

首先,你要安装Java17版本,环境变量配置还是和以前没区别,这是我的版本。

在这里插入图片描述

其次,建议安装IDEA2022.3,新版IDEA占用内存比以前少很多,而且有一些增强支持。

安装好后,需要做一个对Java17的配置,看图。

setting配置
在这里插入图片描述
Project Structure配置
在这里插入图片描述
这里特别说明一下,最好选择预览版本,因为Java17包含一些预览功能,这里不选预览版本会编译报错。
在这里插入图片描述
在这里插入图片描述

新特性

一共分为了8个,按照版本顺序来讲述的,最后一个是因为几个版本连续有增强,所以单独拿出来。

1、接口private

1)、说明

Java9新特性,在接口中声明private方法,不会被外部实现。

2)、案例

声明一个接口,一个default方法,两个private方法。

/**
 * <p>
 * 用户信息接口
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 15:03
 */
public interface UserInterface {
   private void getUsername() {
      System.err.println("你好,我是王小飞!");
   }

   private void getPassword() {
      System.err.println("你好,我是徐西圆!");
   }

   default void getData() {
      getUsername();
      getPassword();
   }
}

实现这个接口,可以看到只能实现default方法,无法实现private方法。

/**
 * <p>
 * JDK9新特性:接口private方法
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 15:10
 */
public class UserImpl implements UserInterface {

   @Override
   public void getData() {
      UserInterface.super.getData();
   }

   public static void main(String[] args) {
      UserImpl user = new UserImpl();
      user.getData();
   }
}

Ctrl+Insert可以查看要实现的方法
在这里插入图片描述

3)、注意

private接口自动是default的,所以要有方法体,否则编译不通过。


2、类型推断

1)、说明

Java11新特性,在方法内部用var关键字声明一个属性或对象,可以被编译器自动判断类型。

2)、案例

案例包含两个测试,一个是直接测试var声明的变量是否能自己推断类型,一个是在循环中使用的效果。

/**
 * <p>
 * JDK11新特性:类型推断
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 11:52
 */
public class TypeInferenceDemo {

   public static void main(String[] args) {
      TypeInferenceDemo demo = new TypeInferenceDemo();
      // 测试类型推断
//    demo.testVar();

      // 循环中使用
      List<UserInfo> userList = new ArrayList<>();
      UserInfo userInfo = new UserInfo();
      userInfo.setUsername("张三");
      userInfo.setPassword("123456");
      userList.add(userInfo);
      for (var user : userList) {
         System.err.println(user.getUsername() + " | " + user.getPassword());
      }
   }

   public void testVar() {
      var name = "张三";
      var age = 33;
      var id = 1001L;
      var amount = BigDecimal.ZERO;
      var user = new UserInfo();
      System.err.println("-------------------------------------------------");
      System.err.println(name);
      System.err.println(age);
      System.err.println(id);
      System.err.println(amount);
      System.err.println(user);
   }

   public static class UserInfo {
      private String username;
      private String password;

      public String getUsername() {
         return username;
      }

      public void setUsername(String username) {
         this.username = username;
      }

      public String getPassword() {
         return password;
      }

      public void setPassword(String password) {
         this.password = password;
      }
   }
}

测试的效果如图

在这里插入图片描述
在这里插入图片描述

3)、注意

1)、只能在方法内部使用(局部变量);

2)、必须有初始化值且不能为null;

3)、不能定义为方法的返回类型。


3、空指针优化

1)、说明

Java15新特性,就是把NullPointerException异常的日志做了优化打印的更人性化。

2)、案例

可以看到,提示会更有指向性,意味着以后在复杂的生产环境排错过程中,你很可能不会再被空指针异常所困扰。

在这里插入图片描述

3)、注意

没什么可注意的


4、文本块

1)、说明

JDK15新特性,就是替代了以前String中一堆换行符和双引号的简洁版写法,相信你很难不喜欢。

2)、案例

可以看到,就是三引号取代了双引号,因为双引号的内容会夹带一堆换行符,而三引号里面就单纯是内容,很清晰,而且双引号换行需要杠n,而三引号直接换行即可生效。

/**
 * <p>
 * JDK15新特性:文本块
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 23:36
 */
public class TextBlockDemo {
   private static final String str =
         "本以为大S和汪小菲的事情就这样告一段落,彼此都过着属于自己的幸福小日子,但是,被骂9天后,汪小菲口中的“窝囊废”,终于有所行动了!\n"
         + "\n"
         + "也许具俊晔再也忍受不了别人骂自己窝囊废,更不愿意住在别人房子内,所以11月30日,据媒体爆料,具俊晔这次要男人一把,决定买一套属于自己的房子,"
         + "属于自己的床垫,搬出汪小菲买的豪宅,来证明自己的实力。";

   private static final String newStr = """
            本以为大S和汪小菲的事情就这样告一段落,彼此都过着属于自己的幸福小日子,但是,被骂9天后,汪小菲口中的“窝囊废”,终于有所行动了!
            
            也许具俊晔再也忍受不了别人骂自己窝囊废,更不愿意住在别人房子内,所以11月30日,据媒体爆料,具俊晔这次要男人一把,决定买一套属于自己的房子,
            属于自己的床垫,搬出汪小菲买的豪宅,来证明自己的实力。
         """;

   public static void main(String[] args) {
      System.err.println(str);
      System.err.println("------------------------------------------------");
      System.err.println(newStr);
   }
}
3)、注意

文本块只有一个要注意的地方,就是默认三引号内的内容没有缩进,想要缩进的话要以末尾三引号为参照物向后偏移来确定缩进量。

下面一张图会直接展示给你效果:

在这里插入图片描述

5、智能转型

1)、说明

Java16新特性,就是帮你对instanceof做了增强,智能转换变量类型。

2)、案例

可以对比old和new两种写法,第二种就是将第一种简化了,类型转换+声明变量+后续逻辑判断一起搞定。

/**
 * <p>
 * JDK16新特性:智能转型
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/3 14:02
 */
public class InstanceofMatching {
   /**
    * 旧写法
    * @param obj 未知对象
    */
   static void testOld(Object obj) {
      if (obj instanceof String) {
         String s = (String) obj;
         if ("模式匹配".equals(s)) {
            System.err.println(s);
         }
      }
   }

   /**
    * 新写法
    * @param obj 未知对象
    */
   static void testNew(Object obj) {
      if (obj instanceof String s && "模式匹配".equals(s)) {
         System.err.println(s);
      }
   }

   public static void main(String[] args) {
      testOld("Hello, Java!");
      testNew("模式匹配");
   }
}
3)、注意

instanceof后面若需要增强判断必须要用&&,不能用||,因为instanceof本来就是做类型匹配的,Java可以确保&&后面的变量一定存在,但无法判断||后面的变量一定存在,所以会报错。

在这里插入图片描述

6、record类

1)、说明

Java16新特性,简单讲,就是有了它,声明一个final类变得更简洁和可读。

2)、案例

先来看下写法

/**
 * <p>
 * JDK16新特性:record类
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 21:52
 */
public record RecordDemo(int type, String typeName) {
   private void test() {
      System.err.println(type + " | " + typeName);
   }
   public static void main(String[] args) {
      // 这里new的时候带的参数其实就是类的属性,等于声明属性+访问构造方法二合一。
      RecordDemo recordDemo = new RecordDemo(100, "葡萄牙");
      recordDemo.test();
   }
}

上面的新写法等同于下面这种老的写法,一看就懂。

/**
 * <p>
 * RecordDemo的写法等同于这个类
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 21:55
 */
public final class RecordCustomDemo {
   final int type;
   final String typeName;

   public int type() {
      return type;
   }

   public String name() {
      return typeName;
   }

   public RecordCustomDemo(int type, String typeName) {
      this.type = type;
      this.typeName = typeName;
   }

   @Override
   public boolean equals(Object o) {
      if (this == o)
         return true;
      if (o == null || getClass() != o.getClass())
         return false;
      RecordCustomDemo that = (RecordCustomDemo) o;
      return type == that.type && Objects.equals(typeName, that.typeName);
   }

   @Override
   public int hashCode() {
      return Objects.hash(type, typeName);
   }
}
3)、注意

没什么可注意的,就跟使用正常的类差不多,只是自动生成了以下内容:

1)、括号里的参数就是该类的属性,且是final类型;

2)、自动生成一个带有该属性的构造器;

3)、自动生成该属性的访问器,如xx.type()、xx.typeName();

4)、生成了equals和hashCode方法。

如果还是不懂,就理解成lombok中的@Data注解即可,同样的意思。


7、密封类和接口

1)、说明

Java17新特性,密封类和密封接口。

使用sealed关键字声明的类,可以通过设置permits关键字来控制哪些子类可以继承它。

使用sealed关键字声明的接口,可以通过设置permits关键字来控制哪些类可以实现它。。

简单来讲,就是爸爸规定哪个儿子能继承财产。

2)、案例

看下密封类的写法

用sealed声明一个类,设置permits授权哪几个子类可以继承它。

/**
 * <p>
 * JDK17新特性:密封类
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 17:20
 */
public sealed class Daddy permits Son1, Son2 {
}

第一个儿子可以继承

/**
 * <p>
 *
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 17:22
 */
public final class Son1 extends Daddy {
}

第二个儿子可以继承

/**
 * <p>
 *
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 17:23
 */
public final class Son2 extends Daddy {
}

第三个儿子估计是不孝子

可以看到IDEA是有错误提示的,意思是没有被sealed声明的父类所允许。

在这里插入图片描述

然后,我们来看看密封接口。

其实和密封类差不多,但还可以结合前面讲过的record来简化代码。

/**
 * <p>
 * JDK17新特性:密封接口
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 18:03
 */
public sealed interface DaddyInterface permits Son4, Son5 {
   void test();
}

第四个儿子可以实现父亲的愿望,用了record之后简化了变量声明及一些内置方法的实现。

/**
 * <p>
 *
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 17:23
 */
public record Son4(int age, String name) implements DaddyInterface {
   @Override
   public void test() {

   }
}

第五个儿子可以实现父亲的愿望

/**
 * <p>
 *
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/2 17:23
 */
public record Son5(int age, String name) implements DaddyInterface {
   @Override
   public void test() {

   }
}

第六个儿子有点傻,不能实现父亲的愿望,可以看到错误提示和前面密封类一样。

在这里插入图片描述

3)、注意

1)、sealed声明的父类,它的子类只能用final、sealed、non-sealed来修饰;

2)、sealed声明的父类,至少要有一个子类;

3)、没有在permits中授权的子类,无法继承父类;

4)、密封接口和密封类的注意点没什么区别;

4)、密封接口结合record来完成可以少写更多代码变得更加简洁。

这里特别说一点,sealed和record其实在Java新特性模式匹配中很有意义,但是我认为模式匹配对于从未了解过的Java程序员来讲有些晦涩,结合sealed后有种套娃传销的感觉,如果难于理解就不是我们本来的目的,因此没有专门花费章节赘述,结尾会简单说一下我对模式匹配的看法。


8、switch增强

1)、说明

为什么把switch单独放最后讲,因为Java14-17分别对其做了增强,放在最后汇总起来讲更直观。

一共有三个改变:

1)、支持箭头语法;

2)、支持表达式;

3)、支持case null。

2)、案例

箭头语法,其实就是把旧写法中的冒号和break直接换成了箭头来代替,更简洁。

/**
 * <p>
 * JDK14新特性:switch箭头语法
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/3 11:05
 */
public class SwitchDemo1 {
   private static void foods(int i) {
      switch (i) {
         case 1:
            System.err.println("青椒肉丝");
            break;
         case 2:
            System.err.println("番茄炒蛋");
            break;
         default:
            System.err.println("米饭");
      }
   }

   private static void fruits(int i) {
      switch (i) {
         case 1 -> System.err.println("香蕉");
         case 2 -> System.err.println("猕猴桃");
         default -> System.err.println("苹果");
      }
   }

   public static void main(String[] args) {
      foods(1);
      fruits(3);
   }
}

支持表达式,其实就是能写单个或多个表达式来return。

/**
 * <p>
 * JDK14新特性:switch支持表达式
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/3 11:05
 */
public class SwitchDemo3 {

   /**
    * 单表达式
    */
   private static String fruits(int i) {
      return switch (i) {
         case 1 -> "香蕉";
         case 2 -> "猕猴桃";
         default -> "苹果";
      };
   }

   /**
    * 多表达式
    */
   private static String fruitsNew(int i) {
      return switch (i) {
         case 1, 2 -> {
            System.err.println("----------------------------------");
            System.err.println("来一个香蕉");
            yield "香蕉来咯";
         }
         case 3, 4 -> {
            System.err.println("----------------------------------");
            System.err.println("来一个猕猴桃");
            yield"猕猴桃来咯";
         }
         default -> {
            System.err.println("----------------------------------");
            System.err.println("没的选就来个苹果吧");
            yield "苹果来咯";
         }
      };
   }

   public static void main(String[] args) {
//    System.err.println(fruits(2));
//    System.err.println(fruits(3));

      System.err.println(fruitsNew(2));
      System.err.println(fruitsNew(4));
      System.err.println(fruitsNew(5));
   }
}

支持case null,其实就是case可以接收null值了。

/**
 * <p>
 * JDK17新特性(预览):switch支持case null
 * </p>
 *
 * @author 程序员济癫,公众号:【Java分享客栈】
 * @since 2022/12/3 11:05
 */
public class SwitchDemo2 {
   private static void foods(String s) {
      if (s == null) {
         return;
      }
      switch (s) {
         case "1":
            System.err.println("青椒肉丝");
            break;
         case "2":
            System.err.println("番茄炒蛋");
            break;
         default:
            System.err.println("米饭");
      }
   }

   private static void fruits(String s) {
      switch (s) {
         case "1" -> System.err.println("香蕉");
         case null -> System.err.println("null");
         default -> System.err.println("苹果");
      }
   }

   public static void main(String[] args) {
      foods("1");
      fruits(null);
   }
}

可以看下效果,直接传null也不会报错。

在这里插入图片描述

3)、注意

1)、箭头语法,冒号和箭头不能同时存在;

2)、表达式,多个表达式时要使用花括号并使用yield关键字返回;

3)、case null是预览功能,在IDEA - Project Structure - Modules中选择Language Level为17(Preview)才能编译通过,参考前面的准备工作。


总结

1)、Java9-17的新特性不仅于此,还有一些挺有特点的内容,比如不可变集合、模块化、String和Stream的API增强等等,但是我个人认为不具有代表性,要么是工具能直接帮你转换,要么就是你大概率用不到,所以就没列出来;

2)、模式匹配,是不少Java程序员关注的内容,本篇中record、switch、密封类和接口的内容其实都是模式匹配的基础,但模式匹配对Java来讲并不成熟,《Thinking In Java》的作者也说过可能要好几年才会看到完整形式的Java模式匹配,所以没必要现在就花太多心思去研究一个残缺版本,这个特性和Python、Kotlin、Scala相比其实还差得远。


Java发展趋势

最后稍微说下不少人关心的这个问题,我觉得只要你了解过Java8之后这些版本的新特性和预览特性,你一定可以发现Java在尝试改变,这是一个很好的信号。

就比如上面的这些新特性,你甚至能找到不少Python、JavaScript等语言的影子,Go语言作为新语言就是站在巨人肩膀上发展起来的,吸纳了很多语言的优秀特点。

现在,Java也在走类似的路,能明显看到它在将一些优秀语言的亮点容纳到自己的新版本中,这种趋势代表着一个意义:Java在不断进步。

网上一直充斥着一些看衰Java的言论,没必要当真,你必须自己去体会生态和了解国内的IT公司动态才能有所感受。

Java依然是国内使用最广泛的语言,并且具备最庞大的生态,这不是一朝一夕可以替代的,是市场规律发展的结果。

SpringBoot3.0支持Java17,Jenkins新版支持Java17,Kafka3.0直接抛弃Java8,还有IDEA2022默认支持Java17,等等之类的开源社区和生态都在给新版的Java背书,更有微软宣布全面拥抱Java,这里面不单单是技术层面的提高,更有利益的诉求和捆绑。

从这一点来说,学习Java完全是值得的,作为一门成熟优秀且严谨的语言,它就像一个白领一样正襟危坐。

我还认为现在学习和掌握Java的工程师,未来转去其他语言也不会有压力,上面的新特性就说明了这种方向,它在吸纳其他语言的亮点。

未来可以预期的是,你转到其他语言会逐渐变的没有那么陌生和晦涩,这是我看到的一个方向,未来的编程语言发展大方向就是大融合(大抄袭,咳咳),你中有我,我中有你。



原创文章纯手打,一个一个字敲出来的,键盘上全是血,如果觉得有帮助麻烦点个赞和收藏吧~

本人致力于分享工作中的经验及趣事,喜欢的话可以进主页关注一下哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文笔记】Radatron: Accurate Detection Using Multi-Resolution Cascaded MIMO Radar

文章及补充材料链接&#xff1a;https://jguan.page/Radatron/ 理解本文需要一些电磁波与雷达信号处理相关的理论知识。 1. 引言 雷达的角度分辨率通常很低。雷达的角度分辨率与雷达的天线孔径成反比&#xff0c;因此毫米波雷达要达到激光雷达的角度分辨率&#xff0c;需要3000…

黑盒测试用例设计 - 因果图法

说明 因果图法是一种适合于描述对多种输入条件组合的测试方法根据输入条件的组合、约束关系和输出条件的因果关系&#xff0c;分析输入条件的各种组合情况&#xff0c;从而设计测试用例的方法它适合于检查程序输入条件涉及的各种组合情况 使用步骤 第一步&#xff1a;根据功…

60岁首席工程师被SpaceX边缘化,主管:我怕他退休或死了

金磊 发自 凹非寺量子位 | 公众号 QbitAI在SpaceX&#xff0c;连首席工程师竟也能遭遇职场边缘化。故事的主人公叫做John Johnson&#xff08;姑且叫他“逊哥”&#xff09;&#xff0c;他在2018年加入SpaceX。当时的逊哥已经58岁&#xff0c;但在光学工程领域可谓颇有建树。刚…

Java---数据库---MyBatisPlus

MyBatisPlus1&#xff0c;MyBatisPlus入门案例与简介1.1 入门案例步骤1:创建数据库及表步骤2:创建SpringBoot工程步骤3:勾选配置使用技术步骤4:pom.xml补全依赖步骤5:添加MP的相关配置信息步骤6:根据数据库表创建实体类步骤7:创建Dao接口步骤8:编写引导类步骤9:编写测试类1.2 M…

Java项目:ssm图书馆管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 功能介绍 基于ssm的图书馆管理系统.主要功能包括&#xff1a;图书查询、图书管理、图书编辑、读者管理、图书的借阅与归还以及借还日志记录等。 用户分为…

ArrayList源码阅读笔记

1. 基础知识 1.1 概念 ArrayList是可以动态增长和缩减的索引序列&#xff0c;它是基于数组实现的List类。该类封装了一个动态再分配的Object[]数组&#xff0c;每个对象都有一个capacity属性&#xff0c;表示它们所封装的Object[]数组长度&#xff0c;当向ArrayList中添加元素…

DAMOYOLO windows 单卡训练

最近达摩院放出了目前最能打的yolo算法&#xff0c;时间和精度都得到了提升 目前代码已经开源&#xff1a; 代码地址&#xff1a;GitHub - tinyvision/DAMO-YOLO: DAMO-YOLO: a fast and accurate object detection method with some new techs, including NAS backbones, effi…

详细的科技特长生路径和成长规划

2021年&#xff0c;教育部印发了《关于进一步加强和改进普通高等学校艺术类专业考试招生工作的指导意见》&#xff0c;在其中规范了艺术类专业的招生政策&#xff0c;包括艺术类考试和高水平艺术团考试&#xff0c;其中明确自2024年起&#xff0c;高校高水平艺术团不再从高校招…

今年双十二值得买的数码好物推荐!双十二数码产品抢购攻略

时间过得真快&#xff0c;一年一度的双十二年终最后的大促即将正式拉开序幕。此刻&#xff0c;不知道大家制定好购物计划了吗&#xff1f;如果你想入手数码好物&#xff0c;那么不妨看一下我刚刚整理的这份清单&#xff0c;涵盖了手机、平板、耳机等多个品类&#xff0c;相信总…

Centos Linux 7 查看网卡

Centos Linux 7 查看网卡 一. 二.

使用 Learner Lab - 使用 CloudWatch 进行排错,搭配 API Gateway 与 Lambda

使用 Learner Lab - 使用 CloudWatch 进行排错&#xff0c;搭配 API Gateway 与 Lambda AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务&#xff0c;让学生可以在 100 USD的金额下&#xff0c;自行练习所要使用的 AWS 服务&#xff0c;如何进入 Learne…

设计模型之单例设计

前言 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有单个对象被…

3. Exchange 交换机的使用

二八佳人体似酥&#xff0c;腰间仗剑斩愚夫。虽然不见人头落&#xff0c;暗里教君骨髓枯。 在上一节中&#xff0c;我们创建了一个工作队列。我们假设的是工作队列背后&#xff0c;每个任务都恰好交付给一个消 费者(工作进程)。在这一部分中&#xff0c;我们将做一些完全不同的…

孪生神经网络

孪生神经网络 孪生神经网络&#xff08;Siamese network&#xff09;主要用途是比较两图片的相似程度&#xff0c;其核心思想就是权值共享。 卷积神将网络是通过卷积运算提取图像的特征进行训练的&#xff0c;如果想比较两个图像的相似程度&#xff0c;也要对两个图像分别进行…

毛里智慧小学宿舍楼工程量清单编制

目 录 摘 要 I 第1章 前言 1 第2章 招标控制价编制 3 2.1招标控制价 3 2.2建设项目招标控制价汇总表 4 2.3单项工程招标控制价汇总表 5 2.4单项工程招标控制价汇总表 14 2.5分部分项工程和单价措施项目清单与计价表 24 2.6总价措施项目清单与计价表 27 2.7综合单价分析表 28 2.…

C语言学习之路(基础篇)—— 文件操作(上)

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 概述 1) 磁盘文件和设备文件 磁盘文件 指一组相关数据的有序集合,通常存储在外部介质(如磁盘)上&#xff0c;使用时才调入内存。 设备文件 在操作…

亚马逊云科技re:Invent:Serverless是所有构想的核心

12月2日&#xff0c;2022亚马逊云科技re:Invent全球大会上&#xff0c;Amazon.com副总裁兼首席技术官Werner Vogels博士向开发者们展示了另一种可能。在一系列Serverless工具的帮助下&#xff0c;一些代码可以少写&#xff0c;因为未来你可能再也不需要写它们了。这恐怕是自云原…

包装类-Wrapper

包装类的分类 针对八种基本数据类型相应的引用类型-包装类有了类的特点&#xff0c;就可以调用对应的类中的方法 装箱和拆箱 Java是一种面向对象的编程语言&#xff0c;学习Java时就被明确灌输了一个概念&#xff1a;OOP&#xff0c;即面向对象编程。一切皆对象。但是基本…

[附源码]JAVA毕业设计框架的电脑测评系统(系统+LW)

[附源码]JAVA毕业设计框架的电脑测评系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技…

Win11右键菜单反应慢有延迟解决方法分享

Win11右键菜单反应慢有延迟解决方法分享。有用户发现电脑鼠标点击右键菜单的时候&#xff0c;会出现一些延迟&#xff0c;导致自己在使用的过程中非常难受。那么这个问题如何自己去进行解决呢&#xff1f;我们一起来看看详细的解决方法分享吧。 解决方法&#xff1a; 注意&…