Java中的这些骚操作你不能不知道!!!
作者:香菜聊游戏 发布时间:2022-07-08 12:28:14
1、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后边的()可以添加多行语句, 我上篇文章有展示:《保姆系列五》原来JavaIO如此简单,惊呆了
2、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);
}
3、不定项参数 ...
格式如下:
参数个数可以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);
}
4、跳出多层循环的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 比较好,你觉得呐?
5、方法引用
用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、方法调用是除了调用动作外,没有其他任何多余的动作
本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
来源:https://gamwatcher.blog.csdn.net/article/details/117164678


猜你喜欢
- 如果项目中要用到数据库,铁定要用到分页排序。之前在做数据库查询优化的时候,通宵写了以下代码,来拼接分页排序的SQL语句 /// <su
- 一、连接客户端原理流程图二、功能要求1)连接成功后,可以将服务器发来的消息不停地显示在 listbox 中;2) 客户端要发给服务器的数据,
- 各个框架版本信息springboot: 2.1.3springcloud: Greenwich.RELEASEseata: 1.0.0sha
- 有经验的开发人员都知道在开发.NET应用时可以利用配置文件保存一些常用并且有可能变化的信息,例如日志文件的保存路径、数据库连接信息等等,这样
- 背景何为延迟队列?顾名思义,延迟队列就是进入该队列的消息会被延迟消费的队列。而一般的队列,消息一旦入队了之后就会被消费者马上消费。场景一:在
- 一、如何实现TCP通信要实现TCP通信需要创建一个服务器端程序和一个客户端程序,为了保证数据传输的安全性,首先需要实现服务器端程序,然后在编
- 介绍责任链模式是一种行为型设计模式,其目的是将请求从一个对象传递到另一个对象,直到找到能够处理该请求的对象为止.再责任链模式中,每个对象都持
- launch我们经常用,今天来看看它是什么原理。建议: 食用本篇文章之前记得先食用Kotlin协程之createCoroutine和star
- 简介:本文已一个简要的代码示例介绍ThreadLocal类的基本使用方式,在此基础上结合图片阐述它的内部工作原理。早在JDK1.2的版本中就
- 本文实例为大家分享了C#实现QQ聊天窗口的具体代码,供大家参考,具体内容如下效果图:using System;using System.Co
- 记录web项目部署到阿里云服务器步骤(使用 web项目、阿里云服务器、Xftp、Xshell),敬请参考和指正1.将要部署的项目打包成WAR
- 如果一个内存中的对象没有任何引用的话,就说明这个对象已经不再被使用了,从而可以成为被垃圾回收的候选。不过由于垃圾回收器的运行时间不确定,可被
- 最新Android版本、API级别与代号对应关系代号版本号API/NDK级别发布时间-O8.0API level 262017-3-21牛轧
- import java.util.Arrays;/** * 栈的实现<br> * @author Skip&
- Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册
- 我就废话不多说了,大家还是直接看代码吧~<!-- 查询物品的id --><select id="checkIte
- 前言在日常的测试工作过程中,app可能会出现闪退崩溃的情况,这个时候就需要测试同学快速抓取到崩溃日志,来有效的辅助开发定位问题,快速的去解决
- * 可以说是Android开发中最常用的东西之一。我们通过 * 可以监听对象的各种变化事件,并进行一些需要的处理,相当有用,而且使用起来也
- 什么是Dozer?Dozer是一种Java Bean到Java Bean的映射器,递归地将数据从一个对象复制到另一个对象,它是一个强大的,通
- 问题来源一般来说,一个稍微大些的项目都会有一些依赖的Jar包,而在将项目部署到服务器的过程中,如果没有持续集成环境的话,也就是说服务器不支持