throw后报错,找不到报错处。throw、throws 、try/catch 作用区别,自定义Exception异常,printStackTrace()方法的
原创
©著作权归作者所有:来自51CTO博客作者ZhangJiQunMXP的原创作品,请联系作者获取转载授权,否则将追究法律责任
目录
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 {
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{
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 {
if(focusView!=null){
focusView.requestFocus();
}
}
});
AlertDialog dialog =
printStackTrace()方法的作用
直接上两张图片:
使用:printStackTrace
不使用:printStackTrace
解释:根据名字就知道,使用的话,才能在log中打印出报错的位置和报错位置顺序路径