Java中用2种方法处理异常:
1.在发生异常的地方直接处理;
2.将异常抛给调用者,让调用者处理。
Java常见的异常:
(1)编译时异常:Java.lang.Exception
(2)运行期异常:Java.lang.RuntimeException
Java.lang.Exception和Java.lang.Error继承自Java.lang.Throwable;
Java.lang.RuntimeException继承自Java.lang.Exception.
编译时异常: 程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。Java编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
运行期异常: 这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,Java编译器强制要求处理这类异常。
‘贰’ C语言程序,编译没有错误,执行时出错。问题在哪
#include<stdio.h>
intmax(inta,intb);
intmain(void)
{
inta,b,c;
scanf("%d%d",&a,&b);
c=max(a,b);
printf("maxis%d ",c);
return0;
}
intmax(inta,intb)
{
returna>b?a:b;
}
max函数未定义
‘叁’ C程序编译时没问题,为什么运行出错
int a,b; scanf("%d%d",&a,&b);//参数必须是指针(地址)才可以。 scanf()函数要求参数必须是指针类型,即将地址传输到其内,才可以让a , b变量中获取到数据。 如果你学过指针,你就会理解了。 C语言中函数的调用中,参数传递,只能传递数值。如果只是将数值传递过去(接收者是形参),在子函数中变化,形参的变化,不会影响到实参数据的内容。 C中,每定义一个变量,系统都会在内存中给其分配一个空间用来存储数据。而这个空间的编号就是这个变量的地址。当我们将这个地址传递到子函数中,子函数在操作数据时,就会改变这个地址中的数据,这样,实参的数据是会发生变化。 而你程序中,传递的是a b本身的值(可能是0,可能是1,可能是任意的数),scanf()将这两个值当作地址去操作,因此会产生系统错误,导致程序运行停止。
‘肆’ 请高手解释下java编译期错误与运行期错误
编译错误就是编译时候报的错,你写的java程序总不能马上就跑,先要编译成class吧,如果我写的程序是“我是大笨蛋”,那当然是不符合语法的,于是编译器会报错。如果我写的语法是正确的,那么编译器就会把他转换成适当的class文件,然后你就可以运行了,运行中再出错就是运行错误了。
‘伍’ 为什么编译没有错误,运行却有错误
编译没有错误是因为你的程序语法没有错误.
而运行时则有可能出现逻辑错误.
比如说C#里最常见的"未将对象引用设置到对象的实例",就是说一个对象并没有实力化,或者没有值就去引用了.
再比如连接数据库,语法正确,但是运行时却因为SQL未启动或者连接字符串拼写错误而发生异常.