java是一中高级语言,是编译型的语言,也是解释型的语言。现在各种框架类库(Spring、Struts)大量使用java的反射机制。使用反射反射时sun java虚拟机异常的输出形式有点不一样
下面是我的测试代码
static public class Test1
{
public void abc(int a)
{
System.out.println("abc ..." + a);
throw new RuntimeException("tdtd");
}
}
@SuppressWarnings("unchecked")
static void test3() throws Exception
{
Class cls = Test1.class;
Object obj = cls.newInstance();
Method method= cls.getMethod("abc", int.class);
method.invoke(obj, 10);
}
/**
* @param args
*/
public static void main(String[] args) {
try {
// test();
//test2();
test3();
} catch (Exception e) {
StackTraceElement[] elements = e.getStackTrace();
//Throwable cause = e.fillInStackTrace();
//JavaUtil.debugPrint(cause.getClass());
e.printStackTrace();
System.out.println();
e.getCause().printStackTrace();
}
}
其中
e.printStackTrace();
输出如下:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at cn.sh.flyhyp.cherry.InterceptorExecutorRun.test3(InterceptorExecutorRun.java:63)
at cn.sh.flyhyp.cherry.InterceptorExecutorRun.main(InterceptorExecutorRun.java:74)
Caused by: java.lang.RuntimeException: tdtd
at cn.sh.flyhyp.cherry.InterceptorExecutorRun$Test1.abc(InterceptorExecutorRun.java:53)
... 6 more (理解为:反射的外部异常堆栈深度为6
)
其中
e.getCause().printStackTrace();
输入如下(这种输出方式我比较喜欢):
java.lang.RuntimeException: tdtd
at cn.sh.flyhyp.cherry.InterceptorExecutorRun$Test1.abc(InterceptorExecutorRun.java:53)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at cn.sh.flyhyp.cherry.InterceptorExecutorRun.test3(InterceptorExecutorRun.java:63)
at cn.sh.flyhyp.cherry.InterceptorExecutorRun.main(InterceptorExecutorRun.java:74)
今天研究到这里,感觉已经有点收获了,有一点疑问是,为什么jvm选择默认用第一种方式输出,有什么好处。哪位达人有更高的造诣的话,不吝赐教。
分享到:
相关推荐
本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...
基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java输入输出流;进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、...
在Java反射中,一切皆源于`Class`对象。`Class`对象代表了Java程序中的类或接口,并且每个类都有一个对应的`Class`对象。可以通过多种方式获得`Class`对象: - **通过类名直接获取**:例如`String.class`。 - **...
"Java核心基础技术卷详解" ...Java 核心基础技术卷涉及到 Java 的基础语法、面向对象、异常、泛型、IO、枚举、反射机制、集合、内部类等多方面的知识点,为 Java 开发者提供了一个全面的学习指南。
java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供...
1. **`java.io.IOException`** - 输入/输出操作过程中发生的异常。 2. **`java.sql.SQLException`** - 数据库访问过程中发生的异常。 3. **`java.lang.ClassNotFoundException`** - 尝试加载不存在的类时抛出此异常...
这份手册详细介绍了Java标准类库中的各种类、接口、方法和异常,是Java学习者和开发者的得力助手。 在Java编程中,类库是预先编写好的一组类和接口的集合,它们提供了丰富的功能,可以帮助开发者构建高效、稳定的...
本项目涉及的关键知识点主要包括文件写入、项目相对路径、Java反射以及模板数据写入。这些技术都是构建复杂应用时不可或缺的部分。 首先,我们要了解文件写入。在Java中,我们可以使用`java.io`包下的`FileWriter`...
Java中的异常处理机制用于处理程序运行时可能出现的错误。通过try-catch-finally块,开发者可以捕获并处理异常,确保程序的健壮性。此外,了解不同类型的异常,如检查异常和运行时异常,以及如何抛出和自定义异常也...
在Java API文档中,我们可以找到关于Java语言的基本类、集合框架、网络编程、多线程、I/O流、反射、异常处理、国际化、日期时间、XML处理等多个领域的详细说明。以下是一些关键知识点的概述: 1. **基础类与接口**...
在Java编程中,异常处理是一种重要的机制,用于处理程序执行过程中可能出现的错误或异常情况。Java中的异常分为两大类:**受检异常**(Checked Exceptions)和**非受检异常**(Unchecked Exceptions)。受检异常是在...
Java异常处理是编程过程中不可或缺的一部分,它帮助开发者识别和修复程序中的错误。Java异常是程序运行时遇到的不正常情况,通常会导致程序中断。以下是一些常见的Java异常及其详细解释: 1. **java.lang....
Java 6.0 API包含了大量核心类库,如集合框架、I/O流、网络编程、多线程、反射机制、异常处理、数据库连接(JDBC)、XML处理等关键模块。 1. 集合框架:Java 6.0引入了泛型,提高了集合类型的类型安全性和代码...
《Java 1.6.0 API中文参考文档》是一份对于Java编程者极其重要的资源,它详尽地列出了Java 1.6.0版本的所有公共类、接口、方法和异常,是开发者在编程过程中不可或缺的工具书。下面将详细阐述这份文档中包含的重要...
3. **异常处理**:Java异常处理是通过try-catch-finally结构实现的,文档详细列出了各种预定义的异常类以及如何自定义异常。 4. **集合框架**:Java集合框架包括List、Set、Queue和Map等接口,以及ArrayList、...
6. **异常处理**:`java.lang.Throwable`类及其子类如`Exception`、`Error`构成了Java的异常处理机制,通过`try-catch-finally`语句块来捕获和处理运行时错误。 7. **反射**:`java.lang.reflect`包提供了反射机制...
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。...
**知识点描述**: 了解Java反射的概念,掌握如何通过反射获取对象的信息(类、属性、方法和构造器)。 **详细说明**: - **反射概念**: - 反射是Java的一种特性,允许程序在运行时获取类和对象的信息,并动态操作...
在给定的信息中,我们可以看到一系列与Java编程相关的文件,标题和描述中虽然没有具体的代码内容,但通过标签"Java code"我们可以推断这是一组关于Java编程的源代码文件。下面,我们将根据常见的Java编程知识点,...