VB中的错误共分为3种,分别是语法错误、逻辑错误和自定义错误。语法错误是指输入的语句不符合VB语法规则,如将if错输成fi等等。这类错误在编译时系统会自动检测出来,并提示错误发生的位置等信息,所以这种错误又称编译期错误。逻辑错误是指我们输入的语法符合VB语法规则,但程序达不到我们要求的功能。例如我们编写了一个加法程序,运行后却发现程序不能完成两数相加的功能。这类程序由于语法正确,而是程序逻辑上存在错误,因此系统不会提示任何信息,必须通过自己调试来发现错误。自定义错误则是我们自己定义的一种错误类型。
编译时检测,绕过类型检测可以修改。
struct a { int x; };
#include <stdioh>
int main()
{
const struct a v = { 3 };
printf("%d\n", vx); //输出为3
((a)&v)x = 5;
printf("%d\n", vx); //输出为5
}
01
开发软件不等于编码
写程序时会有"编码-->测试-->调试"的习惯很不幸,这是开发软件的错误方法专业的程序员会使用策略来预防、检测及消除软件bug编码不是在开发软件编码的意思是在文本编辑器中输入语句编码只是开发软件的小部分开发软件需要编程前、编程中、编程后的许多步骤下面分着讲解
02
编程前
1、了解需求
2、考虑可能的输入和期望的输出
3、识别出有效但非期望的输入和正确的输出这是对于开发可靠的软件而言是一个关键点
4、识别出无效输入并找到检测它们的方法要注意即使输入无效的数据时,程序也不能奔溃
5、想出解决办法,并记录
6、设计程序,可以节省大量的时间
03
编程中
1、若想正确且更快的完成程序, 就写更多的代码为了满足一个要求而把代码放到一个更大的程序之前,写一个小程序来测试你的解决方案即单元测试
2、使用自动缩进的文本编辑器可以帮你检查代码是否对齐,可以节省宝贵的时间
3、在运行之前一行一行的读代码可以帮你找到通过测试很难发现的问题
4、自己想一些测试例子 若自己不知道自己写的代码,则计算机也不知道
5、尽量使用函数来重构代码,避免复制代码
6、要用版本控制系统(这不是废话吗)
7、编译时,警告信息也不要放过
04
编程后
不要依赖测试,测试只会告诉你程序没有正常工作,不会告诉你程序真的在正常运行很可能测试用例没有涵盖所有可能的方案通过测试用例涵盖所有可能的方案是很困难的
05
常见错误
未初始化变量: 一些人认为所有的变量都会自动初始化为0,C语言中不会初始化通过测试很难测试出来
错误数据类型: 需要理解并正确地使用类型,编程语言的趋势是让数据类型更有限制性,防止犯意外的错误
06
后执行式和交互式调试
调试一个程序分为几个阶段, 举个列子:
1、从一个文件中读取一些整数;
2、把整数排序;
3、把排好序的整数存到另一个文件中;
单元测试: 在上面三部整合之前测试每一部分叫作单元测试
对于单元测试,经常需要写一些额外的代码,作为单独部分的"驱动"调试可能是交互式或后执行式的若程序会花费几个小时,你就不会想要用交互式来调试这个程序了相反,你会想要程序打印出调试信息,即日志
对交互式调试而言打印调试信息存在多个问题:
1、需要插入代码来打印调试信息多数情况下,调试信息必须在随后被移除,因为此信息不应该出现在最终的代码和它的输出中
2、如果有很少的信息,那么就会缺少足够的信息帮助你判断哪里错了
3、如果信息太多,可以忽略不相关的信息,获得好信息是很困难的
4、最糟糕的是,问题可能会出现在意想不到的地方,而那里却并未插入调试信息结果就是添加越来越多的调试信息这是很耗时的
07
生产代码与测试代码分离
自己应该能检测出自身bug的程序编写程序之前就应该考虑编写测试代码这是普遍的做法,这个称为 测试驱动的开发 开发的时候需要将测试代码和开发代码分开,这样可以随意删除测试代码
1Java是简单的
Java与C++极为相似,但却简单得多。高级编程语言的所有特性中,不是绝对需要的都已删去了。例如,Java没有算符过载、标题文件、预处理、指针运算、结构、联合、多维数组、模板及隐式类型变换。如果你知道一点C、C++或Pascal,你很快就会驾驭Java这里是一个简单的 JavaHelloWorld程序:
publicclassHelloInternet{publicstaticvoidmain(Stringargv[]){Systemoutprintln(“HelloIn-ternet!”)}}
2Java是面向对象的
Java是一种面向对象的编程语言。除了简单的类型,如数字和布尔算子之外,Java中的大部分都是对象。
正如任何面向对象的语言一样,Java代码也按类组织。每个类定义一组规定对象行为的方法。一个类可以继承另一个类的行为。在类的根层次上,通常是类对象。
Java支持单继承类层次结构。这就是说,每个类一次只能继承一个别的类。有些语言允许多继承性,但这可能造成混乱,使语言不必要地复杂化。例如,难以想像,一个对象会继承两个完全不同的类的行为。
Java还支持摘要类的接口。这允许编程人员先定义接口的方法,而不必急于马上确定方法的实现。一个类可以施行多个接口,从而具有真正多继承性的许多优点。一个对象也可实施任意数量的接口。Java接口与IDL接口极其相似。很容易建立IDLJ编译器。这就是说,Java可用于CORBA对象系统来建立分布式对象系统。鉴于在许多计算机系统中都采用IDL接口和CORBA对象系统,这种兼容性是重要的。
3Java是静态类型的
在一个Java程序中,必须定义所用对象(数字、字符、数组等)的类型。这有助于编程人员很快发现问题,因为当程序编译时可以检测类型错误。
不过,Java系统中的对象也有动态类型。要求一个对象为动态类型往往是可能的,所以编程人员写的程序可以对不同类型的对象做不同的事。
4Java是编译型的
当运行Java程序时,它首先被编译成字节代码。字节代码非常类似于机器指令,所以Java程序非常高效。然而,字节代码并不专对一种特定的机器,所以Java程序无需重新编译便可在众多不同的计算机上执行。
Java源程序被编译成类文件,它相当于程序的字节代码表现。在一个Java类文件中,所有对方法及实例变量的参照均按名进行,并在第一次执行代码时加以分辨。这使得代码更通用,更不易受修改的影响,而仍具高效。
5Java是体系结构中立的
Java语言对每种计算机都一样。比如,简单的类型都是不变的:整数总是32位,长整数总是64位。令人奇怪的是,诸如C及C++等时髦的编程语言却不是这样。由于这些语言定义如此自由,每种编译器及开发环境便各有不同了,这使程序的移植成为讨厌的问题。Java程序的移植却很容易,而且不需要进行重新编译。
6Java是健全的
Java程序不可能造成计算机崩溃。Java系统仔细检测对内存的每次访问,确认它是合法的,而且不致引起任何问题。
不过,即使Java程序也可能有错误。如果出现某种出乎意料之事,程序不会崩溃,而把该例外抛弃。程序会发现这类例外,并加以处理。
传统的程序可以访问计算机的全部内存。程序可能(无意识地)修改内存中的任何值,这就会造成问题。Java程序只能访问内存中允许它们访问的那些部分,所以Java程序不可能修改不拟修改的值。
7Java是小巧的
由于Java的设计是要在小的计算机上运行,作为一种编程语言来说其系统是相对较小的。它能有效地在4MB以上RAM的PC机上运行。Java翻译器只占用几百KB这种翻译器对Java的平台无关性和可移植性是可靠的。
由于Java很小,它对内存很小的计算机,如基于Java的PC机,以及电视机、烤箱、电话机及家用计算机等,是很理想的。
8Java是多线程的
Java程序可以执行一个以上的线程。比如,它可以在一个线程中完成某一耗时的计算,而其它线程与用户进行交互对话。所以用户不必停止工作,等待Java程序完成耗时的计算。
在多线程环境中的编程通常是困难的,因为许多东西可能同时出现。但是,Java提供了易于使用的同步特性,使编程更为方便。
Java线程通常被映射为实际的 *** 作系统线程,只要底层 *** 作系统支持这种映射。因此,用Java写的应用程序可说是“MP热”。这就是说,如果它们在多处理器机器上运行,它们更将表现不凡。
9Java是可收集无用的存储单元的
用C及C++写软件的编程人员必须仔细跟踪所用的内存块。当一个块不再使用时,他们务必让程序释放它,从而方可再用。在大的项目中,这可能很困难,并往往成为出错和内存不足的根源。
在Java的情况下,编程人员不必为内存管理 *** 心。Java系统有一个叫做“无用单元收集器”的内置程序,它扫描内存,并自动释放那些不再使用的内存块。
10Java是快速的
Java比典型的脚本语言大为有效,但它比C慢20倍。这对大多数应用是可接受的。
不久的将来,代码生成器就可供利用了,这将使Java程序几近于用C或C++编写的程序那么快。
11Java是安全的
Java程序没有指针,而且象这样的字节代码程序强在类型上,所以在执行之前它可能验证Java程序。被验证的Java程序得以保证不突破Java语言的任何限制,而且可以安全地执行。Java字节代码验证被Web浏览器用来确保小程序不含病毒。
12Java是可扩展的
Java程序可与用其它语言编写的现存程序库连接。由于Java数据结构与C的数据结构的类型极为相似,这是相当方便的。的问题在于,现有多线程程序库为数不多。
Java程序可以声明某些方法是内部的,然后,把这些内部方法映射成软件库所定义的功能,从而动态地链接到虚拟机。
以上就是关于2、 在VB中设计程序时,能自动被检查出来的错误是什么全部的内容,包括:2、 在VB中设计程序时,能自动被检查出来的错误是什么、被const声明后是在编译时检测还是在程序执行时阻止修改、C语言进阶04-预防、检测及消除bug等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)