throw后报错,找不到报错处。throw、throws 、try/catch 作用区别,自定义Exception异常,printStackTrace()方法的

495 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情

目录

throw后报错,找不到报错处

自定义Exception异常

printStackTrace()方法的作用


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中打印出报错的位置和报错位置顺序路径