###java的异常分为两种:Error、Exception
*1.Error是错误。java异常处理程序是无奈的。例如jvm内存不足
*2.Exception 是异常。编程错误,或者偶然因素产生的问题,可以通过编程解决
###异常处理方法:1.遇到错误就终止 2.程序员编程是考虑了对应的异常情况。通过异常捕获来处理异常。
###我们处理的异常多数是运行时异常
###try-catch 异常处理 3个流程
*1.代码正确 正常执行-不会进入catch语句块
*2.代码异常 catch语句捕获到了对应的异常,那么执行catch语句块内容,不会造成程序中断,后续代码正常执行
*3.代码异常 catch语句未捕获到对应异常,那么不执行catch块,程序中断。
*4.如果我想保证捕获到异常我的异常类型可以写成所有异常的父类Exception
catch (Exception e)
###finally使用时,当函数含有return语句,也会执行finally中的内容,先执行finally中内容,在去return
###多重catch捕获时,注意将异常范围小的放前面,范围大的放后面
###throws异常分为2类,1类是RuntimeException的子类,跑出这类异常,jvm可以自动捕获,可以不写 try-catch
public void setAge(int age) throws IllegalAccessException
//调用时
student.setAge(-100);
###还有1类是非RuntimeException的子类,抛出这类异常,必须写try-catch
public void setAge(int age) throws FileInputStream
//调用时要捕获对应异常
try{student.setAge(-100);}catch(FileInputStream e){e.printStackTrace();}
###包装类的用途
*1.作为基本类型的对应的对象类型存在,方便设计到对象的操作。例如:存储到容器对象
*2.包含了基本类型的相关属性和方法,例如:最大、最小值,进制转化等等。
###自动拆装箱
//自动拆装箱
int m = 20;
Integer n4 = m; //自动装箱将基本类型装箱为包装类型
int m2 = 20+n4; // 自动拆箱将包装类型拆箱为基本类型
###throw和throws的区别和联系
*1.throws出现的位置是方法头部,throw写在方法体
*2.throws表示出现异常的可能性,并不一定发生这个异常,throw则是手动抛出异常,执行throw一定产生异常
*3.两者都是消极处理异常的方式(注意不是不好的方式),异常处理者为上层的调用处理
###内部类
*1.java中可以将类,定义在其他类的里面或者方法里面,形成了内部类
*2.成员内部类,局部内部类,静态内部类,匿名内部类。
###成员内部类
*创建内部类对象语法
Circle circle = new Circle(200);
Circle.Draw draw = circle.new Draw();
*外部类如果要访问成员内部类的成员,必须先创建一个成员内部类对象,在通过这个对象的引用来访问。
OutterClass outterClass = new OutterClass();
OutterClass.InnerClass innerClass = outterClass.new InnerClass();
System.out.println("outterclass.x ="+ outterClass.x);
System.out.println("innerclass.y ="+innerClass.y);
###局部内部类:定义在方法或者某个作用域的类,他和成员内部
###匿名内部类。我们需要内部建立一个对象,却不必给改类对象起名,这种累叫内部类
*匿名内部类在如下条件使用比较合适
*只用到类的一个实例
*类定义后马上用
*类非常小(10行代码以下)
*给类命名不会让你的代码更容易理解
###静态内部类:定义在另一个类中的类,只不过类前面多了一个修饰符 static
*静态成员内部类的
Outter.Inner inner = new Outter.Inner();
### .this .i
//成员
private double radias = 0;
private int i = 0;
public Circle(double radias){
this.radias = radias;
}
//成员内部类
class Draw{
int i = 10;
public void drawShape(){
int i = 100;
System.out.println("半径:"+radias);
System.out.println(i); //局部变量100
System.out.println(this.i); //成员变量10
System.out.println(Circle.this.i); //外部类的成员变量0
}
}
public static void main(String[] args) {
Circle circle = new Circle(200);
Circle.Draw draw = circle.new Draw();
draw.drawShape();
}