java 重新抛出异常 相关处理结果示例代码

package org.rui.ExceptionTest;
/**
 * 重新抛出异常
 *
在某些情况下,我们想重新掷出刚才产生过的违例,特别是在用Exception 捕获所有可能的违例时。由于我
们已拥有当前违例的句柄,所以只需简单地重新掷出那个句柄即可。下面是一个例子:
catch(Exception e) {
System.out.println("一个违例已经产生");
throw e;
}
重新“掷”出一个违例导致违例进入更高一级环境的违例控制器中。用于同一个try 块的任何更进一步的
catch 从句仍然会被忽略。此外,与违例对象有关的所有东西都会得到保留,所以用于捕获特定违例类型的
更高一级的控制器可以从那个对象里提取出所有信息。
若只是简单地重新掷出当前违例,我们打印出来的、与printStackTrace()内的那个违例有关的信息会与违
例的起源地对应,而不是与重新掷出它的地点对应。若想安装新的堆栈跟踪信息,可调用
fillInStackTrace(),它会返回一个特殊的违例对象。这个违例的创建过程如下:将当前堆栈的信息填充到
原来的违例对象里。下面列出它的形式:
 * @author lenovo
 *
 */
public class Rethrowing {
	public static void f() throws Exception
	{
		System.out.println("f() 方法执行");
		throw new Exception("thrown form f()");
	}

	public static void g() throws Exception
	{
		try {
			f();
		} catch (Exception e) {
			System.out.println("inside g() ,e...");
			e.printStackTrace(System.out);
			throw e;//把补获的异常   重新抛出异常
		}
	}

	public static void main(String[] args)
	{
		try {
			g();
		} catch (Exception e) {
			System.out.println("main 处理异常 ");
			e.printStackTrace(System.out);
		}

	}

}
/**
 f() 方法执行
inside g() ,e...
java.lang.Exception: thrown form f()
	at org.rui.ExceptionTest.Rethrowing.f(Rethrowing.java:7)
	at org.rui.ExceptionTest.Rethrowing.g(Rethrowing.java:13)
	at org.rui.ExceptionTest.Rethrowing.main(Rethrowing.java:25)
main 处理异常
java.lang.Exception: thrown form f()
	at org.rui.ExceptionTest.Rethrowing.f(Rethrowing.java:7)
	at org.rui.ExceptionTest.Rethrowing.g(Rethrowing.java:13)
	at org.rui.ExceptionTest.Rethrowing.main(Rethrowing.java:25)
 */
package org.rui.ExceptionTest;

/**
 * 可能在捕获异常之后抛出另一种异常, 有关原来的异常发生点的信息会丢失,
 * 剩下的是与新的抛出点有关的信息
 * @author lenovo
 *
 */

//自定义异常
class OneException extends Exception
{
	OneException(String s){ super(s);}
}
class TwoException extends Exception
{
	TwoException(String s){ super(s);}
}

////////
public class RethrowNew {
  public static void f() throws OneException
  {
    System.out.println("执行f方法  f()");
    throw new OneException("thrown from f()");//
   }

  public static void main(String[] args)
  {   

	try {
			  try {
		             f();
		          } catch(OneException e)
		      {
		         System.out.println("内部异常处理, e.printStackTrace()");
		         e.printStackTrace();
		         throw new TwoException("抛出异常 inner try");
		      }

		} catch (TwoException e) {
			System.out.println("outer try ---外部的异常处理");
			e.printStackTrace(System.out);
		}
  }
}
/**
 * 最后那个异常仅知道自已来自main 而对f()一无所知
 *
output:
 执行f方法  f()
内部异常处理, e.printStackTrace()
org.rui.ExceptionTest.OneException: thrown from f()
	at org.rui.ExceptionTest.RethrowNew.f(RethrowNew.java:18)
	at org.rui.ExceptionTest.RethrowNew.main(RethrowNew.java:26)
outer try ---外部的异常处理
org.rui.ExceptionTest.TwoException: 抛出异常 inner try
	at org.rui.ExceptionTest.RethrowNew.main(RethrowNew.java:31)

 */

///:~
package org.rui.ExceptionTest;

import java.util.Date;

/**
 * 字符串格式化 示例
 *
 * 其中float类型与double类型的数据,对于String.format()方法来说,全表示为浮点数,可使用的格式化参数如:
String.format("%a,  %e,  %f,  %g",floatType,floatType,floatType,floatType);
其中
 %a  表示用十六进制表示
 %e  表示用科学记数法表示
 %f  表示用普通的10进制方式表示
 %g  表示根据实际的类型的值的大小,或采用%e的方式,或采用%f的方式

对于日期类型的:
如:
  String dataStr = String.format("%1$tm-%1$te-%1$tY",dateType);
其中1$表示如果参数中有多个dateType那么取哪个dateType中的值,
t表示日期或时间格式,
m表示月,e表示日,Y表示年.
*/
public class StringFormatTest {

	public static void main(String[] args) {
		  float floatType=1000.00f;
		  double doubleTyep=11111111111111111.00d;
		  Date dateType = new Date();
		  String floatStr = String.format("%a,  %e,  %f,  %g",floatType,floatType,floatType,floatType);
		  String doubleStr = String.format("%a,  %e,  %f,  %g",doubleTyep,doubleTyep,doubleTyep,doubleTyep);
		  String dataStr = String.format("%1$tm-%1$te-%1$tY",dateType);
		  System.out.println(floatStr);
		  System.out.println(doubleStr);
		  System.out.println(dataStr);
	}

}

/** output:
 0x1.f4p9,  1.000000e+03,  1000.000000,  1000.00
0x1.3bcbf936b38e4p53,  1.111111e+16,  11111111111111112.000000,  1.11111e+16
06-26-2014
 */

java 重新抛出异常 相关处理结果示例代码

时间: 2024-11-05 06:46:38

java 重新抛出异常 相关处理结果示例代码的相关文章

java泛型边界深入探讨,示例代码

package org.rui.generics.bounds; import java.awt.Color; /** * 边界 * 下面展示了边界基本要素. * @author lenovo * */ interface HasColor{java.awt.Color getColor();} class Colored<T extends HasColor> { T item; Colored(T item){this.item=item;} T getItem(){return item

关于JAVA中状态设计模式的讲解示例代码

为了使同一个方法调用可以产生不同的行为,State 模式在代理(surrogate)的生命周期内切换它所对应的实现(implementation).当你发现,在决定如何实现任何一个方法之前都必须作很多测试的情况下,这是一种优化实现代码的方法.     --     对象去耦(Object decoupling) 例如:童话故事青蛙王子就包含一个对象(一个生物),这个对象的行为取决于它自己所处 的状态.你可以用一个布尔(boolean)值来表示它的状态,测试程序如下: 状态模式:改变对象的行为,

java目录相关操作 示例代码

package org.rui.io; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.regex.Pattern; /** * 目录列表器 测试 * * @author lenovo * */ //Args:"C:/Users/lenovo/Pictures/screen/*\.jpg" public class DirList { public

左右JAVA示例代码事件分发和监督机制来实现-绝对原创有用

文章标题:左右JAVA示例代码事件分发和监督机制来实现 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy2012Email:[email protected]qq:    1046011462 一.场景如果 如果有博客系统中须要实现例如以下功能: 系统中用户公布文章.改动文章.删除文章时,须要一些相关的操作须要运行. 公布文章后,给好友发送邮件通知.给用户加积分,对文章做全文索引. 改动文章后,给好友发送邮

java I/O进程控制,重定向 示例代码

package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Redircting { public static void main(String[] args) throws IOException { String path="D:\\Users\\liangrui\\workspace\\thinking\\src\\org\\rui\\io\\util/"; PrintStream cons

java第15章示例代码

import java.util.Scanner; /** * * @author asus第15章示例代码1 全桂群2017.4.9 * */public class Registter { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); String uname, pw

java 线程、线程池基本应用示例代码回顾

package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class LiftOff implements Runnable { protected int countDown=10; private static int taskCount=0; private final int id=taskCount++; public LiftOff(){} public LiftOff(int countDown) { thi

java 加入一个线程、创建有响应的用户界面 。 示例代码

javajava 加入一个线程.创建有响应的用户界面 . 示例代码 来自thinking in java 4 21章  部分代码  目录21.2.11 thinking in java 4免费下载:http://download.csdn.net/detail/liangrui1988/7580155 package org.rui.thread.concurrent; /** * 加入一个线程 * 一个线程可以在其他线程之上调用join()方法,其效果是等待一段时间直到第二个线程结束才继续执行

java 线程返回值,优先级,后台线程 示例代码

ava 线程返回值,休眠,优先级,后台线程  示例代码 package org.rui.thread.basic; import java.util.ArrayList; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execu