你知道Java的这些骚操作吗?

 更新时间:2021年05月27日 09:39:05   作者:香菜聊游戏  
今天在看python相关的东西,看到各种骚操作,回头想了下Java有没有什么骚操作,整理下面几种,一起看一下吧,需要的朋友可以参考下

一、try with catch

还记得这样的代码吗?我们需要手动的关闭资源的流,不然会造成资源泄漏,因为虚拟机无法管理系统资源的关闭,必须手动释放。

public void manualClose(String fileName) {
  BufferedReader reader = null;
  try {
      String line;
      reader = new BufferedReader(new FileReader(fileName));
      while ((line = reader.readLine()) != null) {
          ...
      }
  } catch (Exception e) {
      ...
  } finally {
      if (reader != null) {
          try {
              reader.close();
          } catch (IOException e) {
              ...
          }
      }
  }
}

骚操作解救你:

public void autoClose(String fileName) {
  try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
      String line;
      while ((line = reader.readLine()) != null) {
          ...
      }
  } catch (Exception e) {
      ...
  }
}

可以看到,try-with-resources的比前一种方法明显节省了很多代码,资源在try后边的()中生成,在try结束后程序会自动关闭资源

如果需要声明多个资源,可以在try后面的()中,以;分隔;也就是说,try后边的()可以添加多行语句, 我上篇文章有展示:你肯定能看懂的Java IO相关知识总结

二、instance of

对象是否是这个特定类或者是它的子类的一个实例,返回一个布尔值。左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。

用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
 
 
public interface Monster {
  }
   public static class Dinosaur implements Monster{
  }
   public static void main(String[] args) {
       Dinosaur dinosaur = new Dinosaur();
       System.out.println(dinosaur instanceof Monster);
  }

三、不定项参数 ...

格式如下:

参数个数可以0或者多个

public void method(int...args);

业务场景:

1、在业务开发的时候经常之前写一个方法,但是后来业务变动了,需要增加参数,这个时候可以使用这种方式,多传参数,调用的地方不需要覆盖

2、如果一个方法的的不确定参数个数的情况,通常来说我们会重载,但是如果多了很麻烦,这个时候...可以出场了

//方法重载,解决参数个数不确定问题
  public void method(){};
  public void method(int i){};
  public void method(int i, int j){};
  public void method(int i, int j, int k){};
 
优化之后的形式:
 
public void method(int i,int ...args);

调用的三种方式

public void call(){
      //1、 不使用变参
      method(1);
      //2、 直接调用
      method(1,2,23,4,5,6);
      //3、 数组调用
      int[] arr = {1,2,23,4,5,6};
      method(5,arr);
  }

四、跳出多层循环的label

Java 中的标签是为循环设计的,是为了在多重循环中方便的使用 break 和coutinue ,当在循环中使用 break 或 continue 循环时跳到指定的标签处

public static void main(String[] args) {
       for (int i = 0; i < 5; i++) {
           labelA: for (int j = 0; j < 5; j++) {
               for (int k = 0; k < 5; k++) {
                   if (k == 1) {
                       break labelA;
                  }
                   System.out.println(1);
              }
          }
      }
  }

不推荐这种用法,虽然很骚,但是老老实实的一层一层break 比较好,你觉得呐?

五、方法引用

用Lambda表达式仅仅是调用一些已经存在的方法,除了调用动作外,没有其他任何多余的动作

图片

package org.pdool;
 
import java.util.ArrayList;
import java.util.List;
 
/**
* 方法引用测试类
* @author 香菜
*/
public class Trytest {
   static List<Player> playerList = new ArrayList<>();
 
   // 静态方法
   public static void print(String s) {
       System.out.println(s);
  }
 
   static class Player {
       private String name;
       public Player(String name) {
           this.name = name;
           playerList.add(this);
      }
 
       private void printName() {
           System.out.println(name);
      }
  }
 
   public static void main(String[] args) {
       List<String> strList = new ArrayList<>();
       strList.add("香菜");
       strList.add("follow me");
       // 1、静态方法引用
       strList.forEach(Trytest::print);
       // /2、对象方法引用
       strList.forEach(System.out::println);
       // 3、构造函数
       strList.forEach(Player::new);
       // 4、对象方法
       playerList.forEach(Player::printName);
  }
}

总结

1、在try结束后程序会自动关闭资源

2、instance of 必须是子类

3、参数个数可以0或者多个,重构代码利器

4、使用 break 或 continue 循环时跳到指定的标签处

5、方法调用是除了调用动作外,没有其他任何多余的动作

到此这篇关于你知道Java的这些骚操作吗?的文章就介绍到这了,更多相关Java骚操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java程序员的10道常见的XML面试问答题(XML术语详解)

    Java程序员的10道常见的XML面试问答题(XML术语详解)

    包括web开发人员的Java面试在内的各种面试中,XML面试题在各种编程工作的面试中很常见。XML是一种成熟的技术,经常作为从一个平台到其他平台传输数据的标准
    2014-04-04
  • JAVA文件扫描(递归)的实例代码

    JAVA文件扫描(递归)的实例代码

    这篇文章主要介绍了JAVA文件扫描(递归)的实例代码 ,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-06-06
  • Springboot如何通过filter修改Header的值

    Springboot如何通过filter修改Header的值

    这篇文章主要介绍了Springboot如何通过filter修改Header的值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 关于mybatis mapper类注入失败的解决方案

    关于mybatis mapper类注入失败的解决方案

    这篇文章主要介绍了关于mybatis mapper类注入失败的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • SpringBoot 转发请求至指定页面的操作方法

    SpringBoot 转发请求至指定页面的操作方法

    这篇文章主要介绍了SpringBoot 转发请求至指定页面,需要使用@Controller,不可使用@RestController,@RestController相当于@Controller和@ResponseBody合在一起的作用,本文通过实例代码详细讲解,需要的朋友可以参考下
    2022-11-11
  • IDEA新建springboot项目时未生成pom.xml文件的解决操作

    IDEA新建springboot项目时未生成pom.xml文件的解决操作

    这篇文章主要给大家介绍了关于IDEA新建springboot项目时未生成pom.xml文件的解决操作方法,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-02-02
  • SpringCloud Bus消息总线的实现

    SpringCloud Bus消息总线的实现

    消息总线是一种通信工具,可以在机器之间互相传输消息、文件等,这篇文章主要介绍了SpringCloud Bus消息总线的实现,Spring cloud bus 通过轻量消息代理连接各个分布的节点,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Java中的关键字volatile详解

    Java中的关键字volatile详解

    这篇文章主要介绍了Java中的关键字volatile,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 基于SpringBoot应用监控Actuator安全隐患及解决方式

    基于SpringBoot应用监控Actuator安全隐患及解决方式

    这篇文章主要介绍了SpringBoot应用监控Actuator安全隐患及解决方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java并发编程之CountDownLatch源码解析

    Java并发编程之CountDownLatch源码解析

    这篇文章主要介绍了Java并发编程之CountDownLatch源码解析,文中有非常详细的代码示例,对正在学习java并发编程的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-04-04

最新评论