[quote=引用 11 楼 ole_master 的回复:] [quote=引用 9 楼 windowsoahil 的回复:] 你通过一个字符串来创建一个class对象,因为编译器不能在编译时检查字符串对应的类是否存在,所以声明受检异常,提示:你必须自己处理这个类不存在的情况
[quote=引用 9 楼 windowsoahil 的回复:] 你通过一个字符串来创建一个class对象,因为编译器不能在编译时检查字符串对应的类是否存在,所以声明受检异常,提示:你必须自己处理这个类不存在的情况
[quote=引用 22 楼 ole_master 的回复:] [quote=引用 21 楼 windowsoahil 的回复:] 资料的话可以参考《核心技术》卷I,或者上网找找Java异常体系,应该不少 Java异常体系由来已久,我说不出太高深的,可以理解为Java为了降低对开发人员的技术要求(尤其相对于C系语言),在语言层次施加的强制约束。从结果来看,因为Java技术体系三方框架众多,每个框架都会定制自己的异常体系,其提供的信息和堆栈对调试有极大帮助(也是相对于C系语言)。这其实是更加符合人类语言习惯的表达方式,所以才说Java入门更容易。
[quote=引用 21 楼 windowsoahil 的回复:] 资料的话可以参考《核心技术》卷I,或者上网找找Java异常体系,应该不少 Java异常体系由来已久,我说不出太高深的,可以理解为Java为了降低对开发人员的技术要求(尤其相对于C系语言),在语言层次施加的强制约束。从结果来看,因为Java技术体系三方框架众多,每个框架都会定制自己的异常体系,其提供的信息和堆栈对调试有极大帮助(也是相对于C系语言)。这其实是更加符合人类语言习惯的表达方式,所以才说Java入门更容易。
资料的话可以参考《核心技术》卷I,或者上网找找Java异常体系,应该不少 Java异常体系由来已久,我说不出太高深的,可以理解为Java为了降低对开发人员的技术要求(尤其相对于C系语言),在语言层次施加的强制约束。从结果来看,因为Java技术体系三方框架众多,每个框架都会定制自己的异常体系,其提供的信息和堆栈对调试有极大帮助(也是相对于C系语言)。这其实是更加符合人类语言习惯的表达方式,所以才说Java入门更容易。
[quote=引用 18 楼 windowsoahil 的回复:] 准确来说,受检异常(即编译器强制处理的异常)标志着这个异常的场景无法在开发阶段避免;相反有非受检异常(编译器不强制处理),Java认为其一定可以通过合理规划代码结构来规避。 同一个方法声明多种异常是比较常见的,尤其在反射API中,例如Method类的invoke方法 在异常被抛出时,抛出的异常对象本身将带有现场信息,包括调用堆栈、异常信息等
准确来说,受检异常(即编译器强制处理的异常)标志着这个异常的场景无法在开发阶段避免;相反有非受检异常(编译器不强制处理),Java认为其一定可以通过合理规划代码结构来规避。 同一个方法声明多种异常是比较常见的,尤其在反射API中,例如Method类的invoke方法 在异常被抛出时,抛出的异常对象本身将带有现场信息,包括调用堆栈、异常信息等
[quote=引用 14 楼 windowsoahil 的回复:] [quote=引用 11 楼 ole_master 的回复:] [quote=引用 9 楼 windowsoahil 的回复:] 你通过一个字符串来创建一个class对象,因为编译器不能在编译时检查字符串对应的类是否存在,所以声明受检异常,提示:你必须自己处理这个类不存在的情况
你通过一个字符串来创建一个class对象,因为编译器不能在编译时检查字符串对应的类是否存在,所以声明受检异常,提示:你必须自己处理这个类不存在的情况
可以看看forname的原型,他本来就抛出了一个必须要处理的异常。你现在调用这个方法,当然要对异常处理。
forName方法里的字符串参数,Java在未运行时是不知道到底存不存在这个类的,这是一种提醒,告诉你这里很可能会有class找不到的异常。 我们在自己写代码的时候也可以给自己的方法throws一个异常,别的方法在调用你的方法的时候也就需要throws或try-catch,你抛出的异常相当于告诉其它方法你这方法可能出现的异常。
个人理解:这个方法你是调用的,而给你用这个方法的人并没有去解决这个异常,把这个异常抛给你了,所以你一定要解决这个异常,try和throws都是解决办法,但是你throws出去的话,调用了你这个连接的人还是要解决的,就是异常一定要解决
forName("")是class的一个静态方法,该方法可以加载类。 但是该方法中调用的是forName0的一个本地主法,此方法会抛出一个ClassNotFoundException的一个异常,所以在forname时同时向外抛出该异常,他向外抛的目的是当找不到这个class时告诉我们这个class在当前环境中没有找到,让我们自己看着办, @CallerSensitive public static Class<?> forName(String className) throws ClassNotFoundException { Class<?> caller = Reflection.getCallerClass(); return forName0(className, true, ClassLoader.getClassLoader(caller), caller); } 不知道你们学异常处理没,所有throws都需要在调用方用try或者继续throws到上一层。
@CallerSensitive public static Class<?> forName(String className) throws ClassNotFoundException { Class<?> caller = Reflection.getCallerClass(); return forName0(className, true, ClassLoader.getClassLoader(caller), caller); }
62,630
社区成员
307,264
社区内容
加载中
试试用AI创作助手写篇文章吧