昨天知识总结
- 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
- 在异常声明的时候,一次可以声明多个异常,使用逗号隔开即可
- 第一种:异常的声明; throw throws
- 第二种: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.创建异常对象
}
}
包装类
简单数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
float | Float |
double | Double |
char | Charter |
boolean | Boolean |
包装类常用方法
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
}
}