完成任务
1.内部类的相关知识
2.异常
收获
内部类
可以直接访问外部类中的成员,包括私有
- 之所以可以直接访问外部类成员,是因为内部类持有了一个外部类的引用,外部类名。this
- 外部类想访问内部类,必须建立内部类对象
- 访问格式
- 1,内部类定义在外部类的成员位置上,可以被成员修饰符修饰
比如:static 被static修饰的类,只能直接访问外部类中的static成员
在外部其他类中,如何直接访问static内部类的非静态成员
- new Outer.Inner().function();
- 在外部其他类中,如何直接访问static内部类的静态成员
Outer.Inner.function();
注意 :当内部类中定义了静态成员,内部类必须是static
当外部类的静态方法访问内部类时,内部类也必须是static
匿名内部类
- 1.匿名内部类其实就是内部类的简写
- 2.定义匿名内部类的前提
- 内部类必须是继承一个类或者实现接口
- 3.匿名内部不累的格式
- new 一个父类或者接口(){(定义子类的内容)}
- 4.其实匿名内部类就是一个匿名子类对象,而且这个对象有点胖,可以理解为带内容的对象
- 5.匿名内部类中定义的方法最多不超过2个
局部内部类
public class Outer2 {
int x = 3;
//局部内部类不能定义成static
void method(final int a){
//可以直接访问外部类的成员,应为还持有外部类中的引用
//但是不可以访问他所在的局部中的变量,只能访问被final修饰的局部变量
final int y = 100;
class Inner{
void function(){
System.out.println(a);
}
}
new Inner().function();
}
}
异常
- 异常,就是程序运行时出现的不正常情况
异常的由来;问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述
对于问题的划分1.严重的问题:java通过error类进行描述
2.不严重的:通过Exception类进行描述(对于exception可以使用针对性 的处理方式进行处理)
无论error或者Exception共性
Throwable
- |–Error
|–Exception
*2.异常的处理
*java提供了特有的语句
*try{- 需要被检测的代码
*
*}catch(异常类 变量){ - 处理异常的代码(处理方式)
*
*}finally{ - 一代你会执行的语句
*
*}
*
* - 3.对捕获到的异常对象进行常见方法操作
- String getMessage
对多异常的处理
- 1.声明异常时建议声明具体的异常
- 2.对方有几个异常,就对应有几个catch块
如果多个catch块中的异常出现继承关系,父类放在最下面
建议在进行catch处理时catch中一定要定义具体具体处理方式
- 不要只写e.printStackTrace();
- 不要简单的就书写一条输出语句
- 因为项目中会出现特有的问题
- 而这些问题病危被java所描述并封装对象
- 所以对这些特有的问题可以按照java的对问题封装思想
- 将特有的问题提,进行自定义的异常封装
自定义异常
需求:在本程序中对出书位负数也视为错误的也无法进行运算
那么就需要对这个问题对自定义描述
当函数内部出项了throw抛出异常对象,那么就必须要给对应的处理动作
- 要么在内部trycatch处理
要么在函数上声明让调用者处理
一般情况在,函数内出现异常,函数上需要声明
发现打印的结果中只有异常的名称,却没有异常的信息
因为自定义的异常并未定义信息
自定义异常
必须是自定义类继承Exception。
继承Execption原因
异常体系有一个特点
- 异常类和异常对象都具有可抛性
这个可抛性是Throwable体系中都有特点
只有这个体系中的类和对象
才可以给throw和throws操作
throws和throw的区别
函数上 函数内
throws 后面跟异常类可以多个
RuntimeException
.RuntimeException的子类在函数里抛出
* 函数上不需要声明
* 编译一样通过
*
* 如果在函数上声明了该异常。调用者可以不用进行处理,编译一样通过
*
* 之所以不用声明
* 因为不需要调用者处理
* 希望停止,运行时没出现了无法继续运算的情况
* 希望停止后,对代码进行修正
*
*
* 自定义异常时:如果该异常的发生,无法在继续进行运算
* 就让自定义异常继承RuntimeException
*
* 对于异常分两种
* 1.编译时被检测的异常
* 2.编译时不被检测的异常;运行时异常runtimeException