java这个try函数是什么意思不懂解释一下?
当TRY所包含的内容发生异常行为(运行过程中发生了不可预知的错误)则异常消息将被catch抓取程序不会直接崩溃看代码第二个try抓取的是IOException 也就是如果在执行fos.write(c, 0, hasRead);这条语句发生异常行为时,catch会捕捉异常消息最外层的try没有对应的catch应该是不正确的
java异常从业务层集中抛出,是不是每个控制层方法都要trycatch?
控制层中发生的异常有两种情况:
一种是意料之内的,可预估的。这种异常需要捕获异常后做出“尝试修复”,例如在查询用户信息rpc的过程中发生异常,包括什么500啊,404啊,这些对于客户端来说基本不用重试,可以通过清晰的错误码告知,相反,超时等情况则可以通知客户端稍后重试,通过不同的错误码引导客户端进行不同的操作。
另一种情况则是控制层本身就没考虑到的情况。这种情况盲目的try/catch没多大意义,通常会在框架层面做统一处理,包括记录异常信息,以及优雅的返回失败。
最后,对于try/catch的使用,我们不是并不是为了看不见异常,更多的是考虑我捕获后能做什么,能否尝试解决这个问题,如果不行,抛给上层,能否记录并告警,如果没考虑清楚这个问题,很容易犯一个大忌(吞掉异常)。
首先,,业务层,如果可控的要抛出。当然一定不要处理成错误的返回。也不是说一定要处理,看具体的处理场景,因为涉及到事物的问题,业务层还有一个重要的处理场景。那就是事务处理。如果你直接返回你的错误返回,那就是事务无效,正确的做法是。定义一个异常,再可控的异常try catch 抛出自定义异常,定义全局的异常处理器,利用异常处理器对自定义的错误返回系统标准返回?对于不可控的,可以在加上异常处理器。打注解实现http状态吗的返回
需要做统一异常处理,不能将异常返回给客户端,好的做法是最终到达客户端的是一个统一格式的result,要么succese,要么是fail,除了系统异常比如网络超时,500服务异常等。还必须有统一的状态码处理。
Java中的try catch影响性能吗?该怎么处理?
你想多了,写代码,特别是生产级别的代码,可靠性是第一位的。就算做性能优化,也要在保证可靠性的前提下。头一次听说从 try catch 入手考虑性能优化的,你试试生产代码不用一点 try 试试
首先,要脑子里清楚什么会影响性能。不扯整个系统,单从java程序本身看:io(多次落地),多线程同步互斥,cpu多核利用率(stream),缓存(threadpool),算法复杂度,类型转换(int 《—》Integer)。这些是主要影响性能的考虑点。明白这些,你的问题就不是个问题。
Java 中的 try catch 并不会影响性能。
异常机制
1、每个类会跟随一张异常表(exception table),每一个try catch都会在这个表里添加一行记录,每一个记录都有4个信息(try catch的开始地址,结束地址,异常的处理起始位,异常类名称)。
2、当代码在运行时抛出了异常时,首先拿着抛出位置到异常表中查找是否可以被catch(例如看位置是不是处于任何一栏中的开始和结束位置之间),如果可以则跑到异常处理的起始位置开始处理,如果没有找到则原地return,并且copy异常的引用给父调用方,接着看父调用的异常表……以此类推。
结论
1、异常如果没发生,也就不会去查表,也就是说你写不写try catch 也就是有没有这个异常表的问题,如果没有发生异常,写try catch对性能是没有任何消耗的,所以不会让程序跑得更慢。
2、try 的范围大小其实就是异常表中两个值(开始地址和结束地址)的差异而已,也是不会影响性能的。

