异常
1)Java中所有错误(Error)和异常(Exception)的超类是Throwable。
2)Java中的异常分为两大类:
a)CheckedException(非RuntimeException)。
b)Unchecked Exception(RuntimeException)。
3)Java中凡是继承自Exception而不是继承自RuntimeException的类都是非运行时异常。
4)对于非运行时异常(CheckedException),必须要对其进行处理,处理方式有两种:
a)使用try…catch…finally…进行捕获
b)在调用该会产生异常的方法所在的方法声明throwsException。
5)对于运行时异常(RuntimeException),推荐不对其进行处理。
抛出RuntimeException函数上可以不用声明,并且如果函数上有声明,调用者可以不用处理,编译一样通过。
6)常见RuntimeException:
ClassCastException,IndexOutOfBoundsExceptio
8)声明异常时,建议声明更为具体的异常,这样处理可以更具体。
10)try…catch…finally异常处理中,try块是必须的,catch块和finally块是可选的,一般finally块用于回收资源。
11)除非在try块、catch块中调用了退出虚拟机的方法(System.exit(参数)),否则在执行怎样的代码,出现怎样的情况,异常处理的finally块总会被执行。
12)在通常情况下,不要在finally块中使用如return或throw等导致方法终止的语句,否则会导致try块、catch块中的return、throw语句失效。
13) 异常在子父类覆盖中的体现:
a)子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
b)如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
c)如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常,就必须要进行try处理,绝对不能抛。
d)总结起来一句话:子类处理异常的方式不能超出父类处理异常的掌控范围。
15)try…catch中,如果出现多个catch,那么父类的异常应该放在子类异常的下面,否则编译失败。
内部类
1)内部类共分为4种:静态内部类,成员内部类,局部内部类,匿名内部类。
2)内部类可以直接访问外部类的成员(包括私有变量);外部类要想访问内部类则必须建立内部类对象。
3)静态内部类:只能访问外部类的静态成员变量和静态方法。生成静态内部类对象的方式为:
OuterClass.InnerClassinner=new OuterClass.InnerClass();
4)在静态内部类可以定义非静态方法,并且如果一个内部类定义了静态成员变量或者静态方法,那么这个类一定要声明为静态内部类。
5)成员内部类生成对象方式:
OutClass.InnerClassinner=new OutClass().new InnerClass();
6)若想在成员内部类中访问外部类的同名成员变量,语法为:OuterClass.this.a;
7)局部内部类定义在方法当中,可正常访问外部类中的成员变量,但只能访问方法中声明的final类型的变量。
8)匿名内部类:匿名内部类会隐式的继承一个父类或实现一个接口。
格式:new 父类 or 接口名()
9)匿名内部类适用于创建那些仅需要一次使用并且所需要实现的方法不多的类。
10)static关键字不可修饰外部类,但可以修饰内部类。