异常——JAVA异常(A)

在我刚从事开发工作的时候,常常被各种程序上的异常所困扰。当然现在看起来这些异常是无比简单,但是在当年各种稀奇古怪的Exception真是让人头大。

后来经历的问题多了,有时候看到一些异常就能知道问题出在哪里了。当然随着各种异常交叉在一起,自己难免也会记混一些东西。所以从今天开始我尝试整理自己开发中使用的语言、框架和其他组件中的异常。即使对自己经验的整理,也是一次重新学习的过程。当然对于很多异常(JAVA早期版本的异常或者一些很少用的包内的异常)我只能根据网上其他开发者的反馈或者自己根据源码中的注释来猜测可能的原因及办法。

ps.排查故障绝对是开发中最消耗精力的工作了。更让人绝望的是,很多时候明明我使用了和别人一样的操作,教程是好的,但是自己却各种报错。或者是我和别人出现了一样的错误,但是使用别人的解决方案却没有生效。很多时候因为自己系统环境或者操作步骤导致在各种解决方案中找不到一个可以使用的。整理这一系列文章的时候我也尝试能提供尽可能多的解决方案,但是后来发现每个人都有不同的可能,无数的可能造成了同样的异常,而这些异常又可能存在无数种解决方案。学会写作业比学会抄作业更有意义。所以后续的整理中,对于一些网上很少有人询问或者很少见的异常或者我很少接触的异常,我只做分析可能的原因以及可能的解决策略。

JAVA异常 —— A

此JAVA异常指的是java.lang.Exception的子类,对异常源码中注释的分析主要是基于JDK8。异常顺序是根据异常最终类名的首字母进行排序。本篇主要整理的是A开头的异常。

AclNotFoundException

此异常属于JAVA早期版本使用的异常,现在应该很少会出现。

异常全路径

java.security.acl.AclNotFoundException

异常介绍

首先解释一下ACL。其全称为Access Control List,就是访问控制列表。是JAVA提供的一套权限控制。在java.security.acl包中可以看到定义的相关权限对象。
在这里插入图片描述

而出现此异常表示,引用了不存在的ACL(访问控制列表)

解决方法

假如发现了此异常,很可能是访问的程序中使用时JAVA定义的相关权限控制规则,或者是开发人员借用了JAVA的此异常来表示进行了一次错误的访问控制操作。当你遇见了此异常可能需要你排查是否存在ACL。

ActivationException

此异常在当前版本已经不可用,创建对应实例会抛出IllegalStateException异常。

异常全路径

java.rmi.activation.ActivationException

异常介绍

首先介绍一下java.rmi.activation这个包,这个包主要是为 RMI 对象激活提供支持。利用 RMI 激活机制,能使一个远程对象的引用是“持久的”,并且可激活为一个“活动的”对象。

  • RMI

RMI为远程方法调用(远程方法调用),按照设计当有接口继承了下面接口,即可成为存在于服务器端的远程对象,供客户端访问并提供一定的服务。

public interface Remote {}

解决方法

而按照异常注释内容General exception used by the activation interfaces.可以知道,此接口是在激活对应远程接口时抛出的异常。此时需要检测在创建远程对象过程中是否存在问题。

ps.需要注意的是此异常在1.4版本之后已经不能使用,如果在日常开发中出现了此异常,我觉得此时是不是考虑升级系统的JDK版本。

AlreadyBoundException

异常全路径

java.rmi.activation.AlreadyBoundException

异常介绍

和上一个异常一样都是属于java.rmi.activation下的异常,此异常是在将对象和注册表进行绑定时出现错误时产生的。

根据JAVA代码java.rmi.Naming中的一些使用方式,在尝试将一个Remote对象绑定到已经绑定过数据的name上的时候会出现相关异常。

public static void bind(String name, Remote obj)
        throws AlreadyBoundException,
            java.net.MalformedURLException,
            RemoteException
    {
        ParsedNamingURL parsed = parseURL(name);
        Registry registry = getRegistry(parsed);

        if (obj == null)
            throw new NullPointerException("cannot bind to null");

        registry.bind(parsed.name, obj);
    }

解决方法

此时需要检查,在进行数据绑定的时候是否将已经绑定过Remote对象的name再次绑定Remote对象。

ApplicationException

Spring也存在一个相同名称的异常,显然Spring中的同名异常比Java这个人气高多了。

异常全路径

org.omg.CORBA.portable.ApplicationException

异常介绍

此异常属于org.omg.CORBA.portable包下,根据百科描述此包的作用是:提供可移植性层,即可以使一个供应商生成的代码运行在另一个供应商ORB上的ORB API 集合。

  • CORBA

关于CORBA,我这里接触的不多,还好CSDN上人才济济,我找到了几篇相关介绍的文章

CORBA技术及实例

CORBA是什么?用途是什么?

解决方法

org.omg.CORBA.portable.Delegate中的操作可以看到在进行远程调用的时候会抛出此异常。

    public InputStream invoke(org.omg.CORBA.Object self,
                              OutputStream output)
        throws ApplicationException, RemarshalException {
        throw new org.omg.CORBA.NO_IMPLEMENT();
    }

根据源码中的注释描述,此异常为应用程序级别的异常。在此异常之前应该会有更详细的异常报告,所以可以查看详细的异常报告。

AWTException

此异常是一个在学习JAVA时候会遇到而工作中几乎不太会遇到的BUG

异常全路径

java.awt.AWTException

异常介绍

java.awt为JAVA提供的用于创建界面以及图形绘制的软件包。对于上学刚开始学习JAVA的学生,初期可能会用此包绘制一些简单的交互操作。当然实际工作后这个包下的内容就很少被使用了。

解决方法

此异常是用来表示,抽象的窗口工具发生了异常,其并不是应用于某一种异常。所以源码中要求此异常必须提供一个用来解释异常内容的信息。当遇见了此异常需要根据异常中输出的msg内容来进行判断。

public AWTException(String msg) {
        super(msg);
    }

个人第一次尝试写一些有关技术不一样的内容。但是很多内容受限于本人浅薄的知识以及工作之余稀少的时间导致没法写的更加详细。我只是希望这篇文字能够给阅读他的人带来一些启发,假如有所帮助希望能点一个赞。你的点赞就是我前进的动力。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大·风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值