Java 常用技巧/常见错误

一、常用技巧

  1. try catch语句块中try()的括号中代码作用(JDK1.7)

    A. 语法格式:try(创建流对象语句,如果多个,使用分号隔开) {

            // 读写数据

          } catch (IOException e) {

            e.printStackTrace();
          }

    B. 语句执行完后,会自动关闭括号中的资源,该语法确保了每个资源,在语句结束时关闭

    C. 举例

  2. 退出双层for循环:仅break关键字只能跳出最内层循环,若要跳出最外层循环,需要新增一个标记loop;

复制代码
public static void main(String[] args) {
  System.out.println("双层循环开始了");
  loop: for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 3; j++) {
      System.out.println("i=" + i + ", j=" +j);
      if (i == 2 && j == 1) {
        break loop;
      }
    }
  }
  System.out.println("双层循环结束了");
}
复制代码

 

二、常见错误

  1. 现象:将数组转为List后进行removeAll()操作,报java.lang.UnsupportedOperationException异常;

   错误代码:

复制代码
    /**
     * 获取标记ID
     * @return 标记ID
     */
    private Long getSignId() {
        Long[] signIds = {1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L,
                                    26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L};
        List<Long> allSignIds = Arrays.asList(signIds);
        List<Long> existsSignIds = groupManageMapper.findSignId();
        // 留下未用的标记ID
        allSignIds.removeAll(existsSignIds);
        return allSignIds.size() == 0 ? null : allSignIds.get(0);
    }
复制代码

   正确代码:

复制代码
    /**
     * 获取标记ID
     * @return 标记ID
     */
    private Long getSignId() {
        Long[] signIds = {1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L,
                                    26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L};
        List<Long> allSignIds = new ArrayList<>(Arrays.asList(signIds));
        List<Long> existsSignIds = groupManageMapper.findSignId();
        // 留下未用的标记ID
        allSignIds.removeAll(existsSignIds);
        return allSignIds.size() == 0 ? null : allSignIds.get(0);
    }
复制代码

   详解:

    A. asList方法不适用于基本数据类型;

         B. 不支持add、remove、removeAll和clear方法;

    C. 如果要可变,需使用ArrayList包装下。

  2. 现象:前端传递时间参数,后端Date类型无法接收,后端传递Date类型时间数据,前端展示不友好;

   错误信息:

 

    正确代码:

 

   3. Integer类数字比较及乘法意外结果

    错误代码:

复制代码
  public static void main(String[] args) {
        Integer a = 100, b = 100;
        Integer c = 1000, d = 1000;
        Integer e = 1604571697;
        // IntegerCache类缓存了-128到127之间的所有整数的对象
        System.out.println(a == b);    // true
        System.out.println(c == d);    // false
        System.out.println(e * 1000);  // -1746071704
    }
复制代码

    正确代码:

复制代码
  public static void main(String[] args) {
        Integer a = 100, b = 100;
        Integer c = 1000, d = 1000;
        Integer e = 1604571697;
        // IntegerCache类缓存了-128到127之间的所有整数的对象
        System.out.println(a.equals(b));              // true
        System.out.println(c.equals(d));              // true
        System.out.println(e.longValue() * 1000);     // 1604571697000
    }
复制代码

 

posted @   如幻行云  阅读(161)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示