Java-异常

Throwable:

  1. Error

  2. Exception

    1.RuntimeException

JVM如何处理异常:

main函数收到问题后,有两种方式:

  1. 自己将该问题处理,然后继续运行
  2. 自己没有针对的处理方法,只有交给调用main的jvm处理

jvm有一个默认的异常处理机制,就将该异常处理,就将该异常名称信息位置打印在控制台

世界上最真情的相依,是你在Try,我在Catch,无论你发什么脾气,我都默默接受处理

异常:

  1. 编译时异常:未雨绸缪,要提前想到可能会发生什么事
  2. 运行时异常:编译时不会报错,都是程序员犯的错误
    1. ArithmeticException
    2. ClassCastException
    3. ConcurrentModificationException
    4. IndexOutOfBoundException
    5. NullPointerException

throws:

  1. 如果抛出的是RuntimeException(运行时异常)及其子类,调用该方法的时候不用处理(抛不抛都一样)
  2. 如果抛出的不是RuntimeException(运行时异常)及其子类,调用方法必须处理

final:可以修饰类(不能被继承)、可以修饰方法(不能被重写)、可以修饰变量是常量(1.基本数据类型不能改变其值、2.引用数据类型不能改变其地址值但可以改变属性)

finally;写在try catch语句用于释放资源,用于关闭数据库,关闭流

finalize():是一个方法,在垃圾回收的时候调用

package day18;

public class Dk6Finally {

	//finally面试题
    //finally在return前执行
	public static void main(String[] args) {

		System.out.println(getNum());

	}
	public static int getNum() {
		int x = 10;
		try {
			x = 10/0;
			return x;        //try和catch里面都应该有return语句,如果try语句没有检测到问题
		} catch (Exception e) {      //不会进入catch,那么需要try里面写返回语句
			x = 20;
			return x;      //输出结果为20,因为执行catch时已经建立返回路径将20装进箱子,虽然finally将x=30,但返回路径没有变
		}finally {
			x = 30;
			System.out.println("执行finally");
			//finally可以写return语句,但是不要写,如果写了返回值就是30,因为会将前面的返回值覆盖掉
		}
	}

}

异常注意事项:

  1. 子类继承父类时,子类必须抛出和父类相同的异常或父类异常的子类(父亲坏了,儿子不能更坏)

    class Fu{
        public void print() throws FileNotFoundException{
            System.out.println("Fu");
        }
    }
    class Zi extends Fu{
        public void print() throws Exception{         //这句话出错,因为Exception是FileNotFoundException的父类
            System.out.println("Zi");
        }
    }
    
  2. 如果父类抛出了多个异常,子类重写父类时,只能抛出相同的异常,或者是它的子集,子类不能抛出父类没有的异常

  3. 如果被重写的方法父类没有异常抛出,那么子类的方法绝对不可以抛出异常,如果子类方法有异常发生,那么子类只能try,不能throws

try和throws区别:

  1. 后续程序需要继续运行就try
  2. 后续程序不需要继续运行就throws
package day18;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;

public class Dk7Test {

	//录入一个整数转换为二进制,输入过大整数有异常,有小数有异常,有其他字符有异常
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("请输入整数:");
		while(true) {
			String str = input.nextLine();//如果直接用int接收,当输入字符串就报异常
			try {
				int num = Integer.parseInt(str);     //将字符串转成整数
				System.out.println(Integer.toBinaryString(num));     //转化为二进制
			} catch (Exception e) {
				try {
					new BigInteger(str);         //输入整数过大
					System.out.println("输入整数过大");
				} catch (Exception e2) {
					try {
						new BigDecimal(str);       //输入小数,不可以放到BigInteger之前。因为BigDecimal可以接收过大整数和小数
						System.out.println("输入小数");
					} catch (Exception e3) {
						System.out.println("输入非法字符");
					}
				}
		
			}
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值