❶ 编译时异常
当你在编辑时想让调用者知道他传达的值是错的你就抛一个编辑时异常,让他预先做处理,你不处理你编辑就不能通过。在抛异常的方法中写一个声明 throws Exception
上面其实是处理异常的一种方案,声明异常。还有一种方案就是捕获异常
通过try,catch来进行异常的内部消化。
总结:
什么时候使用捕获,什么时候使用声明:
首先明确自己到底是功能的定义者还是功能的调用者。
如果我们是功能的定义者,在我们的功能中有异常发生,而这个异常不需要告诉给调用者,这时就要在自己的功能中必须把这个捕获调用。
如果这个问题需要告诉调用者,这时就可以在方法上使用throws关键字把异常声明出去。
功能的调用者:我们调用别人的程序,由于别人的程序发生了问题,自己在调用的时候,就需要提前给出处理方案,而java对异常的处理方案仅有2种,
捕获和声明。如果这个问题在我们自己的程序能够处理掉就不要再使用声明,而发自己依然要把这个问题往外暴漏,那么就可以使用声明
❷ 用Keil编程序时编译有错误,怎么才能知道错误是什么呢
每个错误都有自己的标号,你可以根据标号在keil提供的帮助文件中搜索有关的详细内容,按下F1会弹出帮助文档,文档都是英文写的。
另外你双击错误时光标会自动跳到keil认为的错误行,实际错误就在那一行的附近
或者你可以把你的错误放在网络里面搜一搜,一般都会得到。
❸ 简要描述一下编译期异常和运行时异常
编译器异常就是你编译的时候 编译器报的错误,会自动提示;
运行时异常是程序运行的时候发生的异常,比如空指针,超出界限等,可以通过try catch捕捉到的
❹ 程序编译错误不知道是什么原因
不能通编译过的程序实际上还不是合法的程序,因为它不满足C语言对于程序的基本要求。
检查语法错误的第一要义:集中力量检查系统发现的第一个错误,弄清并改正它。
在编译过程中系统发现的错误主要有两类:基本语法错误和上下文关系错误。这些错误都在表面上,可以直接看得见。也是比较容易弄清,比较容易解决的。关键是需要熟悉C语言的语法规定和有关上下文关系的规定,按照这些规定检查程序正文,看看存在什么问题。
编译中系统发现错误都能指出错误的位置。不同系统在这方面的能力有差异,在错误定位的准确性方面有所不同。有的系统只能指明发现错误的行,有的系统还能够指明行内位置。
一般说,系统指明的位置未必是真实错误出现的位置。通常情况是错误出现在前,而系统发现错误在后,因为它检查到实际错误之后的某个地方,才能确认出了问题,因此报出错误信息。要确认第一个错误的原因,应该从系统指明的位置开始,在那里检查,并从那里开始向前检查。
系统的错误信息中都包含一段文字,说明它所认定的错误原因。应该仔细阅读这段文字,通常它提供了有关错误的重要线索。但也应该理解,错误信息未必准确,有时错误确实存在,但系统对错误的解释也可能不对。也就是说,在查找错误时,既要重视系统提供的错误信息,又不应为系统的错误信息所束缚。
发现了问题,要想清楚错误的真正原因,然后再修改。不要蛮干。在这时的最大诱惑就是想赶快改,看看错误会不会消失。但是蛮干的结果常常是原来的错误没有弄好,又搞出了新的错误。
另一个值得注意的地方:程序中的一个语法错误常常导致编译系统产生许多错误信息。如果你改正了程序中一个或几个错误,下面的弄不清楚了,那么就应该重新编译。改正一处常常能消去许多错误信息行。
解决语法错误
常见语法错误:
1)缺少语句、声明、定义结束的分号。
2)某种括号不配对。C语言中括号性质的东西很多,列举如下:
( ), [ ], { }, ' ', " ", /* */
在不同位置的括号不配对可能引起许多不同的错误信息。
3)关键字拼写错误。
较难认定的典型错误:
1)宏定义造成的错误。这种东西不能在源程序文件中直接看到,是在宏替换之后出现的。常见的能引起语法错误的宏定义错误:宏定义中有不配对的括号,宏定义最后加了不该有的分号,……
解决上下文关系错误
1)变量没有定义。产生这个问题的原因除了变量确实没有大意外,还可能是变量的拼写错误,变量的作用域问题(在不能使用某个变量的地方想去用那个变量)。
2)变量重复定义。例如在同一个作用域里用同样名字定义了两个变量,函数的局部变量与参数重名等。
3)函数的重复定义。可能是用同一个名字定义了两个不同的函数。或者是写出的函数原型在类型上与该函数的定义不相符。有时没有原型而直接写函数调用也可能导致这种错误信息,因为编译程序在遇到函数调用而没有看到函数原型或函数定义时,将给函数假定一个默认原型。如果后来见到的函数定义与假定不符,就会报告函数重复定义错误。
4)变量类型与有关运算对运算对象或者函数对参数的要求不符。例如有些运算(如 %)要求整数参数,而你用的是某种浮点数。
5)有些类型之间不能互相转换。例如你定义了一个结构变量,而后要用它给整数赋值。系统容许的转换包括:数值类型之间的转换,整数和指针之间的转换,指针之间的转换。其余转换(无论是隐含的,还是写出强制)都不允许。参见《C语言程序设计》(K&R)197-199页。
如何看待编译警告
当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息。警告信息可能意味着程序中隐含的大错误,也可能确实没有问题。对于警告的正确处理方式应该是:尽可能地消除之。对于编译程序给出的每个警告都应该仔细分析,看看是否真的有问题。只有那些确实无问题的警告才能放下不管。
注意:经验表明,警告常常意味着严重的隐含错误。
常见警告:
1)(局部自动)变量没有初始化就使用。如果对局部指针变量出现这种情况,后果不堪设想。对于一般局部自动变量,没有初始化就使用它的值也不会是有意义的。
2)在条件语句或循环语句的条件中写了赋值。大部分情况是误将 == (等于判断)写成 = 了。这是很常见的程序错误,有些编译程序对这种情况提出警告。
❺ 对于C语言编程出了错,怎么能快速找出错误呢
最直接的方法就是编译,编译后再按F4可以显示错误信息及错误位置。
如果编译通过,却运行结果异常或不理想,往往是逻辑问题,请按顺序检查,如i++写成i--,i++写成j++,++i写成i++,<=写成<,有的变量一次循环后需要重新赋值清零,在循环末尾一定要写上重新赋值语句。
❻ 数组的下标越界可在编译哪个阶段发现
1、运行的时候,这个属于异常。
2、直接在开始编译的时候,这个属于错误了。
数组下标越界是一个程序初学者最容易犯的错误。
以一个简单的一维数组为例:
int a[10];这是一个整型的数组a,有10个元素:a[0]-a[9],因为正确的下标应该是从0开始,到9结束,与生活习惯中的1-10不一样,于是产生一个a[10]的错误,即数组下标越界。
c和c++语言中数组下标越界,编译器是不会检查出错误的,但是实际上后果可能会很严重,比如程序崩溃等,所以在日常的编程中,程序员应当养成良好的编程习惯,避免这样的错误发生。
若编辑网页时提示“数组下标越界”,除检查下上述问题外,再检查下文件中变量名称是否一致,很多时候是变量名称不一致所致
使用的角标大于等于数组的长度或为负数!
❼ 怎样快速找到java编译时的错误
不管开发工具是否智能,都要学会阅读错误信息,
想要找出问题很简单,通常报错了之后,阅读打印出来的错误信息,都是最重要的纠错手段。
报错了之后首先要看错误信息的第一行,那一行包含两种信息,前面一段记录的是错误的类型,比如说java.lang.NullPointerException 这里随便贴了个空指针异常,这是错误类型,之后后面跟的是对这个错误信息的描述,一般是英文,这个错误信息的描述非常重要,他详细的说明了这个错误出现的原因,接下来的一行一行的,是出现错误的位置 一般是这样的
at xxx.xxx.xxx.Xxx 意思是在哪个哪个类的第多少多少行,但是为什么会出现一堆呢,因为java的异常是可以层层上抛的,最开始报错的地方位置,然后上一层的位置,然后再上一层的位置.....所以会显示一堆,其实他只是个位置信息而已,不要被庞大的错误信息吓着。呵呵
❽ 如何快速查找C语言编译时的错误
1、首先,我们启动编译软件程序,今天我们以VC++6.0为例。
注意事项:
编译语言是一种以编译器来实现的编程语言。它不像直译语言一样,由解释器将代码一句一句运行,而是以编译器,先将代码编译为机器码,再加以运行。理论上,任何编程语言都可以是编译式,或直译式的。它们之间的区别,仅与程序的应用有关。
❾ Java编程中 常见的异常有哪几种
相信作为程序员的我们在对程序进行编译过程中经常会遇到错误,或者在运行过程中出现错误,在这里主要跟大家谈谈经常遇到的一些异常与错误,以及解决办法。
异常是指程序在编译或运行过程出现的错误。
在java.lang包中Throwable包含了所有的异常。
Error (错误) 和Exception(异常)
(1)Error(错误)
一旦发生无法修复,但可以避免发生。
常见错误类:
IOError:I/O错误,当发生严重的I/O错误时,抛出此错误。
VirtualMachineError:虚拟机错误,当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。
StackOverflowError:栈内存满了,当应用程序递归太深而发生堆栈溢出时,抛出该错误。
OutofMemoryError:堆内存满了,因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该异常。
以上是一些常见的错误,在Error类中还有一些别的错误(参照文件Java.lang.Throwable.Error).
(2)Exception(异常)
一旦发生,可以捕获并处理,不会导致程序终止,有时可以避免有时无法避免。
异常的分类:
1.编译时异常(需要强制处理) 2.运行时异常(不需要强制处理)
常见的异常有:
IOException:输入输出流异常
FileNotFoundException:文件找不到的异常
ClassNotFoundException:类找不到的异常
DataFormatException:数据格式化异常
NoSuchFieldException:没有匹配的属性异常
NoSuchMethodException:没有匹配的方法异常
SQLException:数据库操作异常
TimeoutException:执行超时异常
常见的运行时异常:
RuntimeException:运行时异常
NullPointerException:空指针异常
:数组越界异
ClassCastException:类型转换异常
IllegalArgumentException:非法的参数异常
InputMismatchException:输入不匹配
以上是常见的一些异常,另外还有别的异常,参见文件:Java.lang.Throwable.Exception
既然我们常常会遇到一些异常,那我们如何来处理这些异常就是一个急需解决的事情。
(1) 如何处理编译时异常?
方法一:将需要处理的代码块放在一个try...catch...中
try{
//需要处理异常的代码
}catch(XXXException ef){
ef.printStackTrace();
}
我们方法一就是要将我们不确定的代码放入try......catch中,先进行try一下,如果没有异常,则不会触发catch,没有输出,一旦出现异常,那么catch就会工作,在catch中捕获异常信息,根据异常信息进行补救措施。
如以下代码:
从结果可以看出,我们在输入数据的时候出现错误,这样通过自定义异常能够让我们更直接快速的找到运行或编译时的异常。
在上述中我们分别提到了三种throw,分别是Throwable,Throws以及throw,那么到底三者有什么区别?
Throwable:是指在在Java.lang包中的一个类,其包含了所有的异常和错误,其中类Error和Exception 是它
的子类。
Thows:是指在解决编译时异常,将方法中异常抛给上一级,在方法后面要加Throw Exception来进行抛。
throw:是指在自定义异常时,如果方法出现异常,那么将作为引用方法的对象抛出。即抛出异常。
希望对您有所帮助!~
❿ 编译时异常和运行时异常怎么理解,怎么区分两者
编译错误,一般是语法上存在问题,编译过不去; 运行错误,是指程序在运行过程中出现错误,只能说是程序存在一定的边界bug; 编译错误一般是指java语法的错误,运行错误分两种一种是error还有就是Exception 有的异常是抛出但可继续执行之后的代码