Java – 异常在哪里和如何使用?

我正在阅读有关 Java中的异常处理的一些事情,以便能够编写更好的代码.好的,我承认我有罪我使用了太多的try-catch {}块,我在catch中使用了ex.printStackTrace(),甚至没有使用正确的记录器(实际上System.out和System.err被重定向到PrintWriter,所以日志被生成).然而,经过几个小时的阅读,我发现自己在一个陌生的地方:未知数.如果异常被设计为传递关于异常状态流的信息,那么如何知道WHERE是该信息的正确级别?

例如,当发生数据库错误时,应该返回一个空值还是一个错误代码,还是抛出异常?如果抛出,WHERE应该处理这个异常吗?我明白,如果您不能做任何事情,即使记录异常也是没有用的.然而,在GUI应用程序中,这可能会很容易地杀死你的GUI(我使用SWT,我经常看到这个),即使是在菜单方法()的情况下(ArrayIndexOutOfBounds异常会关闭该应用程序,如果不处理) .这个例子可以永远延续下去,但下面是问题的总结:

>使用try-catch()是否会对性能产生负面影响?
>最好使用特定的异常类型吗?如果我错过了一个,怎么办?
可能发生的可能X类型的异常?
坦白说,在2 – 3年内,我听说过只使用了10%的Java标准异常.是的,有人说如果调用者不知道如何处理抛出的异常,他应该没有权利称为抛出方法.是对的吗?
>我已经阅读了这篇文章Anders
Hejlsberg
,说检查异常是坏的.这是否表示在某些情况下建议方便的异常吞咽?
>图片价值1000字;我想有一些例子会有很多帮助
这里.

我知道这个课题是永恒的,但实际上我期待着用150个课程来审视一个中等规模的课程,并用你的意见.非常感谢.

解决方法

例外是一个任务的程序员不必自己处理这个问题. (1):如果问题没有逻辑给他处理任务.
从流读取字符串的任务不应该处理磁盘错误是不是的.但是,如果数据不包含String,则应该是非常合乎逻辑的.

(2):他不能自己处理(没有足够的信息)
从未找到的文件文件中读取字符串的任务可能会要求用户选择另一个文件,但是现在该任务现在文件可能是文件扩展名可能是什么文件夹.不知道,任务如何创建一个GUI来重新询问.

(3):没有逻辑(或可管理的)方式来区分不同的回报.
如果任务无法读取文件并返回null.如果文件格式错误,返回null呢?这两者有什么不同?异常可以用来区分.为什么它被称为异常:-D.

(4):有许多类似的任务需要类似的处理和写作,在所有任务中难以维护.
编写所有访问的句柄代码可能是一个混乱,因为您可能需要许多重复.

interface DBAccess {
    public Result accessDB();
}

class DBOperation {
    static public void DoOperation(DBAccess pAccess) {
        try { return DBAccess.accessDB(); }
        catch(InvalidDBPasswordException IPE) {
             // Do anything about invalid password
        }
        catch(DBConnectionLostException DBCLE) {
             // Do anything about database connection lost
        }
        // Catch all possible DB problem
    }
}

...

private User[] ShowUserList_and_ReturnUsers() {
    // Find the used.

    // Show user list

    if (Users.count() == 0)
         return null;
    else return Users;

    // No need to handle DB connection problem here
}
private User[] GetUserProfile() {
    // Find the used and return
    // No need to handle DB connection problem here
}
...

/** An onClick event to show user list */ {
    DBOperation.DoOperation(new DBAccess() {
        public Result accessDB() {
            return ShowUserList_and_ReturnUsers();
        }
    });
}
/** An onClick event to show a user profile */ {
    DBOperation.DoOperation(new DBAccess() {
        public Result accessDB() {
            return GetUserProfile();
        }
    });
}
... Many more DB access

(5):写出所有检查错误是否复杂或减缓任务.
上述问题应该显示如何帮助减少并发症.这是如何帮助不要减速.

for(int i = 0; i < Users.length; i++) {
    User aUser = Users[i];
    // Do something with user
}

Replaced with

try {
  for(int i = 0; ; i++) {
      User aUser = Users[i];
      // Do something with user
  }
}
catch(ArrayOutOfBoundException AOBE) {}

如果用户数量较大,替换代码将会更好.

当发生数据库错误时,应该返回一个空值,并发出错误代码或抛出异常?
答:取决于什么样的错误.喜欢,如果你找不到一个用户,那不是一个错误.但是,如果密码错误或连接不正确,这些错误是因为尝试以正常方式处理它会使程序复杂化.

(1).使用过多的try-catch()对性能有负面影响?
答:根据“有效的Java”,只要我记得(我现在没有这本书),它有非常小的影响(循环不好).

(2).
使用特定的异常类型更好?
答:用户特定的一个最好是避免解决错误的问题.

如果我错过了可能发生的可能的X类型的异常,该怎么办?坦白说,在2-3年内,我听说过和使用了10%的Java标准异常.
答:就像处理错误一样,你也可以错过.当你发现它时,你只需要添加它.

是的,有人说如果来电者不知道如何处理被剔除的例外,他应该没有权利称之为投掷方法.是对的吗?
答:不,如果我不知道该怎么处理一些异常,重新抛出.

(3).我已经阅读了Anders Hejlsberg的这篇文章,说检查的例外是坏的.这是否表示在某些情况下建议方便的异常吞咽?
答:我认为他正在谈论“检查异常”作为编译器的一个功能,以确保一些异常应该被处理.有异常的想法.

(4).一张图片价值1000字.我猜这里有一些例子会有很多帮助.
答:上面的代码.

我现在得到了运行….对不起… :-p(在一分钟内,亲爱的!)

相关文章

ArrayList简介:ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增...
一、进程与线程 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。 线程...
本文为博客园作者所写:&#160;一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 简单的一个类...
#############java面向对象详解#############1、面向对象基本概念2、类与对象3、类和对象的定义格式4、...
一、什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错。在java中,阻止当前方法或作用域...
Collection接口 Collection接口 Collection接口 Collection是最基本的集合接口,一个Collection代表一组...