本篇文章给大家谈谈自定义异常可以实现接口吗,以及自定义异常可以实现接口吗为什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
今天给各位分享自定义异常可以实现接口吗的知识,其中也会对自定义异常可以实现接口吗为什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
Java:定义接口中的方法时声明了异常,实现这个接口的方法时也需要抛出同样的异常吗?
不需要抛出同样的异常
1. 实现该接口的方法可以不用抛出异常
2. 可以抛出不一样的异常. 但是必须是接口定义的异常的子类
JDK1.8举例说明
import java.io.FileNotFoundException;
import java.io.IOException;
interface A{
void print ()throws IOException;//定义的接口的方法,抛出IO异常
}
public class B implements A {
@Override
public void print() throws FileNotFoundException {//实现方法可以抛出IO异常的子类异常
}
}
class C implements A{
@Override
public void print() throws IOException {//可以抛出一样的异常
}
}
class D implements A{
@Override
public void print() {//可以不抛异常
}
}
后端自定义的异常 在dubbo 怎么抛到前端
public Result invoke(Invoker<? invoker, Invocation invocation) throws RpcException {
try {
Result result = invoker.invoke(invocation);
if (result.hasException() GenericService.class != invoker.getInterface()) {
try {
Throwable exception = result.getException();
// 如果是checked异常
自定义异常可以实现接口吗,直接抛出
if (! (exception instanceof RuntimeException) (exception instanceof Exception)) {
return result;
}
// 在方法签名上有声明
自定义异常可以实现接口吗,直接抛出
try {
Method method = invoker.getInterface().getMethod(invocation.getMethodName(), invocation.getParameterTypes());
Class<?[] exceptionClassses = method.getExceptionTypes();
for (Class<? exceptionClass : exceptionClassses) {
if (exception.getClass().equals(exceptionClass)) {
return result;
}
}
} catch (NoSuchMethodException e) {
return result;
}
// 未在方法签名上定义的异常,在服务器端打印ERROR日志
logger.error("Got unchecked and undeclared exception which called by " + RpcContext.getContext().getRemoteHost()
+ ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName()
+ ", exception: " + exception.getClass().getName() + ": " + exception.getMessage(), exception);
// 异常类和接口类在同一jar包里,直接抛出
String serviceFile = ReflectUtils.getCodeBase(invoker.getInterface());
String exceptionFile = ReflectUtils.getCodeBase(exception.getClass());
if (serviceFile == null || exceptionFile == null || serviceFile.equals(exceptionFile)){
return result;
}
// 是JDK自带的异常,直接抛出
String className = exception.getClass().getName();
if (className.startsWith("java.") || className.startsWith("javax.")) {
return result;
}
// 是Dubbo本身的异常,直接抛出
if (exception instanceof RpcException) {
return result;
}
// 否则,包装成RuntimeException抛给客户端
return new RpcResult(new RuntimeException(StringUtils.toString(exception)));
} catch (Throwable e) {
logger.warn("Fail to ExceptionFilter when called by " + RpcContext.getContext().getRemoteHost()
+ ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName()
+ ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e);
return result;
}
}
return result;
} catch (RuntimeException e) {
logger.error("Got unchecked and undeclared exception which called by " + RpcContext.getContext().getRemoteHost()
+ ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName()
+ ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e);
throw e;
}
}
所以在dubbo的service端想抛出自定义异常,只能通过在service端的接口方法上声明所要抛出的异常,或者将异常类与接口同包,再或者是接口的实现类再实现dubbo的GenericService接口。
对于第一种方案没有使用,因为它对代码的入侵比较严重。
第二种方案可以实现,可对于目前的业务框架,让接口类和异常类同包则变得不太可能。
所以最后选择了让接口实现类再实现GenericService接口,而对于其需要实现的$invoke方法则没有做任何的方法体处理,直接废弃。
对于dubbo的service端自定义异常类的处理,有些不理解的就是,为什么dubbo需要对自定义异常类做一次Runtime异常的转化,而不是直接抛出原异常类型。或者有没有对dubbo更了解的朋友,有对自定义异常更好的处理方法。
1.自定义异常类 MyException,该类继承自 Exception 类
public class TestMyException{
public static void main(String args[]) throws MyException{
public String toString() {
String s = getClass().getName();
String message = getLocalizedMessage();
return (message != null) ? (s + ": " + message) : s;
}
TestMyException.MyException();
} catch(MyException e1) ...{
System.out.println("Exception: " + e1.getMessage());
e1.printStackTrace();
扩展资料:
java.awt.datatransfer类 MimeTypeParseException
java.lang.Object
java.lang.Throwablejava.lang.Exception
java.awt.datatransfer.MimeTypeParseException
所有已实现的接口
Serializablepublic class MimeTypeParseException extends Exception
对分析相关异常的 MimeType 进行封装的类
参考资料来源:百度百科-MimeTypeParseException类
请问一下在java中自定义异常拦截器(不要使用其他框架,如spring),怎么拦截?
public class MyException extends Exception{
public MyExceprion(){
System.out.println("自定义异常");
}
}
try catch(MyException e){
}
当然 你也可以定义一个拦截器放在web.xml
那你就要继续实现 filter 接口了 继承Exception 实现 Filter 接口 那不就完了
implements Filter
public class CharFilter implements Filter {
private String encode;
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain fc) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest)req;
HttpServletResponse response=(HttpServletResponse)resp;
request.setCharacterEncoding(this.encode);
response.setCharacterEncoding(this.encode);
fc.doFilter(request,response);
}
public void init(FilterConfig arg0) throws ServletException {
this.encode=arg0.getInitParameter("encode");//��xml��init-param
}
}
web.xml中 配置拦截器
<filter
<filter-nameCharFilter</filter-name
<filter-classneusoft.team101.dms.common.filter.CharFilter</filter-class
<init-param
<param-nameencode</param-name
<param-valueUTF-8</param-value
</init-param
</filter
<filter-mapping
<filter-nameCharFilter</filter-name
<url-pattern/*</url-pattern
</filter-mapping
求达人给java代码【注释】!!请求尽量详细,万分感谢!!
这都是java的基础
自定义异常可以实现接口吗,你这些题目中有很多地方
自定义异常可以实现接口吗,命名不规范
自定义异常可以实现接口吗,实现方式过于笨拙。
(1) 定义一个接口Inf
自定义异常可以实现接口吗,含有常量π和一个实现计算功能的方法calculate( ),再分别定义一个面积类area和一个周长类circumference,各自按计算圆面积和圆周长具体实现接口中的方法,并以半径为5来测试这两个类。
//定义一个接口声明 常量PI,和一个 计算方法
interface Inf
{
double PI=3.1415926; //注意此处如果是常量,用 final修饰下,如double final PI=3.1415926;
double calculate(); //声明计算方法
}
//area 类实现 Inf 接口,实现其中的方法
class area implements Inf
{
double r; //定义半径
public area(double r1){r=r1;}//为 r 赋值通过此方法
/*
private double r;
public area(double r1){
this.r=r1;
}
*/
//实现 calculate方法。计算圆的面积
public double calculate()
{
return PI*r*r;
}
//输出圆的面积
public void output()
{
System.out.println("圆面积为:" + this.calculate());
}
}
//circumference 类实现 Inf接口,此类计算圆的周长
class circumference implements Inf
{
//定义周长
double r;
//为周长赋值
public circumference(double r1){r=r1;}
//周长实现方法
public double calculate()
{
return 2*PI*r;
}
//打印周长数值
public void output()
{
System.out.println("圆周长为:" + this.calculate());
}
}
//测试类,测试两个实现类,的两个计算方法
public class te1
{
public static void main(String args[])
{
area a = new area(5);
a.output();
circumference c = new circumference(5);
c.output();
}
}
(2) 定义一个类,在main方法的try块中产生并抛出一个异常,在catch块中捕获异常,并输出相应信息,同时加入finally子句,输出信息,证明它的无条件执行。
public class te2{
public static void main(String args[])
{
//此处抛出异常,此处MyException为自定义异常, 方法执行到 catch 段
try {throw new MyException();}
catch(Exception e)
{
System.out.println("It's caught");
}
/*最后执行 finally 块,注意此块也不是一定会执行,例如在 catch 块中调用系统退出的方法,则此处无法执行,但一般情况下,会执行 finally块,也就是很多教科书上说的“finally块一定会执行”*/
finally
{
System.out.println("It's finally caught");
}
}
}
//自定义异常类 MyException ,自定义异常可以继承 Exception类,或者实现 Throwable 接口
class MyException extends Exception{}
(3) 定义一个类Caculate实现10以内的整数加减法的计算。自定义一个异常类NumberRangeException,当试图进行超范围运算时,产生相应的信息。编写应用程序进行测试。
import java.io.*;
//自定义异常类 继承自 Exception
class NumberRangeException extends Exception
{
public NumberRangeException()
{
}
}
public class te3
{
public static void main(String args[])
{
int a = 0;
int b = 0;
int add=0;
int sub=0;
while(true)
{
//创建字节输入流,为什么不适用 Scanner 类呢
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
try
{
//将输入的数据,包装为 int类型
a = Integer.parseInt(input.readLine());
b = Integer.parseInt(input.readLine());
}
//如果无法转换,如输入的是 “op”,则会抛出异常,因为无法转换为 int型
catch (NumberFormatException e)
{
}
catch (IOException e)
{
}
try
{
//如题
if (a 10||b 10)
throw new NumberRangeException();
else
add=a+b;
sub=a-b;
break;
}
catch (NumberRangeException e)
{
System.out.println("您所输入的数字大于10!");
break;
}
}
System.out.println("两数相加得:"+add);
System.out.println("两数相减得:"+sub);
}
}
关于自定义异常可以实现接口吗和自定义异常可以实现接口吗为什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
自定义异常可以实现接口吗的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于自定义异常可以实现接口吗为什么、自定义异常可以实现接口吗的信息别忘了在本站进行查找喔。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~