例如:
公有(public)成员内部类,类外部可以访问私有成员内部类,类外部不可以访问 Outer1 oc=new Outer1(); Outer1.MemberInner mi1= oc.new MemberInner();需要先new一个外部类对象,借助外部类对象new 公有成员内部类对象,就可以调用公有成员内部类的成员方法、成员变量
*原因: 因为方法的局部变量位于栈上,只存在于该方法的生命周期内。当一个方法结束,其栈结构被删除,局部变量称为历史。但该方法结束后,在方法内创啊建的内部类对象可能仍然存在于堆中,这样内部类对象就无法调用局部变量了,所以它只能访问方法体内的常量
注意:
静态内部类只能访问外部类的静态方法和静态变量静态内部类中可以定义静态或者非静态的成员分析: 从技术上说,静态嵌套类不属于内部类。因为成员内部类与外部类共享一种特殊关系,对实例的共享关系,而静态嵌套类则没有上述关系,它只是位置在另一个类的内部,因此又称为顶级嵌套类
使用匿名内部类情况:
只用到类的一个实例类在定义后立即用到类非常小(4行一下)不好取类名声明格式: new 父类类名|接口名(){ //重写方法}; 匿名内部类必须在new的后面,用其隐含实现一个接口或实现一个抽象类或继承一个普通类
代码位置:出现引用变量声明时
使用方法: * 声明完即生成对象,由声明时的引用变量持有。 * 无法二次生成对象; * 不能定义任何静态成员,静态方法; * 不能是public/protected/private; * 不能有构造方法程序的错误分为三类:语法错误、逻辑错误、运行错误 运行错误是指程序运行过程出现的错误,分为Error和Exception。
Exception通过完善程序代码消除,Error则是程序无能为力的错误,如磁盘空间不足,内存溢出等 在java中,异常作为一个特殊对象,它的类型格式Excetion及其子类,用户可通过对Exception的继承创建自己的异常类型
Throwable类是所有异常和错误的超类,它有两个子类Error和Exception
异常类类Exception 1、运行时异常 2、非运行时异常
运行时异常 RuntimeException类及其子类ArithmeticException(除数为0)、NullPointerException(文件不存在)、IndexOutOfBoundsException(数组下标出界)等非运行时异常 Exception类及其子类IOException、SQLException
Throwable类方法
Throwable(String message) 以message的内容作为错误信息串创建Throwable对象 String getMessage() 若当前对象包含错误信息,本方法返回的字符串由三部分组成:当前对象的类名、一个冒号和一个空格、错误信息的字符串若当前对象不包含,则返回当前对象的类名 String toString() 若当前对象包含错误信息,本方法返回的字符串由三部分组成:当前对象的类名、一个冒号和一个空格、错误信息的字符串若当前对象不包含,则返回当前对象的类名 Void printStackTrace() 将跟踪栈中的信息输出
*java的异常处理主要包括:
1、声明异常declaring exception 2、抛出异常 throwing exception 3、捕获异常 catching exception
try语句块:
表示要尝试运行的代码,若代码出现异常则抛出异常对象 catch语句块: 当try抛出异常时,catch会捕获发生的异常,并和自己的异常类型匹配,若匹配则执行catch块中代码,并将catch参数指向所抛的异常对象。catch语句可以有多个,用来匹配try可能出现的多个异常中的一个异常,一旦匹配成功后,就不在尝试匹配别的catch块,因此,在写catch块时,要先写子类异常,再写父类异常,因为自动向上转型的存在,先写父类异常则下面子类异常代码块称为“unreachable codes”无法·访问的代码 finally语句块: 最终一定会执行
被动处理异常–关键字throws
在方法的头部声明异常,一个方法可同时声明多个异常,各异常类之间用逗号隔开。 主动处理异常 Try,catch,finally 被动处理异常异常 即在它的方法声明处增加throws,将方法内没有处理的Exception继续上抛给它的调用者,最后直至JVM,由JVM将异常堆栈打印出来 声明异常指的是Java中的每个方法对他可能抛出的必检异常类型进行声明,但对免检异常Error和RuntimeException及其子类不要求在方法中显式地声明
异常主动抛出
Java中的异常在方法调用时,可以形成异常链。如果方法A调用方法B,方法B又调用了方法C,若方法C声明了必检异常,则方法B在调用方法C时,必须对该异常进行处理, 处理方式1:在方法B中用try-catch代码块捕获并处理 处理方式2:不做任何处理继续把异常抛给它的调用者A A也可把该异常抛给它的调用者main方法,从而想成异常链
自定义异常
class 异常类名 extends Exception{ public 异常类名(String msg){ super(msg); } }