相关疑难解决方法(0)

为什么不必显式声明可能会在Java中抛出一些内置的异常?

我注意到Integer.parseInt()你不必用try catch包围它,或者声明该方法可能抛出一个异常,尽管它"抛出"了一个NumberFormatException.

为什么我不必明确地捕获NumberFormatException或声明我的方法抛出它?

java exception

7
推荐指数
3
解决办法
2791
查看次数

异常或RuntimeException?

可能重复:
在Java中,何时应该创建已检查的异常,何时应该是运行时异常?

我在RuntimeException上听到了很多关于异常的事情,但没有给出明确的参数.我也看到很多关于Stack Overflow的主题,但似乎没有人直接提出这个问题(如果是这种情况,感谢关闭它作为重复并显示链接!)

我想明确知道何时使用RuntimeException以及何时使用经典Exception.

对于业务逻辑(即异常可能是用户错误(错误数据)),您是使用异常还是运行时?

当您创建自己的异常(在业务逻辑中)时,您是否有2或3个建议您选择抛出异常或运行时异常?

java exception

6
推荐指数
0
解决办法
149
查看次数

IOException与RuntimeException Java

class Y {
    public static void main(String[] args) throws RuntimeException{//Line 1
        try {
            doSomething();
        }
        catch (RuntimeException e) {
            System.out.println(e);
        }
    }
    static void doSomething() throws RuntimeException{ //Line 2
        if (Math.random() > 0.5) throw new RuntimeException(); //Line 3
        throw new IOException();//Line 4
    }
}
Run Code Online (Sandbox Code Playgroud)

当我抛出两种类型的异常(Line4中的IOException和Line3中的RunTimeException)时,我发现我的程序在我在第1行和第2行的throws子句中指示"IOException"之前不会编译.

而如果我反向"抛出"以指示抛出IOException,则程序会成功编译,如下所示.

class Y {
    public static void main(String[] args) throws IOException {//Line1
        try {
            doSomething();
        }
        catch (RuntimeException e) {
            System.out.println(e);
        }
    }
    static void doSomething() throws IOException {//Line 2
        if (Math.random() > 0.5) throw …
Run Code Online (Sandbox Code Playgroud)

java exception-handling exception

6
推荐指数
1
解决办法
2万
查看次数

使用内部检查异常抛出运行时异常是不好的做法吗?

这是不好的做法吗?

public String foo(File file) {
    StringBuilder sb = new StringBuilder();
    try(
            BufferedInputStream bis =
                    new BufferedInputStream(
                            new FileInputStream(file))
    ) {
        for(int c = bis.read(); c != -1; c = bis.read())
            sb.append((char) c);
    } catch (IOException e) {
        throw new UncheckedIOException(e);
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

假设没有办法从已检查的异常中优雅地恢复.

java exception

6
推荐指数
1
解决办法
2143
查看次数

api文档和"价值限制":它们匹配吗?

您是否经常在API文档(例如"公共函数的javadoc"中)中看到"值限制"的描述以及经典文档?

注意:我不是在谈论代码中的注释

"价值限制",我的意思是:

  • 参数是否可以支持空值(或空字符串,或......)?
  • '返回值'可以为null或保证永远不为空(或者可以为"空",或者......)?

样品:

我经常看到的(无法访问源代码)是:

/**
 * Get all readers name for this current Report. <br />
 * <b>Warning</b>The Report must have been published first.
 * @param aReaderNameRegexp filter in order to return only reader matching the regexp
 * @return array of reader names
 */
 String[] getReaderNames(final String aReaderNameRegexp);
Run Code Online (Sandbox Code Playgroud)

希望看到的是:

/**
 * Get all readers name for this current Report. <br />
 * <b>Warning</b>The Report must have been published first.
 * @param aReaderNameRegexp filter …
Run Code Online (Sandbox Code Playgroud)

language-agnostic documentation comments design-by-contract

5
推荐指数
1
解决办法
1060
查看次数

setter方法有必要有一个参数吗?

setter方法有必要有一个参数吗?通常,setter方法接受一个参数作为Object的某个属性的值.如果我想首先测试依赖于另一个布尔值的参数的有效性,如果是,则首先验证,否则只需设置值.

我通过ftp服务器从客户端获取值.有时这些文件包含垃圾值.例如,#3432838#9等电话号码.所以在我设置值之前,我需要删除那些垃圾字符.我可以在setter方法中做到吗?这是一种有效的方法吗?

提前谢谢!

编辑:

这是有效的:

public void setSomething(String strValue){ 
     if(checkValidity(strValue)){ 
         // set the value 
     } else { 
         // set the value to an empty string
     }  
  }
Run Code Online (Sandbox Code Playgroud)

java setter

5
推荐指数
2
解决办法
5075
查看次数

为什么Java同时具有已检查和未检查的异常?

可能重复:
何时选择已检查和未检查的异常

为什么的Java作为一门语言有两种 checked和unchecked 异常.他们的目的是什么?

注意:我不是在问我何时应该使用它们,或者如何编写它们,而是它们添加到语言中的内容.

java theory programming-languages

5
推荐指数
3
解决办法
2646
查看次数

如何从未经检查的异常中恢复?

如果您想以相同的方式处理每个故障,例如通过记录它并跳到下一个请求,向用户显示消息并处理下一个事件等,如果这是我的用例,那么所有我都可以使用未经检查的异常.要做的是在我的系统中捕获一些高级别的常规异常类型,并以相同的方式处理所有内容.

但我希望从特定问题中恢复,而且我不确定使用未经检查的异常来处理它的最佳方法.这是一个具体的例子.

假设我有一个使用Struts2和Hibernate构建的Web应用程序.如果异常冒泡到我的"动作",我会记录它,并向用户显示一个非常道歉.但我的Web应用程序的一个功能是创建新的用户帐户,这需要一个唯一的用户名.如果用户选择已存在的名称,Hibernate会org.hibernate.exception.ConstraintViolationException在我的系统内容中抛出(未经检查的异常).我真的想通过要求用户选择另一个用户名来恢复这个特定问题,而不是给他们相同的"我们记录了你的问题,但现在你已经被软化了"的消息.

以下是需要考虑的几点:

  1. 有很多人同时创建帐户.我不想在"SELECT"之间锁定整个用户表以查看名称是否存在,如果不存在则锁定"INSERT".在关系数据库的情况下,可能有一些技巧可以解决这个问题,但我真正感兴趣的是一般情况下,由于基本的竞争条件,预先检查异常将不起作用.同样的事情可能适用于在文件系统上查找文件等.
  2. 考虑到我的首席技术官倾向于通过读取"Inc."中的技术专栏引起的偷渡管理,我需要在持久性机制周围留下一层间接,以便我可以抛弃Hibernate并使用Kodo,或者其他什么,而不会改变除了最低限度之外的任何东西.持久性代码层.事实上,我的系统中有几个这样的抽象层.尽管有未经检查的异常,我怎样才能防止它们泄漏?
  3. 已检查异常的一个声明的弱点是必须在堆栈的每个调用中"处理"它们 - 或者通过声明调用方法抛出它们,或者通过捕获它们并处理它们.处理它们通常意味着将它们包装在另一个适合抽象级别的类型的检查异常中.因此,例如,在checked-exception中,我的UserRegistry的基于文件系统的实现可能会捕获IOException,而数据库实现会捕获SQLException,但两者都会抛出UserNotFoundException隐藏底层实现的内容.我如何利用未经检查的异常,免除每层的包装负担,而不泄漏实现细节?

c# java api exception

4
推荐指数
1
解决办法
2661
查看次数

从接口实现方法抛出自定义异常

我试图将一个自定义throws子句添加到由接口定义的方法.这是不可能的.我怎么能绕过它呢?这是一些代码:

private void sendRequestToService(final ModuleRequest pushRequest) 
{

    ServiceConnection serviceConnection = new ServiceConnection()
    {

        public void onServiceConnected(ComponentName name, IBinder service) 
        {

            try
            {

                //some lines..

            } catch (RemoteException e)
            {
                throw new RuntimeException(new UnavailableDestException()) ;
            }
        }


    };

}
Run Code Online (Sandbox Code Playgroud)

知道如何抛出我的自定义异常吗?

java

4
推荐指数
2
解决办法
7637
查看次数

声明异常而不是处理它有什么意义

据我所知,如果您只声明一个已检查的异常,它将通过您的所有方法传播到main方法,并仍然中断您的正常程序流程,您的程序仍将停止工作.那么,为什么不总是使用try/catch处理已检查的异常...这样你的程序不会因异常而停止?为什么要在方法的签名中声明异常?对不起,我的英语不好

java exception try-catch throw try-catch-finally

3
推荐指数
1
解决办法
1379
查看次数