`
fly_hyp
  • 浏览: 305640 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

如何理解java反射中的异常输出表示

    博客分类:
  • Java
阅读更多

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学习笔记(java 反射机制 流 内存管理)

    本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...

    Java实验2 反射.doc

    基础篇有JAVA环境搭建、Java语言基础、方法和数组、面向对象基础、Java常用类、继承与接口、成员访问控制与异常、JavaFX程序设计、Java输入输出流;进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、...

    java反射规范--java资源

    在Java反射中,一切皆源于`Class`对象。`Class`对象代表了Java程序中的类或接口,并且每个类都有一个对应的`Class`对象。可以通过多种方式获得`Class`对象: - **通过类名直接获取**:例如`String.class`。 - **...

    java核心基础技术卷,(基础语法,面向对象,异常,泛型,IO,枚举,反射机制,集合,内部类,)

    "Java核心基础技术卷详解" ...Java 核心基础技术卷涉及到 Java 的基础语法、面向对象、异常、泛型、IO、枚举、反射机制、集合、内部类等多方面的知识点,为 Java 开发者提供了一个全面的学习指南。

    JAVA_API1.6文档(中文)

    java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供...

    java异常类型.txt

    1. **`java.io.IOException`** - 输入/输出操作过程中发生的异常。 2. **`java.sql.SQLException`** - 数据库访问过程中发生的异常。 3. **`java.lang.ClassNotFoundException`** - 尝试加载不存在的类时抛出此异常...

    Java类库中文手册

    这份手册详细介绍了Java标准类库中的各种类、接口、方法和异常,是Java学习者和开发者的得力助手。 在Java编程中,类库是预先编写好的一组类和接口的集合,它们提供了丰富的功能,可以帮助开发者构建高效、稳定的...

    文件写入,项目相对路径,java反射,模板数据写入

    本项目涉及的关键知识点主要包括文件写入、项目相对路径、Java反射以及模板数据写入。这些技术都是构建复杂应用时不可或缺的部分。 首先,我们要了解文件写入。在Java中,我们可以使用`java.io`包下的`FileWriter`...

    Java SCJP中文学习指南

    Java中的异常处理机制用于处理程序运行时可能出现的错误。通过try-catch-finally块,开发者可以捕获并处理异常,确保程序的健壮性。此外,了解不同类型的异常,如检查异常和运行时异常,以及如何抛出和自定义异常也...

    JAVA常用API文档 中文完整版.zip

    在Java API文档中,我们可以找到关于Java语言的基本类、集合框架、网络编程、多线程、I/O流、反射、异常处理、国际化、日期时间、XML处理等多个领域的详细说明。以下是一些关键知识点的概述: 1. **基础类与接口**...

    java异常汇总.txt

    在Java编程中,异常处理是一种重要的机制,用于处理程序执行过程中可能出现的错误或异常情况。Java中的异常分为两大类:**受检异常**(Checked Exceptions)和**非受检异常**(Unchecked Exceptions)。受检异常是在...

    常见的java异常

    Java异常处理是编程过程中不可或缺的一部分,它帮助开发者识别和修复程序中的错误。Java异常是程序运行时遇到的不正常情况,通常会导致程序中断。以下是一些常见的Java异常及其详细解释: 1. **java.lang....

    Java6.0中文API

    Java 6.0 API包含了大量核心类库,如集合框架、I/O流、网络编程、多线程、反射机制、异常处理、数据库连接(JDBC)、XML处理等关键模块。 1. 集合框架:Java 6.0引入了泛型,提高了集合类型的类型安全性和代码...

    Java_1.6.0API中文参考文档

    《Java 1.6.0 API中文参考文档》是一份对于Java编程者极其重要的资源,它详尽地列出了Java 1.6.0版本的所有公共类、接口、方法和异常,是开发者在编程过程中不可或缺的工具书。下面将详细阐述这份文档中包含的重要...

    java jdk api中文开发文档(免币)

    3. **异常处理**:Java异常处理是通过try-catch-finally结构实现的,文档详细列出了各种预定义的异常类以及如何自定义异常。 4. **集合框架**:Java集合框架包括List、Set、Queue和Map等接口,以及ArrayList、...

    JAVA API中文文档

    6. **异常处理**:`java.lang.Throwable`类及其子类如`Exception`、`Error`构成了Java的异常处理机制,通过`try-catch-finally`语句块来捕获和处理运行时错误。 7. **反射**:`java.lang.reflect`包提供了反射机制...

    java反射机制

    Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。...

    java_经典Socket编程_反射

    **知识点描述**: 了解Java反射的概念,掌握如何通过反射获取对象的信息(类、属性、方法和构造器)。 **详细说明**: - **反射概念**: - 反射是Java的一种特性,允许程序在运行时获取类和对象的信息,并动态操作...

    Java code Java code

    在给定的信息中,我们可以看到一系列与Java编程相关的文件,标题和描述中虽然没有具体的代码内容,但通过标签"Java code"我们可以推断这是一组关于Java编程的源代码文件。下面,我们将根据常见的Java编程知识点,...

Global site tag (gtag.js) - Google Analytics