java.lang.illegalargumentexception: uri is not hierarchical
thread.currentthread().getcontextclassloader("类的全路径").getclass().newinstance()
一个类的静态块初始化异常了,后面调用这个类创建对象会报错吗?
是的,如果一个类的静态块初始化过程中抛出了异常,后续任何尝试创建该类的对象或访问该类的静态成员都会失败,并抛出 exceptionininitializererror
或显示 "could not initialize class classname" 的错误。
这是因为java类加载机制的工作方式
- 当 jvm 第一次遇到一个类时(通过创建对象、访问静态成员等方式),它会触发类加载过程
- 类加载过程包括:加载、验证、准备、解析和初始化几个步骤
- 在初始化阶段,jvm 会执行类的静态初始化块和静态字段初始化
- 如果在这个过程中抛出了任何异常,那么类的初始化会失败
- 一旦类初始化失败,jvm 会将该类标记为不可用状态
- 之后任何尝试使用该类的操作都会导致
noclassdeffounderror
或者显示 "could not initialize class classname" 的错误
这就是为什么当 hiveconf
类的静态初始化块失败后,后续调用 hiveconf.sethivesitelocation(null)
或创建 hiveconf
对象时会报错:
"could not initialize class org.apache.hadoop.hive.conf.hiveconf"
要解决这个问题,您需要修复导致静态初始化块失败的根本原因,在这种情况下,就是解决 uri is not hierarchical
错误。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论