范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Java中为什么要设计throws关键词,是故意的还是不小心

  我们平时在写代码的时候经常会遇到这样的一种情况
  提示说没有处理xxx异常
  然后解决办法可以在外面加上 try-catch  ,就像这样
  所以我之前经常这样处理 //重新抛出 RuntimeException public class ThrowsDemo {      public void demo4throws() {         try {             new ThrowsSample().sample4throws();         } catch (IOException e) {             throw new RuntimeException(e);         }     } }  //打印日志 @Slf4j public class ThrowsDemo {      public void demo4throws() {         try {             new ThrowsSample().sample4throws();         } catch (IOException e) {             log.error("sample4throws", e);         }     } }  //继续往外抛,但是需要每个方法都添加 throws public class ThrowsDemo {      public void demo4throws() throws IOException {         new ThrowsSample().sample4throws();     } }
  但是我一直不明白
  这个方法为什么不直接帮我做
  反而要让我很多余的加上一步
  我处理和它处理有什么区别吗?
  而且变的好不美观
  本来缩进就多,现在加个  try-catch  更是火上浇油public class ThrowsDemo {      public void demo4throws() {         try {             if (xxx) {                 try {                     if (yyy) {                      } else {                      }                 } catch (Throwable e) {                 }             } else {              }         } catch (IOException e) {          }     } }
  上面的代码,就算里面没有业务,看起来也已经比较乱了,分不清哪个括号和哪个括号是一对
  还有就是对 Lambda  很不友好
  没有办法直接用 ::  来优化代码,所以就变成了下面这样
  本来看起来很简单很舒服的 Lambda  ,现在又变得又臭又长为什么会强制 try-catch
  为什么我们平时写的方法不需要强制  try-catch  ,而很多jdk  中的方法却要呢
  那是因为那些方法在方法的定义上添加了  throws  关键字,并且后面跟的异常不是RuntimeException
  一旦你显式的添加了这个关键字在方法上,同时后面跟的异常不是  RuntimeException  ,那么使用这个方法的时候就必须要显示的处理
  比如使用  try-catch  或者是给调用这个方法的方法也添加throws  以及对应的异常throws 是用来干什么的
  那么为什么要给方法添加  throws  关键字呢?
  给方法添加  throws  关键字是为了表明这个方法可能会抛出哪些异常
  就像一个风险告知
  这样你在看到这个方法的定义的时候就一目了然了:  这个方法可能会出现什么异常  为什么 RuntimeException 不强制 try-catch
  那为什么  RuntimeException  不强制try-catch  呢?
  因为很多的  RuntimeException  都是因为程序的BUG  而产生的
  比如我们调用  Integer.parseInt("A")  会抛出NumberFormatException
  当我们的代码中出现了这个异常,那么我们就需要修复这个异常
  当我们修复了这个异常之后,就不会再抛出这个异常了,所以  try-catch  就没有必要了
  当然像下面这种代码除外  public boolean isInteger(String s) {     try {         Integer.parseInt(s);         return true;     } catch (NumberFormatException e) {         return false;     } }
  这是我们利用这个异常来达成我们的需求,是有意为之的
  而另外一些异常是属于没办法用代码解决的异常,比如  IOException
  我们在进行网络请求的时候就有可能抛出这类异常
  因为网络可能会出现不稳定的情况,而我们对这个情况是无法干预的
  所以我们需要提前考虑各种突发情况
  强制  try-catch  相当于间接的保证了程序的健壮性
  毕  竟我们平时写代码,如果 IDE  没有提示异常处理,我们完全不会认为这个方法会抛出异常
  我的代码怎么可能有问题!
  看来 Java之父  完全预判到了程序员的脑回路throws 和 throw 的区别
  java  中还有一个关键词throw  ,和throws  只有一个s  的差别
  throw  是用来主动抛出一个异常public class ThrowsDemo {      public void demo4throws() throws RuntimeException {         throw new RuntimeException();     } }
  两者完全是不同的功能,大家不要弄错了  什么场景用 throws
  我们可以发现我们平时写代码的时候其实很少使用  throws
  因为当我们在开发业务的时候,所有的分支都已经确定了
  比如网络请求出现异常的时候,我们常用的方式可能是打印日志,或是进行重试,把异常往外抛等等
  所以我们没有那么有必要去使用  throws  这个关键字来说明异常信息
  但是当我们没有办法确定异常要怎么处理的时候呢?
  比如我在  GitHub  上维护了一个功能库,本身没有什么业务属性,主要就是对于一些复杂的功能做了相应的封装,提供给自己或别人使用
  对我来说,当我的方法中出现异常时,我是不清楚调用这个方法的人是想要怎么处理的
  可能有的想要重试,有的想要打印日志,那么我干脆就往外抛,让调用方法的人自己去考虑,自己去处理
  所以简单来说,如果方法主要是给别人用的最好用  throws  把异常往外抛,反之就是可加可不加结束
  很多时候你的不理解只是因为你还不够了解

9千万欧!曝切尔西接近签下德甲20岁天才中卫,下赛季正式加盟北京时间8月31日凌晨,来自意大利天空体育著名记者FabrizioRomano的独家报道,切尔西正在就克罗地亚国脚中卫格瓦迪奥尔的交易,和莱比锡红牛队进行深入谈判。罗马诺表示,交易华为将正式发布这门专家级别技术认证,通过后可胜任数据库岗位尊敬的客户非常荣幸地通知您,华为认证HCIEGaussDBOLTPV1。0(中文版)预计将于2022年09月30日正式对外发布。为了帮助您做好学习培训和考试计划,现进行预发布通知,华设集团经营范围新增人工智能公共数据平台乐居财经兰兰8月30日,华设设计集团股份有限公司(以下简称华设集团)经营范围新增物联网技术研发物联网技术服务工业互联网数据服务人工智能公共数据平台等。据企查查,华设集团成立于200苹果iOS16正式版发布IT之家9月13日消息,苹果今日发布了iOS16正式版更新,具体版本号为(20A362),这是专为iPhone设计的最新操作系统。与Apple的所有软件更新一样,iOS16可以免费Steam夏季特卖10款汉堡价游戏推荐,光MOD就够玩家玩两年在Steam这个全球火热的游戏平台上,玩家们不仅能玩到一些优秀的游戏,还能通过创意工坊里面的MOD来寻求更多的乐趣。下面我就来为大家推荐10款Steam夏季特卖游戏,这些游戏不仅本7月外服端游推荐!又一款3A年货游戏发售,还有热血系列新游暑期假期即将开始,爽完游戏的时间又要来临了,各位学生党们都准备好自己的零用钱了吗?当然工作党也要准备好自己的钱包,毕竟天气热的都能煎鸡蛋了,还是在家打游戏比较舒服。让我们看看7月份知名游戏厂商EA发帖嘲讽玩单机类游戏的长得都丑曾发布过战地极品飞车等大作的知名游戏厂商EA,近日语出惊人,竟称不玩网络联机游戏的玩家都是颜值不及格。EA发行的游戏连续多年被全球玩家投票最差游戏厂商的EA,居然又开始出来博眼球了PS5售价正式上调光驱版上涨至4299元近日,索尼宣布因国际经济环境通货膨胀以及汇率因素的影响,将调整部分市场PS5售价。其中,中国市场的PS5售价上涨400元,调整后为光驱版上涨至4299元数字版上涨至3499元。今天第一款非华为品牌鸿蒙系统手机正式发布,这家昔日王者要翻身?多学学,多看看!点击关注,每天不断更新精彩内容!导读第一款非华为品牌鸿蒙系统手机正式发布,这家昔日王者要翻身?真没想到,华为以外第一个真正使用宏盟系统的品牌正式发布,这就是金立G1生产日记我生孩子的血泪教训ampampamp经验今天来讲讲我用血泪换来的,生孩子的经验教训和心得1,不要吃刺激性食物如果没到你想生孩子的那一天,不要吃刺激性的食物,例如火锅烧烤菠萝吃了刺激性调味料容易催生,而且如果宫缩来了,你都有的人流产一次后,就再也没有了做妈妈的权利女性千万不要相信那些今天做流产,明天就上班的广告了,无论是无痛人流还是药物流产,都会对身体造成很大的伤害,也都有短期并发症和长期并发症。流产可能引起的并发症人工流产的近期并发症有术
买基金,是长期持有好,还是短线操作好?我看见很多社区里有不少基民在炒基金的短线。很多基民频繁打波段,上下找差价,猛炒基金不亦乐乎。我看了后不仅愕然基金还能这样炒?说实在的,我做投资20多年,根本不敢想象基金还能这么炒短对于40岁以后的你,跳槽已经很难,但你又不认命,那你该怎么办?我会这样办。第一,立足本职工作,全力以赴,认真负责,敢以担当,以创新的工作态度,去做好本职的工作。在平凡的岗位上,以工匝的精神,做出不平凡的业绩。第二,我会提升我的技术能力。第三,怀一胎顺利,二胎就一定顺利吗?你们遇到过吗?不一定啊。我就是个活教材。我怀我家老大的时候,啥都没有耽误干,骑着自行车去郊游,打篮球羽毛球,一次性抱三个大被子去晒。至于上课上到预产期那还不是正常吗?我老公看见我骑着车虎虎的飞跑LOL之前的亚索需要三个q才有风,你怎么看?感谢悟空小助手的邀请!一套三击飞!!!亚索的大招其实挺好触发的,LOL能击飞或者击退的英雄很多,比如石头人,发条,巨魔,锐雯,诺手等等。即使队伍里没有这些英雄,亚索自己其实也挺容易谷爱凌的实力在北京奥运会可以夺冠军吗?只能说,以谷爱凌的实力,是肯定可以在北京冬奥会上夺冠的。甚至可以说,谷爱凌是当前中国奥运代表队最具夺冠实力的夺金点!如果运气够好,发挥稳定,应该都不止一块金牌。当然实力是足够了,可你觉得手机运行内存的4GB和6GB有什么区别?你觉得有必要多花几百元吗?对于目前市场上的安卓手机来讲,内存的大小决定了手机是否的流畅的一个关键。从主流4G内存,到现在的主流6G内存来说,实际上也就是过了1年多,不到2年的时间,目前的手机配置,基本是以4痤疮印能消除吗?痤疮印能消除吗?痤疮印可以消除,但痤疮印有不同的情况,处理方法不尽相同。痤疮是发生在毛囊皮脂腺的慢性炎症,即由于皮脂腺分泌旺盛排出不畅,导致毛囊内的角质栓子形成,并发生细菌感染。痤出去旅游要走好多路,穿什么鞋最舒服?首先是要保证透气,比较干爽的较好。然后就是脚底的感觉很软,毕竟旅游中脚很容易疲劳,所以鞋底软的鞋是必然的选择。在一个就是脚底橡胶的弹性要好一些,毕竟旅游过程中脚底的动作会比较多,橡阿里案女员工被公司开除,是什么原因呢?她会不会起诉阿里公司呢?因为她损坏公司名誉啊,她说公司逼迫她出差,经最后警察调查证明没有的事,一早安排好的出差,她是项目对接人,谁干这个工作都得出差。她还说同事逼她喝酒,经警方调查也没有,她自己安排的饭局我是慢性胃病患者,可以用养胃粉来调理吗?这位朋友,如果我给你说一些慢性胃病不吃药就能好,你信不信?介于你给出的问题并不是很详细,那么我就把常见的几种慢性胃病都叨咕叨咕,你对号入座一下。但是不管哪种胃病,我都不建议通过什么想问一下各位,是什么原因让你们下定决心要二胎?我大宝马上18岁,现在怀二宝26周,二宝的到来纯属意外。生大宝后上了节育环,二年前取环后一直未避孕(主要是考虑年龄原因怀孕几率低),发现怀孕后很纠结,最决定留下,除了孩子爸的坚持外