解决java.lang.IllegalArgumentException: URI is not hierarchical报错的问题
目录
- Java.lang.IllegalArgumentException: URI is not hierarchical
- 一个类的静态块初始化异常了,后面调用这个类创建对象会报错吗?
- 这是因为Java类加载机制的工作方式
- 总结
java.lang.IllegalArgumentExceptionandroid: URI is not hierarchical
Thread.currentThread编程().getContextClassLoader("类的全路径").getClass().newInstance()
一个类的静态块初始化异常了,后面调用这个类创建对象会报错吗?
是的,如果一个类的静态块初始化过程中抛出了异常,后续任何尝试创建该类的对象或访问该类的静态成员都会失败,并抛出 ExcepjstionInInitializerError
或显示 "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.Hi编程veConf"
要解决这个问题,您需要修复导致静态初始化块失败的根本原因,在这种情况下,就是解决 URI is not hierarchical
错误。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论