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
猜你喜欢
- ES是一个基于Lucene的分布式全文搜索服务器,和SQL Server的全文索引(Fulltext Index)有点类似,都是基于分词和分
- 业务场景我们知道在使用PageHelper分页插件时,会对执行PageHelper.startPage(pageNum, pageSize)
- 查询文档 & 基本操作为了方便学习, 本节中所有示例沿用上节的索引按照ID单个GET class_1/_doc/1查询结果:{ &n
- Bitmap (android.graphics.Bitmap)Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像
- 最近碰到个需求,是希望在Unity有一个按钮,打开后直接跳转淘宝app,打开商品页面。百度了下没有相关的文章,于是我在此分享下。之前开发游戏
- Jmeter 执行Java 请求时,运行结束后报错,Tidying up remote @ Mon Feb 24 19:42:34 CST
- package TOOLS;import java.io.BufferedReader;import java.io.File;import
- 我们使用Jmeter测试同学的网站时,就会出现网站无法访问,403等错误。An error occurred.Sorry, the page
- jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的jav
- 前言在一些项目中,经常会遇到需要把当前线程中的上下文传递到其他线程中的情况,比如某项目包含国际化操作,在业务请求进来时需要把对应的国家代码存
- 文章来源:csdn 作者:wangfengsdu经常听到回调函数(callback function)这个概念, 所谓回调函数,就是指这个函
- 前端页面功能模块化拆分当一个系统的功能很多时,不可能所有功能模块的页面都写在一个页面里面,这时就需要将不同功能模块的页面拆分出去,就像模板一
- 这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参
- @pathvariable与@requestparam碰到的一些问题一、@pathvariable可以将 URL 中占位符参数绑定到控制器处
- 前言先简单介绍下我们的使用场景,线上5台Broker节点的kafka承接了所有binlog订阅的数据,用于Flink组件接收数据做数据中台的
- 效果展示人脸支付效果视频密码框输入支付效果视频因为密码支付时会调起系统安全键盘,开启自动保护功能,防止泄露,会导致输入密码时录屏黑屏,故使用
- Spring Security 过滤器链及自定义Filter别名类名称Namespace Element or AttributeCHANN
- 一、IDEA自带打包插件内容:此种方式可以自己选择制作胖包或者瘦包,但推荐此种方式制作瘦包。输出:输出目录在out目录下流程步骤:第一步:
- 一、静态代理模式1.1、 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标
- 前言上一篇文章已经介绍了fluent-mybatis项目的构建,文章地址:Java Fluent Mybatis实战之构建项目与代码生成篇上