第11天----异常,包装类

昨天知识总结

  • 1.Object
    • equals
    • hashCode
    • toString
  • 2.内部类
    • 内部类的基础
    • 局部内部类
      静态内部类
    • 匿名内部类
    • 匿名内部类对象
  • 3.异常
    • 异常的定义
    • 异常的由来
    • 异常的分类
    • 异常的原理

异常

  • 常见的异常:
    • 异常的特点:当程序出现不正常情况的时候,程序回答因异常信息,程序中断,
    • 所以当同时出现多个异常的时候,只能执行一个;
    • 数组下标越界异常—ArrayIndexOutOfBoundsException
    • 空指针异常–NullPointerException

对异常的处理

创建异常类

class Math{
	public int div(int a,int b) {//2.继续向上抛出
		return a/b;//1.创建异常对象
	}
	
}
  • 1.向上抛,交给java虚拟机处理
public class Test {

	public static void main(String[] args) {
		Math math = new Math();
		//3.第一种:继续向上抛出,一直抛到虚拟机
	}
}
  • 2.对异常的处理:检查异常,捕获异常,让异常不影响下面代码的执行。
  • try{
  •   可能出现的异常代码
    
  • }catch(Exception e){//捕获异常 e就是捕获的异常
  •   对出现异常代码的处理
    
  • }
  • 继续执行后面的代码
public class Test {

	public static void main(String[] args) {
		int value = 0;
		try {
			value = math.div(3,0);
			//只要try内部的代码发成异常,catch会立即捕获异常,这里的代码不会执行,
			//只有try内部的代码没有发生异常,这里才会执行,但是catch不会再执行;
			System.out.println("执行");
		}catch(ArithmeticException e) {// e = ArithmeticException()  捕获异常:让当前引用指向异常对象
			//e.printStackTrace();//打印方法--异常的原因,位置和名字
			//System.out.println(e.getMessage());//异常的原因
			//System.out.println(e.toString());//异常的原意和名字
			//处理异常的代码
		}
		System.out.println("go on");
	}
	
}
  • try{
  •  可能出现的异常代码
    
  • }catch(Exception e){//捕获异常 e就是捕获的异常
  •  对出现异常代码的处理
    
  • }catch(异常二 e){//捕获异常 e就是捕获的异常
  •  对出现异常代码的处理
    
  • }catch(异常三 e){//捕获异常 e就是捕获的异常
  •  对出现异常代码的处理
    
  • }
  • 继续执行程序
  • try{
  •  资源的获取
    
  • }finally{
  • 资源的释放
  •  必须执行的代码:用于资源的释放,流的释放,数据库的关闭等
    
  • }
  • 继续执行代码

自定义异常

  • 自定义异常:自己定义的异常类。由于Exception里面有异常的基本功能,一般我们都写他的子类
  • 为什么要有自定义异常类:
    • 答:系统没有定义好的异常,需要我们自己定义,我们解决的是系统没有解决的问题
    • 举例:订单异常,除数为负数异常,用户登录异常,账户异常
  • 异常的分类:
    • 编译异常:在编译阶段抛出,处理异常—除RuntimeException之外都是编译异常
    • 和异常相关的所有工作都要由我们自己来做
  • 运行时异常:在运行阶段抛出,处理异常—RuntimeException
    • 所有的功能系统完成,我们什么都不需要做。
  • 异常的处理方式:
    • 第一种:异常的声明; throw throws
      • 异常声明后,调用者去处理,调用者不处理,继续声明直到交给JVM
      • 在异常声明的时候,一次可以声明多个异常,使用逗号隔开即可
  • 第二种:trycatch
  • 让谁去处理异常比较合适?
  • 谁调用可能发生异常的方法,谁对异常进行处理,
public class Demo6 {
	public static void main(String[] args)//throws FuShuException 
	{
		Math3 math3 = new Math3();
		/*
		 * 两种
		 * 继续声明
		 * //math3.div(3, -2);
		 * 
		 * 2.trycatch
		 */
		try {
			math3.div(3, -2);
		} catch (FuShuException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		System.out.println("go on");
	}
}
//自己创建异常类,继承Exception
class FuShuException extends Exception{
	public FuShuException() {
		
	}
	//新建一个参数为String message的构造方法,当出错时,传入的是什么,报错时输出的就是什么
	public FuShuException(String message) {
		super(message);
	}
}
class Math3{	
	public int div(int a,int b)throws FuShuException {
		/*
		 * 模拟除数为负数出现的情况
		 * 对于自定义异常,有关的异常的抛出,生成,处理都需要我们自己做
		 * throw:抛出
		 * throws:声明的意思
		 */
		if(b < 0) {
			throw new FuShuException("除数为负数了");//创建异常并抛出
		}
		return a/b;//1.创建异常对象
	}
}

包装类

简单数据类型包装类
byteByte
shortShort
intInteger
floatFloat
doubleDouble
charCharter
booleanBoolean

包装类常用方法

public class Test {
	public static void main(String[] args) {
//		 基本类型转成字符串类型
//		static String Integer.toString(int i)
		String str1 = Integer.toString(12);	
		System.out.println(str1+2);
//		   static String Double.toString(double d)
//		      字符串类型转基本类型
//		   int     Integer.parseInt("23")
		System.out.println(Integer.parseInt("12")+2);
//		   //注意当使用字符串转简单数局类型是,必须保证字符串是数值型的字符串,否则报异常:NumberFormatException
//			double  Double.parseDouble("3.45")
//
//			把十进制转成其它进制
//		  Integer.toHexString()--转成十六进制
		  System.out.println(Integer.toHexString(17));
//		  Integer.toOctalString()---转成八进制
		  System.out.println(Integer.toOctalString(17));
//		  Integer.toBinaryString()----转成二进制
		  System.out.println(Integer.toBinaryString(17));
//
//			把其它进制转十进制----数据是以字符串的形式出现
//		 	Integer.parseInt(数据,进制)
		  System.out.println(Integer.parseInt("11",16));
	}
	

}

拆装箱

  • 装箱:将简单数据类型使用包装类对象进行封装
  • 拆箱:从包装类对象中取出简单数据类型的过程
public class Test {
	public static void main(String[] args) {
		//装箱
		int a = 4;
		Integer integer1 = new Integer(a);
		//拆箱
		int a1 = integer1.intValue();
		float f1 = integer1.floatValue();
		System.out.println(a1);
		
		
		//从jdk1.5开始进行自动的拆箱装箱
		Integer integer2 = new Integer(3);
		Integer integer3 = integer2+4;//原理:1.现将integer2进行自动拆箱得到3,然后与4进行运算,得到7,在进行自动封装
		System.out.println(integer3);//重写toString方法
		
		
		//注意点
		//在一个字节范围内,前边定义好的,后面直接拿来使用
		Integer integer4 = 100;
		Integer integer5 = 100;
		System.out.println(integer4 == integer5);//true
		
		Long long1 = new Long(100);
		Long long2 = new Long(100);
		System.out.println(long1 == long2);
		//如果超出了一个字节的范围就被认为是两个类,要独立占用两块儿空间
		integer4 = 1000;
		integer5 = 1000;
		System.out.println(integer4 == integer5);//false
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值