分深奥的事情;许多C++程序员从没有处理过它们甚至不知道它们是何物
。异常是在正常的过程中出现的未预料的错误
,因此
,它们不会从方法中返回,或者作为参数传入;但是,它们不能被忽略!这里的一个例子是计算一个书的方根的方法
。正常的接口形式是将一个正数作为参数传入方法,然后方法会返回一个正实数作为结果,方法可以检验这些并且在异常产生的时候抛出异常。在大多数系统中,程序员并不是必须这样做,这样,一个没有考虑到的异常可以使程序不正常的退出。
在Java中,异常已经成为语言中非常成熟的部分。方法的说明中就包含了异常的信息,程序处理器也强制检验如果你使用了一个能够产生异常的方法,你就必须检查异常是否发生。几乎所有的Java程序员都会遇到异常的情况,因为许多非常有用的库中的类都会抛出异常。处理异常并不难,但是在一些时候是需要注意的。一个方法的文档会指明方法抛出的异常的类型。如果你忘了,不要紧,编译器会提醒你的。
6.字符串不再是字符数组
Java中包括了一个字符串的对象,并且是个常量。字符串不像字符数组一样,虽然可以简单的从一个字符数组构造一个字符串。你应该尽可能的用字符串代替字符数组,因为他们不会因为误操作而被覆盖。
7.Java限制了常量对象和方法
在C++中,你可以正式的声明一个函数参数或者函数返回值为const类型,这样可以有效的防止对参数或者返回值的不正当修改。另外,你可以声明一个成员函数为const,表明它不可以修改任何他操作的对象。
Java支持常量操作符,只读变量,这些通过final关键字实现。但是Java没有支持强制的使一个可写变量在函数传递、返回的过程中变为只读。或者定义一个不操作修改对象的常量方法。
在Java中,这个省略带来的影响和在C++中相比就非常小了,这很大程度上因为字符串变量和字符数组的不同,但是这也带来一个引起错误的隐患。特别地,没有办法检验一个方法是否可以改动对象。
8.Java没有指针
理解指针的概念是一个C或C++程序员最难应付的问题。指针也是错误产生的一大根源。Java中没有指针,对象的句柄直接作为参数传递,而不是传递指针。另外,你必须通过索引使用数组。这些都不是什么大问题。然而,没有指针是在写含有函数指针或者成员函数指针的系统的时候引起很大麻烦。这个问题在处理回调函数的时候更加显著。
9.Java没有参数化类型
参数化类型提供了用一段程序处理许多相似程序的方法。一个例子就是开平方根的方法,它可以对int或者float操作。在C++中,这一特性是由模板提供的。
Java中不包含C++中的模板的等价物。如果你经常使用模板来简化程序,比如说构造许多使用相似参数类型的函数,这简直就是灾难。这意味着更多使用复制、粘贴的过程来手动的完成。然而,如果你使用模板来生成类的话,没有简单的方法。
10.Java使用垃圾回收
在垃圾回收的语言中,运行时环境一直监测哪些内存不被使用。当一块内存不用的时候,系统自动的回收内存。比如说,一个对象在一个方法中生成,但是没有被调用着返回或者没有储存为全局变量,不能在方法外部使用。系统自己会知道哪些变量是你用不到的,哪些是可以用到的。因此,你不必再为破坏对象回收内存而担心。在C++中,很多的调试时间都被使用到检查内存
漏洞中。Java的这种方法很大程度上降低了这种错误的可能。但是他依然不能处理逻辑混乱的程序,他们不能够被回收。许多C++的类中的析构函数是用来释放对象引用的内存的。Java使垃圾回收的事实说明在Java中不是必需写析构函数了。但是并不意味着你可以忘记为你的类写析构函数。比如,一个对象打开了网络连接就必须被恰当的清理来