迷糊:java编译和异常

「已注销」 2008-04-17 01:24:02
前天参加java的笔试 回来后晕晕的 所以有了以下疑问
首先java的异常发生 是在运行期间吧?
其次对于 编译报错 和 运行期间报错怎么区分.
能否给个归纳 或者 提示.

...全文
202 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
gabriel80 2008-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
编译报错?
1 你的代码不符合java的书写要求,语法错误
2 你需要的类库没有找到
3 某些可以预见的错误你没有处理,比如网络断开,数据库操作异常SQLExeption 等

运行错
1 你的代码没有语法错误
2 你的某些错误,比如除以0,只有在运行的时候才可能发生
3 某些意外的发生,比如 空指针 nullpointerexception
[/Quote]
恩,,说的有道理。如果用ECLIPSE等编译环境,它会很好的检查你的语法错误。。
运行的错误最典型的是空异常。null
chenhongxin 2008-04-18
  • 打赏
  • 举报
回复
public class Test{
public static A a;
public static void main(String[] args){
try{
A.class.newInstance();
}catch(Exception e){}

//A aaa;
//aaa.hello();
a.hello();
}
}

class A{
static{
System.out.println("Load class A");
double x = 3.0;
double y = 0.0;
System.out.println(x/y);
}

public void hello(){
System.out.println("Hello");
}
}
Shine_Panda 2008-04-18
  • 打赏
  • 举报
回复
学习一下把。。。。。。。。
林g 2008-04-18
  • 打赏
  • 举报
回复
编译出错:假如你是在ide上开发的话,会给你错误竟高的,就是语法上的错误!比如说,某个类找不到阿,类型转换阿,之类的,这是由编译器来工作!

运行出错:是在程序跑的时候出错的,毕竟java是动态机制,所以有它来解决编译器没解决的错误,这是jvm来工作!
commanager 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
编译报错?
1 你的代码不符合java的书写要求,语法错误
2 你需要的类库没有找到
3 某些可以预见的错误你没有处理,比如网络断开,数据库操作异常SQLExeption 等

运行错
1 你的代码没有语法错误
2 你的某些错误,比如除以0,只有在运行的时候才可能发生
3 某些意外的发生,比如 空指针 nullpointerexception
[/Quote]
h273166784 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
编译报错?
1 你的代码不符合java的书写要求,语法错误
2 你需要的类库没有找到
3 某些可以预见的错误你没有处理,比如网络断开,数据库操作异常SQLExeption 等

运行错
1 你的代码没有语法错误
2 你的某些错误,比如除以0,只有在运行的时候才可能发生
3 某些意外的发生,比如 空指针 nullpointerexception
[/Quote]
pandengke 2008-04-17
  • 打赏
  • 举报
回复
顶5楼的和11楼的,学习中!
goodmrning 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 guofei_gf 的回复:]
引用 2 楼 java2000_net 的回复:
编译报错?
1 你的代码不符合java的书写要求,语法错误
2 你需要的类库没有找到
3 某些可以预见的错误你没有处理,比如网络断开,数据库操作异常SQLExeption 等

运行错
1 你的代码没有语法错误
2 你的某些错误,比如除以0,只有在运行的时候才可能发生
3 某些意外的发生,比如 空指针 nullpointerexception


运行时错误还有很多,比如数组越界等
[/Quote]
我们通常所写的异常程序是不是都属于运行时错误?
guofei_gf 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
编译报错?
1 你的代码不符合java的书写要求,语法错误
2 你需要的类库没有找到
3 某些可以预见的错误你没有处理,比如网络断开,数据库操作异常SQLExeption 等

运行错
1 你的代码没有语法错误
2 你的某些错误,比如除以0,只有在运行的时候才可能发生
3 某些意外的发生,比如 空指针 nullpointerexception
[/Quote]

运行时错误还有很多,比如数组越界等
For_suzhen 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Ant_Yan 的回复:]
火龙果前辈,Java中除以0只有一种情况下才会抛出异常哦

那就是int值除以int 0的时候,才会抛出异常

double值除以int 0
int或者double值除以double 0.0

都不会抛出异常的,或者是Infinity,或者NaN等等
[/Quote]
你说得很对,因为double只是无限接近0而已,不过你太较真了。呵呵,向你学习
For_suzhen 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
编译报错?
1 你的代码不符合java的书写要求,语法错误
2 你需要的类库没有找到
3 某些可以预见的错误你没有处理,比如网络断开,数据库操作异常SQLExeption 等

运行错
1 你的代码没有语法错误
2 你的某些错误,比如除以0,只有在运行的时候才可能发生
3 某些意外的发生,比如 空指针 nullpointerexception
[/Quote]
就是这么回事
Ant 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 anqini 的回复:]

这里貌似没有你说的这个人。。。
[/Quote]

看错了,是老紫竹,呵呵,丢人啊
anqini 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Ant_Yan 的回复:]
火龙果前辈,Java中除以0只有一种情况下才会抛出异常哦

那就是int值除以int 0的时候,才会抛出异常

double值除以int 0
int或者double值除以double 0.0

都不会抛出异常的,或者是Infinity,或者NaN等等
[/Quote]
这里貌似没有你说的这个人。。。
hmsuccess 2008-04-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
编译报错?
1 你的代码不符合java的书写要求,语法错误
2 你需要的类库没有找到
3 某些可以预见的错误你没有处理,比如网络断开,数据库操作异常SQLExeption 等

运行错
1 你的代码没有语法错误
2 你的某些错误,比如除以0,只有在运行的时候才可能发生
3 某些意外的发生,比如 空指针 nullpointerexception
[/Quote]
Cspider588 2008-04-17
  • 打赏
  • 举报
回复
编译期异常是指一些在代码里面不明确捕获就会编译出错的异常,比方说SQLException

而运行期异常是指只有在程序运行起来才会抛出的异常,比方说NullException,OutOfIndexException等
Ant 2008-04-17
  • 打赏
  • 举报
回复
火龙果前辈,Java中除以0只有一种情况下才会抛出异常哦

那就是int值除以int 0的时候,才会抛出异常

double值除以int 0
int或者double值除以double 0.0

都不会抛出异常的,或者是Infinity,或者NaN等等
anqini 2008-04-17
  • 打赏
  • 举报
回复
编译出错:假如你是在ide上开发的话,会给你错误竟高的,就是语法上的错误!比如说,某个类找不到阿,类型转换阿,之类的,这是由编译器来工作!

运行出错:是在程序跑的时候出错的,毕竟java是动态机制,所以有它来解决编译器没解决的错误,这是jvm来工作!
Ant 2008-04-17
  • 打赏
  • 举报
回复
Java语言是运行期绑定的,你定义的Class如果未被使用,即使编译过后运行期也不会被加载的

所以编译器报错多半只是检查语法而已,另外会预先存储字符串等字面量,以方便运行期间更快的调用
而运行期报错是真正用到了Class的方法时才会发生

举个简单的例子:

public class Test{
public static A a;
public static void main(String[] args){
try{
A.class.newInstance();
}catch(Exception e){}

//A aaa;
//aaa.hello();
a.hello();
}
}

class A{
static{
System.out.println("Load class A");
double x = 3.0;
double y = 0.0;
System.out.println(x/y);
}

public void hello(){
System.out.println("Hello");
}
}


建议在命令行用 java -verbose Test 来运行,可以清楚的看到JVM何时加载哪个类进来

编译期异常就是注释掉的两行如果恢复,会无法通过编译,因为编译器警告局部变量没有初始化
运行期异常就是程序正常跑起来之后由于a没有初始化,调用a的hello方法抛出的空指针异常

加了一个static块是想告诉你何时会初始化静态资源,真正实例化A的对象时才会初始化这个静态区域
老紫竹 2008-04-17
  • 打赏
  • 举报
回复
编译报错?
1 你的代码不符合java的书写要求,语法错误
2 你需要的类库没有找到
3 某些可以预见的错误你没有处理,比如网络断开,数据库操作异常SQLExeption 等

运行错
1 你的代码没有语法错误
2 你的某些错误,比如除以0,只有在运行的时候才可能发生
3 某些意外的发生,比如 空指针 nullpointerexception
「已注销」 2008-04-17
  • 打赏
  • 举报
回复
p.s : 就是如何区分 代码出错 是 编译出错 或者 发生异常

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧