java的易错点_JAVA编程中的易错点分析

  • Post author:
  • Post category:java


摘 要:本文旨在罗列出在编码过程中极易出错的二处,它们都来自生活中,来自于我们学生日常编码的经验中,这些出错点大多都利用了那些会导致debug的行为,要么违反直觉,要么晦涩难懂,它们被认为是陷阱(trap)、缺陷(deficiency)、和小概率案例(corner case)。任何具有JAVA应用知识的人都可以理解这些谜题,但是其中许多点对大多数师生造成了麻烦,我们通常花费数十个昼夜才能完全解决其中一个。我们探索出的解决方案大多引用了《JAVA语言规范第3版》,有些方案还涉及了对语言和API设计决策的讨论,大多数bug可以通过静态分析(static analysis )检测到。希望我们的总结能让苦恼于JAVA编程的人群更深层次理解这门语言。

关键词:Java;出错编码;陷阱缺陷;解决办法

中图分类号:TP311.52

1 静态导入难题

在编译器抉择使运行程序的方法之前,需要确定挑选程序运行方法的范围。编译器会优先考虑正确命名的方法并由此确定挑选范围,在本例中,这个范围就是importDuty类,因为其涵盖了隶属于Object的toString方法。但是,该范围内没有可以响应toString(args)调用的方法,因此编译器将不执行段程序,将显式出错。

即大家想要的toString方法没有被包含,至少在所调用的范围之内。导入的toString方法被importDuty从Object那里而来的同命名的方法所掩盖(shadow)了[JLS 6.3.1]。在日常编程过程中,大家经常混淆遮蔽与遮掩的概念,二者的关键区别是一个声明只能遮蔽类型相同一个声明:一个方法声明可以遮蔽另一个方法声明。对于此问题,大家可以参照变量声明与包声明,以及类型声明和包声明的相互遮蔽关系,以上三组关系类似,希望对大家有所提示。

2 唯一奇数参数问题

这个简单的问题,是希望提醒广大编写爱好者,无论何时使用了取余符号,都要考虑操作数和结果的符号。该操作符号的行为在其操作数非负时一目了然,但是当一个或两个操作数是负数时,它的行为就不那么显而易见了,所以大家要警惕。

3 结语

以上只是Java编写中易出错的两处,被我们引用来当作例子,希望对java工作者有所提示,当然还有许多细节需要我们细心留意。Java本身结构简单,语句巧妙,蕴含丰富的变化。其实本文也旨在宣言一种思路:如果我们能够在掌握书本知识的基础上,对我们常犯的错误加以总结、提炼及深化,我们对java这门语言一定会有更深的体会和理解。

参考文献:

[1]Joshua Bloch, Neal Gafter.Java puzzlers[M],2005,5.

[2]Cay S Horstmann,Gary Cornell.Core Java Volume I:fundamental[M],2008,6.

作者简介:赵赫(1991.9-),男,汉族,河南省郑州市人,郑州大学,本科,研究方向:通信工程。



版权声明:本文为weixin_27051161原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。