Java学习记录-6(异常)

1. 简述Java Error类与Exception类的区别。

  • Error不是程序需要捕获和进行处理的
  • 例如OutOfMemoryError(当Java虚拟机在为对象分配内存空间时,剩余的空间不够,同时也没有可以释放的内容时,将会发生这样的错误)不由程序进行捕获或处理,当Error发生时,程序将会停止。

2. 简述异常处理的两种方式,并举例说明区别。

  • 声明抛出处理
  1. 隐式声明抛出
    异常类型是RuntimeException或是其子类,程序方法可以对异常不作任何声明抛出或处理,直接交给调用该方法的地方处理,程序能编译通过,不会对可能产生异常的代码行给出提示
public class TestArray {
	private static int[] x;
	public  static void main(String[] args){
		System.out.println(x[0]);
	}
}

运行结果:
Exception in thread “main” java.lang.NullPointerException
at TestArray.main(TestArray.java:4)

  1. 显式声明抛出
    在这里插入图片描述
    只需将方法进行如下改动就实现了显示声明抛出:
    public static void main(String args[])修改为
    public static void main(String args[]) throws IOException
    如果main中readLine()方法处发生异常,main不负责异常处理,由调用main方法的地方去处理异常,而调用main方法的是Java虚拟机,因此由Java虚拟机进行默认处理。
  • 程序捕获处理
    以上程序按如下方式修改就是捕获处理在这里插入图片描述
    当readLine发生输入异常的时候(注意此处有可能发生异常,而不是一定能发生异常),产生的异常对象将赋值给catch块中的参数e。此后可对e进行操作,例如通过e.printStackTrace()输出异常信息。

3. 选取RuntimeException类的五个子类,编写抛出并捕获上述子类异常的程序。

  • 算数异常
public class ExampleException {
   public static void main(String[] args) {
       int a,b,c;
       a=67; b=0;
       c=a/b;
       System.out.println(a+"/"+b+"="+c);
   }
}

运行结果:
Exception in thread “main” java.lang.ArithmeticException: / by zero
at ExampleException.main(ExampleException.java:5)

  • 空栈异常
import java.util.*;
class TestEmptyStack {
	public static void main(String[] args){
		Stack st = new Stack();
		Object ob = st.pop();  
	}
}

运行结果:
Exception in thread “main” java.util.EmptyStackException
at java.util.Stack.peek(Unknown Source)
at java.util.Stack.pop(Unknown Source)
at TestEmptyStack.main(TestEmptyStack.java:5)

  • 空指针异常
public class TestArray {
	private static int[] x;
	public  static void main(String[] args){
		System.out.println(x[0]);
	}
}

运行结果:
Exception in thread “main” java.lang.NullPointerException
at TestArray.main(TestArray.java:4)

  • 类型转换异常
public static void main(String[] args) {
// 类型强制转换异常
	Object x = new String(“String”);
	System.out.println((Integer) x);
}

运行结果:
Exception in thread “main” java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at cn.com.gjw.MyClass.main(MyClass.java:7)

  • 数组越界异常
public class TestArgs {
	public static void main( String[] args) {
		String foo = args[1]; 
		System.out.println("foo = " + foo);
	}
}

运行结果:
Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 1
at TestArgs.main(TestArgs.java:3)

4. 自定义一个异常类,并在某场景下抛出该异常对象。

public class SelfGenerateException extends Exception{
   SelfGenerateException(String msg){
       super(msg);   //调用Exception的构造方法
   }
   static void throwOne() throws SelfGenerateException{
      int a = 1;
      if (a==1){
       //如果a为1就认为在特定应用下存在异常,改变执行路径,抛出异常
       throw new SelfGenerateException("a为1");
      }
   }

   public static void main(String args[]){
    try{
       throwOne();
    }
    catch(SelfGenerateException e){
      e.printStackTrace();
    }
  }
}

运行结果:
SelfGenerateException: a为1
at SelfGenerateException.throwOne(SelfGenerateException.java:9)
at SelfGenerateException.main(SelfGenerateException.java:13)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值