站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题与 Java、 C++ 之比较

与 Java、 C++ 之比较

摘要: 与 Java、 C++ 之比较



导读

   本文我们就将集中讨论意外处理的基础以及如何使用 JavaScript 充分利用意外处理。我将使用一些例子来示范其概念和具体的执行方法,同时指出 JavaScript 的意外处理与其它语言之间的区别。
作者: 青苹果工作室 本文点击次数:1
2001-01-12 把此文推荐给好友
责编:庄荣斌

   请不要吃惊,你会发现:Java 和 C++ 的意外处理语法与 JavaScript 的非常相似。同 JavaScript 中一样,它们也是以 try..catch 语句为中心的。主要的区别在于 catch 的变量。就象前面页面中所解释的一样,在 JavaScript 中这个变量可以是任何数据类型,可以是一个对象、一个字符串、一个整数或任何其它被支持的类型。实际上,JavaScript 不支持类型声明,所以就无法声明 catch 的变量类型。在 Java 中,catch 的变量是 Java 类的一个例示,将标准 Java 扩展成可导致的类。Catch 语句应该是这样的:

catch (objectType exception)
   其中意外是一个 objectType 类型的对象。C++ 就不是那么限制了,Catch 的变量可以是标准 C++ 意外类的一个例示,或者是任何 C++ 类型:

catch (char *message)
   由于在 JavaScript 中没有类型声明,在每个 try 代码区它只支持一个 catch 代码区。在前面页面中已经显示了,当我们的意外处理要依赖于变量类型时,我们就使用 instanceOf 函数来检查它是否是正确的类型。在 C++ 和 Java 中,对每一个 try 代码区你可以使用多个 catch 代码区。每个 catch 代码区负责处理适当类型的意外。假如你想处理 char 类型和 myException 类型的意外:

try {
// following function can throw exceptions of type char or myException
doSomeThingUseful();
}
catch (char *exceptionString) {
// handle the case that exception is a string
}
catch (myException exceptionObject)
// handle the case that exception is an instance of type myException
}
   在 JavaScript 中,你要用这些代码行:

try {
// following function can throw exceptions of type char or myException
doSomeThingUseful();
}
catch (exception) {
// verify exception is of myExceptionObject type
if (exception instanceOf myExceptionObject) {
if (exception.kind == "string") {
// handle the sting exception
}
else if (exception.kind == "myException") {
// handle the object exception
}
}
   另一个区别是 Java 和 C++ 支持意外 catch-all(全捕捉),也就是在一个 catch 代码区捕捉全部的意外。在 Java 中的语法是:

catch (Throwable t) {
// Handle all cases
}
   其中 Throwable 是一个事先定义的 Java 类。在 C++ 中相应的 catch-all 语法是:

catch ( ... ) {
// Handle all cases
}
   正如上面所说过的,由于 JavaScript 只支持一个 catch 代码区,根据定义,所有的意外都是由同一个 catch 代码区捕捉的。你应该使用:

catch ( exception ) {
// Handle all exceptions
}
   同样的区别在 C++、 Java 和 JavaScript 的导致语句中也存在。在三种语言中语法是一样的:

throw exceptionObject;
   由于 Java 只能捕捉 Throwable 类型的意外, exceptionObject 必须是这种类型。C++ 和 JavaScript 可以抛出任何数据类型,包括字符串、整数、对象等。

   C++ 和 Java 在意外向上繁殖的方式上与 JavaScript 也不同。如果一个意外不在 C++ 或 Java 中处理,那么在调用方案中,它就自动被提升到一个更高层次,如调用函数、主程序或浏览器。在 JavaScript 中,如果你希望一个更高层次处理这个意外的话,就不得不自己来提升这个意外。前面页中已经显示过,你应该使用这个简单的语法:

throw exceptionObj;
   最后一个区别是 C++ 和 Java 不支持 try..catch 代码区的嵌套。而在 JavaScript 中,你可以将一个 try...catch 语句装在另一个语句的 try 或 catch 区内。
↑返回目录
前一篇: Java Socket编程(五)
后一篇: 谈谈JAVA程序的反编译