void m(int i) throws ArithmeticException {
if(0==i) {
throw new ArithmeticException("除0异常 1th");
}
}
public class Test {
public static void main(String[] args) {
try {
Test t = new Test();
t.m(0);
}
catch (Exception e) {
System.out.println("除0异常 2th");
}
}
}
int i = 1;
int k = 0;
int m = i/k;
String s = null;
int l = s.length();
Object o = new Object();
String s = (String)o;
int l = s.length();
int len = -1;
int[] a = new int[len];
a[0] = 0;
int len = 10;
int[] a = new int[len];
a[10] = 10;
FileInputStream in = null;
try {
in = new FileInputStream("myfile.txt");
int b = 0;
b = in.read();
while(-1 != b) {
System.out.print((char)b);
b = in.rasd();
}
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
System.out.println(e.getMessage());
}
finally {
try {
in.clsoe();
}
catch (IOException e) {
e.printStackTrace();
}
}
public void someMethod() throws someExpresion {
if(someCondition()) {
throw new someExpresion("错误原因"); // 然后在某种情况下抛出这种异常
}
}
try {
someMethod(); // 调用该方法时试图捕获异常
}
catch(someExpresion e) {
// 异常处理代码
}
** Tips:
2.throw new someExpresion("错误原因"); 表示的是手动抛出异常。 **
public class Test {
public static void main(String[] args) {
Test t = new Test();
try {
t.method1();
} catch (someException e) {
e.printStackTrace();
}
}
public void method1() throws someException {
method2();
}
public void method2() throws someException {
method3();
}
public void method3() throws someException {
throw new someException("someException occur in method3.");
}
}
注意
public class Test {
public static void pro(String s) {
if(s != null) {
System.out.println(s);
}
else {
throw new NullPointerException("Ooops!, s is null.");
}
System.out.println("End");
}
public static void main(String[] args) {
try {
pro("Hello Java");
pro(null);
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
/*
打印结果:
Hello Java
End
Ooops!, s is null.
*/
catch (NullPointerException e) {
System.out.println("NullPointerException");
}
catch (Exception e) {
System.out.println(e.getMessage());
}
使用自定义异常一般有如下步骤:
class MyException extends Exception {
private int id;
public MyException(String message, int id) {
super(message);
this.id = id;
}
public int getId() {
return id;
}
}
public class Test {
public void regist(int num) throws MyException {
if(num < 0) {
throw new MyException("人数为负。", 3);
}
System.out.println("登记人数:" + num);
}
public void manager() {
try {
regist(100);
}
catch (MyException e) {
System.out.println("登记失败,出错类型码:" + e.getId());
e.printStackTrace();
}
System.out.println("操作结束");
}
public static void main(String[] args) {
Test t = new Test();
t.manager();
}
}
重写方法需要抛出与原方法所抛出异常类型一致的异常或不抛出异常。
例如:
class A {
public void method() throws IOException {...}
}
class B1 extends A {
public void method() throws FileNotFoundException {...} // 范围小了,错误
}
class B2 extends A {
public void method() throws Exception {...} // 范围大了,错误
}
class B3 extends A {
public void method() {...} // 正确
}
class B3 extends A {
public void method() throws IOException, MyException{...} // 错误
}