Java中的异常对程序效率有无影响

当异常没有发生时,没有影响。

其实从异常实现的角度来看,在throw语句处,跳转到异常的处理代码,不同的异常处理,应该类似C++中的虚函数表一样的数构结构(待考证)。

所以如果没有抛出异常,那和普通的代码完全一样。至于在抛出异常时要处理的开销和不使用异常,用返回码等来判断不同的错误,不仅代码复杂,而且也一样要有处理的开销。

测试代码:

import java.util.Date;

public class Test {
	long size = 1000000000L;
	public static void main(String[] args) {
		Test t = new Test();
		t.test1();
		t.test1();
		t.test1();
		t.test2();
		t.test2();
		t.test2();
		t.test1();
		t.test1();
		t.test1();
		t.test2();
		t.test2();
		t.test2();	

	}

	long func1(long i) throws Exception{
		if(i == 0){
			throw new Exception("abc");
		}
		return i-1;
	}

	long func2(long i){
		if(i == 0){
			return i + 1;
		}
		return i -1;
	}

	void test1(){
		Date begin = new Date();
		long total = 0;
		for(long i = 1; i < size; ++i){
			try {
				total += func1(i);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		Date end = new Date();
		System.out.println(total);
		System.out.println("test1 time:" + (end.getTime() - begin.getTime()));

	}

	void test2(){
		Date begin = new Date();
		long total = 0;
		for(long i = 1; i < size; ++i){
			total += func2(i);
		}
		Date end = new Date();
		System.out.println(total);
		System.out.println("test2 time:" + (end.getTime() - begin.getTime()));
	}
}

总结:异常是个很有用的功能,在不抛出异常时,开销可以忽略不计。

在C++中也是如此。(TODO:测试C++代码中异常的效率)

时间: 2024-10-03 20:42:04

Java中的异常对程序效率有无影响的相关文章

JAVA中的异常与错误处理详解

  异常与错误: 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异常类代表了不同的异常.但是在Java中所有的异常都有一个基类,叫做Exception. 错误: 它指的是一个合理的应用程序不能截获的严重的问题.大多数都是反常的情况.错误是VM的一个故障(虽然它可以是任何系统级的服务

浅谈Java中的异常

  作为一个面向对象编程的程序员对于 下面的一句一定非常熟悉: 复制代码 try { // 代码块 } catch(Exception e) { // 异常处理 } finally { // 清理工作 } 复制代码 就是面向对象中最最常见的异常处理程序,而且甚至我们会莫名其妙的被编译器要求加上这个模块,甚至我们自己也不知道捕捉到异常该怎么处理... 为什么要有异常 其实这个问题不用多说,程序员都知道,简单总结为一句话:就是为了增强程序健壮性呗,比如下面的代码: Class Denominator

深入探讨JAVA中的异常与错误处理_java

异常与错误: 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异常类代表了不同的异常.但是在Java中所有的异常都有一个基类,叫做Exception. 错误: 它指的是一个合理的应用程序不能截获的严重的问题.大多数都是反常的情况.错误是VM的一个故障(虽然它可以是任何系统级的服务).

深入探讨Java中的异常与错误处理

Java中的异常处理机制已经比较成熟,我们的Java程序到处充满了异常的可能,如果对这些异常不做预先的处理,那么将来程序崩溃就无从调试,很难找到异常所在的位置.本文将探讨一下Java中异常与错误的处理方法,一起来看看. 异常与错误: 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异

Java中的异常和处理,你知道多少?

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态. Java提供了更加优秀的解决办法:异常处理机制. 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰. Java中的异常可以是函数中的语句执行时引发的,也可以是程序员通过throw 语句手动抛出的,只要在Java程序中

全面了解Java中对于异常的捕捉方法_java

1. try-catch语句 在Java中,异常通过try-catch语句捕获.其一般语法形式为: try { // 可能会发生异常的程序代码 } catch (Type1 id1){ // 捕获并处置try抛出的异常类型Type1 } catch (Type2 id2){ //捕获并处置try抛出的异常类型Type2 } 关键词try后的一对大括号将一块可能发生异常的代码包起来,称为监控区域.Java方法在运行过程中出现异常,则创建异常对象.将异常抛出监控区域之 外,由Java运行时系统试图寻

Java千百问_04异常处理(001)_什么是java中的异常

1.java异常是什么 java在执行期间产生了某些问题,导致执行中断,这一问题就称为异常. 不同的原因都可能产生异常,包括以下内容:==用户输入无效数据.==需要打开的文件不存在.==网络连接已丢失.==JVM已经耗尽内存.==将null当作某种对象进行操作. 2.异常都分为哪些 要了解在Java中如何异常处理工作,需要了解三类异常:检查异常(checked exception) 检查异常通常是用户错误,程序员并不可预见的问题.例如,如果一个文件被打开,但该文件无法找到,则会出现异常.这些异常

Java中测试异常的多种方式

使用JUnit来测试Java代码中的异常有很多种方式,你知道几种? 给定这样一个class. Person.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public class Person { private String name; private int age; public String getName() { return name; } public void setName(Stri

如何更合理的利用Java中的异常抛出

以前,我觉得编程语言中最让人不解的部分就是它能够创建错误.当时我对Java语言中的throw关键字的第一反应就是"啊,这也太傻了,为什么我们想要引发一个错误(error)?"我觉得错误是我的敌人,应当避免的,所以创建错误是毫无用处甚至是危险的.我认为在JavaScript中加入这样的关键字是多此一举.但随着我编程经验的丰富,我逐渐变成了throw我的error粉丝.合理的使用它们会让对代码的调试和维护大大简化. 在编程的时候,Error通常出现在不期望的事情发生时.可能是传入函数的参数