throw后报错,找不到报错处
关键字:throw 是一种控制程序流程的特殊方法而已。没有相应的catch的话,可以中止当前的方法继续执行。
关键字:throws 声明方法时候,如果不声明throws的话,那么一般的Exception都要在这个方法中终结,也就是说一定要有相应的catch处理,否则编译时会产生错误。如果方法声明了throws的话,可以交给上一级方法去处理。以此类推。但是有些Exception可以不加捕捉,编译也会通过。继承Exception类,可以自己定义Exception,对于特定的状态,
所以你使用了throws之后是没有catch的,实在上层的调用中有catch。 这样有时候不直观,报错还得去上层打bug断点。
一般还是try、catch ,能直接捕捉到。便于使用。
关键字:try、catch 用个形象的比喻,如果说throws相当于职业介绍中介的话,那try和catch就是一对倒霉的打工仔。很有意思,throws只是告诉编译器--方法可能产生的异常问题,然后把问题处理抛给try和catch。
他们一个负责发现异常关系,一个负责异常捕获。
自定义Exception异常
package com.example.ceshi; /** * @ProjectName: ceshi * @Package: com.example.ceshi * @ClassName: ServiceException * @Description: java类作用描述 * @Author: 作者名 * @CreateDate: 2020/7/23 0023 下午 2:33 * @UpdateUser: 更新者: * @UpdateDate: 2020/7/23 0023 下午 2:33 */ public class ServiceException extends Exception { /** * */ private static final long serialVersionUID = 5717888100550404100L; public ServiceException(String str){ super(str); } public ServiceException() { super(); } public ServiceException(String str, Throwable t) { super(str, t); } public ServiceException(Throwable t) { super(t); } }
捕获Text();设置错误信息,注解有解释
try { Test(); //捕获异常 } catch ( ServiceException e ) { e.printStackTrace(); // 获取错误信息,以dialog形式进行弹窗; waitCloseAlert("执行线程异常,原因:"+e.getMessage()); } } public static void Test()throws ServiceException { throw new ServiceException("怎么说"); //设定错误信息 } /** * 关闭等待警告提示 * */ public void waitCloseAlert(final String message) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { if (processDialog != null && processDialog.isShowing()) { processDialog.dismiss(); } showAlertDialog(message,null,R.drawable.ic_launcher_background,null); } }); } public void showAlertDialog(String title,String message,Integer icon,final View focusView){ AlertDialog.Builder builder=new AlertDialog.Builder(this); if(title!=null){ builder.setTitle(title); } if(message!=null){ builder.setMessage(message); } if(icon!=null){ builder.setIcon(icon); } builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if(focusView!=null){ focusView.requestFocus(); } } }); AlertDialog dialog = builder.create(); dialog.show(); }
printStackTrace()方法的作用
直接上两张图片:
使用:printStackTrace
不使用:printStackTrace
解释:根据名字就知道,使用的话,才能在log中打印出报错的位置和报错位置顺序路径