来源:小明的学习笔记博客

地址: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 异常块?相关推荐

  1. java try catch 接口_如何优雅的实现 try/catch 异常块?

    在项目中,我们会遇到异常处理,对于运行时异常,需要我们自己判断处理.对于受检异常,需要我们主动处理. 但是繁琐的try{}caht嵌套在代码里,看着很不舒服,这里我们不讨论性能,就代码来讲,来看看如何 ...

  2. java中什么方法用来清空流_这个真的写的很细,JavaIO中的常用处理流,看完只有10%的人还不懂了...

    JavaIO中的常用处理流 在前面,我们了解了有关JavaIO流基础的使用,其中对于IO流来说最基础的四大基类就是InputStream.OutputStream.Reader.Writer.而我们对 ...

  3. java中如何将字符串转化为字符_如何在Java中将字符串转换为运算符?

    参见英文答案 > Is it possible to pass arithmetic operators to a method in java?                         ...

  4. java 中判断字符是否为big5码_【转载】判断一个字符是西文字符还是中文字符

    转载:http://blog.chinaunix.net/u2/70445/showart_1133335.html 一.判断一个字符是西文字符还是中文字符    大家知道西文字符主要是指ASCII码 ...

  5. java中用户头像是怎么弄的_微信小程序获取用户openid,头像昵称信息,后台java代码...

    https://blog.csdn.net/qq_39851704/article/details/79025557 首先最近正在练习微信小程序刚刚写了一个获取用户openid的代码,貌似之前的小程序 ...

  6. Java中创建线程需要使用的类_如何通过使用Java中的匿名类创建线程?

    甲线程是可以同时与该程序的其他部分被执行的功能.所有Java程序都有至少一个称为主线程的线程,该线程由Java虚拟机(JVM)在程序启动时由主线程调用main()方法创建. 在Java中,我们可以通过 ...

  7. java中形参不可以是对象吗_(重要)java都是值传递,与对象形参所指向的对象改变,其实参所指向的对象也相应改变并不矛盾(2011年9.30日一天写的两个程序的总结结果)...

    1.0建立二叉树的代码,在java中必须创建二叉树的方法必须用返回值,因为不存在c语言中的引用传递,在java中只有值传递 代码1为正确,代码2(没有使用返回值)为错误.那么为什么之前的例子中将对象作 ...

  8. java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...

    本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: C++ Virtual/Pure Virtual Explained 虚函数和纯虚函数有什么区别? CPP中的纯虚函数与 ...

  9. 在java中私有方法能被重载吗_我可以在Java中重载私有方法吗?

    重载是实现多态的一种机制,其中,一个类包含两个具有相同名称和不同参数的方法. 每当您调用此方法时,方法主体都将基于参数与方法调用绑定. 重载私有方法 是的,我们可以在Java中重载私有方法,但是您可以 ...

最新文章

  1. 如何快速搭建一个简约美观的在线互动教室?
  2. 蚂蚁金服移动端可视化解决方案 F2 3.2 正式发布
  3. string to byte[]
  4. 【LNOI2014】【BZOJ3626】NOIp2018模拟(三) LCA
  5. 设计新Xlator扩展GlusterFS[转]
  6. jquery插件导出WORD
  7. LoadRunner11支持的浏览器小结
  8. 升级鸿蒙系统有没有翻车,被寄予厚望的华为鸿蒙系统,这次要翻车?原来并不是我们想的那样...
  9. java代码执行 打包jar_Java程序打包成jar文件包并执行的方法
  10. PDF转WORD并翻译外文文献,工具转化
  11. 学习日记——W25Q64 FLASH—QSPI
  12. Linux 2.6内核配置说明(10----Device Drivers设备驱动程序)
  13. 将图片转化成RGB格式
  14. 现代电力系统分析王锡凡pdf_一对一论文定制 | 电子工程:电力系统潮流及最优潮流算法研究...
  15. Python学习笔记(15)-Python常用模块总结
  16. 两台linux电脑互联,基于NFS通信的Ubuntu 两台Ubuntu进行互联
  17. vscode 折叠所有区域代码快捷键
  18. launcher矩形图标
  19. android 清理缓存动画,Android仿微信清理内存图表动画(解决surfaceView屏幕闪烁问题)demo实例详解...
  20. Xilinx_PetaLinux:Failed to generate...

热门文章

  1. FLUSH TABLES WITH READ LOCK有多快
  2. oracle中spool导出数据小结
  3. Mybatis 源码分析(一)配置文件加载流程
  4. 一条汇编指令是如何在计算机的硬件中进行执行的
  5. UWP 共享文件——接收者
  6. Leetcode 169 Majority Element
  7. 解题报告 B_station
  8. linux之抓包神器tcpdump
  9. Pandas入门教程(六)
  10. java 加法程序_使用JAVAEE编写简单的加法程序