2012-08-26 36 views
15

Đây là câu hỏi tiếp theo của Why is this exception is not printed? Why it's showing an error?

Ở đây trong mã dưới đây tại sao Ngoại lệ số học không được kích hoạt?Tại sao ngoại lệ không được kích hoạt ở đây?

class Exp 
{ 
    public static void main(String args[]) 
    { 
     float d,a=1; 
     try 
     { 
      d=0; 
      a=44/d; //no exception triggered here.. why? 
      System.out.print("Its not gonna printed a="+a); 
     } 
     catch(ArithmeticException e) 
     { 
      System.out.println("Print exception"+e); 
     } 
    } 
} 

Thay vì đầu ra xuất phát như sau:

Its not gonna printed a=Infinity 

những gì sẽ xảy ra?

Trả lời

27

Phân chia bằng 0 sẽ ném ngoại lệ cho giá trị số nguyên, nhưng không phải cho giá trị thả nổi. Đây được xác định trong JLS #15.17.2:

Kết quả của một bộ phận dấu chấm động được xác định bởi các quy tắc của IEEE 754 số học:
[...]

  • phận của một giá trị hữu hạn khác không bởi một kết quả bằng không trong một vô hạn đã ký. Ký hiệu được xác định theo quy tắc nêu trên.

Nếu bạn thay đổi kiểu của ad để int, bạn sẽ nhận được một ngoại lệ.

7

Divide by zero áp dụng cho số nguyên và không nổi theo JLS

và bạn sẽ nhận được kết quả như

Its not gonna printed a=Infinity 

vì đây được tính như Infinity

Và trong trường hợp bạn muốn xem ngoại lệ chỉ cần thay đổi

a=44/d; 

này

a=44/0; 
Các vấn đề liên quan