Java/android:帮助理解这个构造,它是方法还是匿名类?

Java/android:帮助理解这个构造,它是方法还是匿名类?,java,android,Java,Android,我一直在与一个图书馆合作,我注意到以下构造 String run(String url) throws IOException { Request request = new Request.Builder() .url(url) .build(); Response response = client.newCall(request).execute(); return response.body().string(); } 我很难确定它是否是一个匿名类

我一直在与一个图书馆合作,我注意到以下构造

String run(String url) throws IOException {
  Request request = new Request.Builder()
      .url(url)
      .build();

  Response response = client.newCall(request).execute();
  return response.body().string();
}
我很难确定它是否是一个匿名类,因为我没有看到它使用接口或具体类

或者它只是一个正常的方法,可以抛出
IOException

我来自不同的编程背景,看起来有点奇怪

你是被迫使用投掷吗?

这是一种方法

方法的签名是
字符串运行(字符串url)抛出IOException
。这意味着方法名为
run
;方法以
字符串
作为参数;返回另一个
字符串
,并可能抛出一个
IOException

,这是一个方法


方法的签名是
字符串运行(字符串url)抛出IOException
。这意味着方法名为
run
;方法以
字符串
作为参数;返回另一个
字符串
,并可能抛出一个
IOException
如果您询问是否存在
抛出IOException
,则必须使用
抛出
关键字声明它,因为它是一个

所以基本上

String       run    (String url) throws IOException { ... }
^            ^       ^           ^ 
method       method  param type  marks checked        ^
return type  name    and name    exceptions the       method body
                                 method may throw
基本上,Java中的checked exception是
Throwable
的任何子类,它不继承
RuntimeException
Error
。每当代码抛出选中的异常时,Java编译器就会强制您捕获它或使用
throws
关键字声明它

选中的异常允许您在编译时验证是否正在处理异常或声明要抛出异常:当您调用类似
run()
的方法时,编译器将警告您必须对其执行某些操作(catch或declare)。有关Java强制执行此操作的一些解释,请参见例如


上面链接的文章解释了选中异常(例如
NullPointerException
)和未选中异常(例如
IOException
)之间的语义差异

未经检查的运行时异常通常表示反映程序逻辑错误的情况,并且在运行时无法合理地从中恢复

选中的异常表示程序无法直接控制的区域内的无效条件(无效用户输入、数据库问题、网络中断、缺少文件)


如果您询问是否存在
throws IOException
,则必须使用
throws
关键字声明它,因为它是一个异常

所以基本上

String       run    (String url) throws IOException { ... }
^            ^       ^           ^ 
method       method  param type  marks checked        ^
return type  name    and name    exceptions the       method body
                                 method may throw
基本上,Java中的checked exception是
Throwable
的任何子类,它不继承
RuntimeException
Error
。每当代码抛出选中的异常时,Java编译器就会强制您捕获它或使用
throws
关键字声明它

选中的异常允许您在编译时验证是否正在处理异常或声明要抛出异常:当您调用类似
run()
的方法时,编译器将警告您必须对其执行某些操作(catch或declare)。有关Java强制执行此操作的一些解释,请参见例如


上面链接的文章解释了选中异常(例如
NullPointerException
)和未选中异常(例如
IOException
)之间的语义差异

未经检查的运行时异常通常表示反映程序逻辑错误的情况,并且在运行时无法合理地从中恢复

选中的异常表示程序无法直接控制的区域内的无效条件(无效用户输入、数据库问题、网络中断、缺少文件)


啊,好的,谢谢,所以我想如果我在外部调用这个方法,我必须将它包装在try-catch中,否则java会抱怨吗?正确的?方法定义它们抛出的东西是正常的?如果在自己的方法中使用此方法,则必须在try-catch块中使用它。。。或者声明您的方法可以使用关键字
throws
引发异常。Exception用于报告需要中断当前Exceptionah Ok,谢谢,所以我假设如果在外部调用此方法,我必须将其包装在try--catch中,否则java会抱怨吗?正确的?方法定义它们抛出的东西是正常的?如果在自己的方法中使用此方法,则必须在try-catch块中使用它。。。或者声明您的方法可以使用关键字
throws
引发异常。Exception用于报告需要中断当前Exceptionah的错误,因此使用throws。。传递任何错误,并将其备份到链。。。。直到有人尝试…接住…啊…所以使用投掷。。传递任何错误,并将其备份到链。。。。直到有人尝试…抓住。。。。