Java基础
面向对象
内部类
-
定义在类中的类;
public class Student{ String name; int score; Birth birth; //定义内部类 class Birth{ int year; int month; int day; } } //当类只提供给一个类使用时,就可以考虑定义为内部类;
-
内部类相当与当前类的成员,可以访问当前类的private成员,也可以被private修饰;
匿名内部类
-
由一个没有名字的内部类生成的对象;
- 在栈上分配了父类/父接口的引用对象;
- 创建了一个没有名字的类;
- 这个类继承/实现了NEW后面的对象;
- 重写/实现了类/接口的方法;
- 创建了匿名内部类对象;
- 父类型引用指向了子类型的空间;
public class A{ int a; public void fun(){ System.out.println(a); } } public class B{ int b; A a; public B(int b, A a){ this.b = b; //匿名内部类对象 this.a = new A(){ public void fun(){ super.fun(); System.out.println("sub a"); } }; } }//通过内部类生成的对象只有一个时,考虑使用匿名内部类对象。
异常机制
- 由于编程错误或者偶然的外界因素,导致程序在运行过程中所发生的异常;
- 异常会中断指令,程序被强制退出;
NullPointerException | 空指针异常 |
---|---|
ArrayIndexOutOfBoundsException | 数组越界异常 |
NumberFormatException | 数字格式化异常 |
NegetiveArraySizeException | 数组长度不合法 |
ClassCastException | 类型转换异常 |
异常抛出
-
一个方法不处理这个异常,而是调用层次向上传递,谁调用这个方法,这个异常就由谁来处理;
-
throw : 将产生的异常抛出(强调的是动作),抛出的既可以是异常的引用,也可以是异常对象。(位置: 方法体内);当异常抛出后,程序停止运行;
public void sellBook() throws NotBookException { if(true) { /* * 抛出异常对象 * 当代码抛出异常后代码终止运行 * */ throw new NotBookException(); } //throws就是一个不负责任的自私鬼,当遇到异常的时候只会往外抛,抛给它的上一级,自己不去处理。
异常捕获
- 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。
- Java异常机制用到的几个关键字:try、catch、finally。
try{
//可能抛出异常的语句
}catch(Exception //根据Exception捕获相应的异常){
//捕获异常,输出异常信息
}catch(Exception | Exception //多个异常时,中间用|分隔){
//可多个catch语句,但异常子类一定要在异常父类前面
}finally{
//无论有没有抛出异常,都会执行,通常用来清理资源,例如关闭socket,关闭流,关闭数据库连接等等
}
- 当异常捕获时,程序不再终止项目;