Java中try必须要结合catch吗_如何优雅的实现 try/catch 异常块?
来源:小明的学习笔记博客
地址:www.cnblogs.com/liruilong/p/13403963.html
在项目中,我们会遇到异常处理,对于运行时异常,需要我们自己判断处理。对于受检异常,需要我们主动处理。
在这之前。你需要知道以下几个概念:
行为参数化:
是java8提出的,函数式编程的一种思想,通过把代码包装为参数传递行为,即把代码逻辑包装为一个参数,传到方法里,Java8系列新特性教程可以关注公众号Java技术栈搜索阅读。
java8提出:Lambda表达式理解为简洁的表示可传递的匿名函数的一种方式,它没有名称,但它有函数体,参数列表,返回类型。可以抛出一个异常类型。包装代码逻辑为参数即使用Lambda表达式。
函数式接口:
本质上是只有一个抽象方法的普通接口,可以被隐式的转换为Lambda表达式,需要用注解定义(@FunctionalInterface)。默认方法和静态方法可以不属于抽象方法,可以在函数式接口中定义。
如果函数式接口中额外定义多个抽象方法,那么这些抽象方法签名必须和Object的public方法一样,接口最终有确定的类实现, 而类的最终父类是Object。因此函数式接口可以定义Object的public方法。
这句代码想来小伙伴都不陌生。这是一个受检异常,需要抛出一个ClassNotFoundException。
正常的写法:
嗯,我们来看具体的实现:很简单,我们要做的,即把`Class> clazz = Class.forName("类名");`当做一种行为去处理,接受一个String ,得到一个Class,所以我们要定义一个函数接口,描述这种行为。
这里,因为我们的行为需要抛出异常。所以在接口里也抛出异常。关于异常的最佳处理这里不介绍了,详细看下这篇《Java 编程中关于异常处理的 10 个最佳实践》。
然后,我们需要定义一个方法,将我们的行为作为参数传进去,同时,捕获一下我们的异常。
然后,我们可以调用我们的方法classFind方法,
当然。其实这种思想并不简单的可以做捕获异常的处理,
我们来看一个Demo->文本文件转换为字符串:
在我看来;将文本文件转换为字符串,我们需要使用高级流包装低级流,然后做缓存读出来。这里,我们不可避免的会遇到异常处理,流的关闭等操作,下面我们将这些代码都异常起来。专心写读的逻辑即可。
我的思路:
我对java IO用的不是很熟,大家有好的方法请留言,相互学习:
FileInputStream fileInputStream = new FileInputStream(file))
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream))
BufferedReader bufferedReader = new BufferedReader(inputStreamReader))
String str = bufferedReader.readLine()
字节流-》字符流-》字符缓存流 即 将字节流转换为字符流之后在用高级流包装。
所以我的思路是避免在逻辑里出现太多的IO流关闭,和异常捕获,专心处理读取逻辑即可,结合以下两种技术:
执一个行为,任何BufferReader -> String的Lambda表达式都可以作为参数传入。只要符合peocess方法的签名即可。
执行
加油,愿被这世界温柔以待 ^_^
最近热文:
扫码关注
Java技术栈
公众号干货。
点击「阅读原文」获取面试题大全~
Java中try必须要结合catch吗_如何优雅的实现 try/catch 异常块?相关推荐
- java try catch 接口_如何优雅的实现 try/catch 异常块?
在项目中,我们会遇到异常处理,对于运行时异常,需要我们自己判断处理.对于受检异常,需要我们主动处理. 但是繁琐的try{}caht嵌套在代码里,看着很不舒服,这里我们不讨论性能,就代码来讲,来看看如何 ...
- java中什么方法用来清空流_这个真的写的很细,JavaIO中的常用处理流,看完只有10%的人还不懂了...
JavaIO中的常用处理流 在前面,我们了解了有关JavaIO流基础的使用,其中对于IO流来说最基础的四大基类就是InputStream.OutputStream.Reader.Writer.而我们对 ...
- java中如何将字符串转化为字符_如何在Java中将字符串转换为运算符?
参见英文答案 > Is it possible to pass arithmetic operators to a method in java? ...
- java 中判断字符是否为big5码_【转载】判断一个字符是西文字符还是中文字符
转载:http://blog.chinaunix.net/u2/70445/showart_1133335.html 一.判断一个字符是西文字符还是中文字符 大家知道西文字符主要是指ASCII码 ...
- java中用户头像是怎么弄的_微信小程序获取用户openid,头像昵称信息,后台java代码...
https://blog.csdn.net/qq_39851704/article/details/79025557 首先最近正在练习微信小程序刚刚写了一个获取用户openid的代码,貌似之前的小程序 ...
- Java中创建线程需要使用的类_如何通过使用Java中的匿名类创建线程?
甲线程是可以同时与该程序的其他部分被执行的功能.所有Java程序都有至少一个称为主线程的线程,该线程由Java虚拟机(JVM)在程序启动时由主线程调用main()方法创建. 在Java中,我们可以通过 ...
- java中形参不可以是对象吗_(重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...
1.0建立二叉树的代码,在java中必须创建二叉树的方法必须用返回值,因为不存在c语言中的引用传递,在java中只有值传递 代码1为正确,代码2(没有使用返回值)为错误.那么为什么之前的例子中将对象作 ...
- java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...
本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: C++ Virtual/Pure Virtual Explained 虚函数和纯虚函数有什么区别? CPP中的纯虚函数与 ...
- 在java中私有方法能被重载吗_我可以在Java中重载私有方法吗?
重载是实现多态的一种机制,其中,一个类包含两个具有相同名称和不同参数的方法. 每当您调用此方法时,方法主体都将基于参数与方法调用绑定. 重载私有方法 是的,我们可以在Java中重载私有方法,但是您可以 ...
最新文章
- 如何快速搭建一个简约美观的在线互动教室?
- 蚂蚁金服移动端可视化解决方案 F2 3.2 正式发布
- string to byte[]
- 【LNOI2014】【BZOJ3626】NOIp2018模拟(三) LCA
- 设计新Xlator扩展GlusterFS[转]
- jquery插件导出WORD
- LoadRunner11支持的浏览器小结
- 升级鸿蒙系统有没有翻车,被寄予厚望的华为鸿蒙系统,这次要翻车?原来并不是我们想的那样...
- java代码执行 打包jar_Java程序打包成jar文件包并执行的方法
- PDF转WORD并翻译外文文献,工具转化
- 学习日记——W25Q64 FLASH—QSPI
- Linux 2.6内核配置说明(10----Device Drivers设备驱动程序)
- 将图片转化成RGB格式
- 现代电力系统分析王锡凡pdf_一对一论文定制 | 电子工程:电力系统潮流及最优潮流算法研究...
- Python学习笔记(15)-Python常用模块总结
- 两台linux电脑互联,基于NFS通信的Ubuntu 两台Ubuntu进行互联
- vscode 折叠所有区域代码快捷键
- launcher矩形图标
- android 清理缓存动画,Android仿微信清理内存图表动画(解决surfaceView屏幕闪烁问题)demo实例详解...
- Xilinx_PetaLinux:Failed to generate...