1.Object类
所有类的超类。
equals()方法——检测两个对象是否相同
toString()方法——返回对象的字符串表示(宜复写)
getClass()方法——得到该对象所属类的名称
2.内部类
1)方便访问外部类的成员变量,包括私有成员变量。
2)内部类函数访问外部类成员变量——外部类名.this.变量名;
3)内部类可以被private修饰,则不能被其他外部类访问。
4)非私有的内部类,可以被其他外部类访问 eg. Outer.Inner a = new Outer().Inner()
静态内部类——static修饰
访问静态内部类非静态成员new Outer.Inner().function()
访问静态内部类静态成员 Outer.Inner.function()
非静态内部类不能有静态成员。
局部内部类(在方法里的内部类):
1)不可以被成员修饰符修饰
2)可以访问外部类成员,但不能访问所在局部的变量,除非该变量被final修饰。
匿名内部类——其实就是为了简写,直接省去类定义,生成并使用一个没有名称的对象。
1)匿名的内部类必须有继承或者是实现。
2)格式:new 父类(接口名)(){定义子类内容}
3)创建的匿名对象可以只用一次,也可以导入一个对象变量多次使用,但多次使用涉及到多态,只能使用父类或接口中定义的内容。
3.异常(Exception)
1)定义:程序运行时出现的不正常情况,在可以处理的范围内。(不可处理则是Error)
Throwable : Error;Exception.
异常的分类:Runtime异常——程序错误导致的异常(不用声明,也无需处理,想抛出就抛出即可,好东西啊!)
其他异常——程序无问题,其他原因导致的异常,
2)异常的声明——throws关键字
如果程序本身没有问题,那数据本身就不会发生问题,只有数据变化过程中才会产生问题,也就是说——非Runtime异常只会发生在方法中(构造器和一般方法)。
当一个方法可能产生异常时,需要将这些异常声明在方法定义中。
自定义异常:
自定义一个继承Exception的类,利用代码实现在希望跳出异常的地方,运用throw关键字手动抛出自定义异常的对象。
格式:
throws在函数上,抛出异常类,多个异常类用逗号隔开。class AaException extends Exception { } class Test { ...... void function() throws AaException { ...... if(判断语句) throw AaException ...... } }
throw在函数内,抛出异常对象。
3)声明了异常后,有两种解决办法:
(1)、可在调用时直接进行手动处理,也就是try-catch流程。
(2)、也可以继续抛出异常,也就是在调用这个方法的上一级方法继续声明抛出。(这种向上抛出如果不断进行,最后会到达main函数,main函数继续抛出就抛给了虚拟机,让虚拟机自动处理)
异常的手动处理:
格式:
try { 需要被检测的代码,发现异常则进入catch; } catch(异常类 变量) { 处理异常的代码(提供各种异常信息); } finally { 一定执行的语句,通常用于关闭资源;(如果catch里执行了System.exit(0),则finally不被执行。) }
catch块和finally块至少存在其一;
catch块可以有多块;
多个catch块的时候,父类的catch放在下面。
4)覆盖时的异常特点
子类覆盖父类时,所覆盖的方法如果有异常,则子类的异常最好为父类的异常的子集和子异常。
除非子类方法直接进行处理,不进行抛出。