啃书出处
Java的API:《Head first Java》Ch 6
继承与多态:《Head first Java》Ch 7
异常处理:《Java语言程序设计》Ch 13
接口与抽象类:《Head first Java》Ch 8
构造器与垃圾收集器:《Head first Java》Ch 9
数字与静态:《Head first Java》Ch 10
P.S.:再次强调head first有点啰嗦,不太精简(看得困),但是可以用来复习or入门。
Java的API
- API是什么
Application Programming Interface,应用程序编程接口,里面有预先定义的函数 - ArrayList和array的比较
array需要在创建时确定大小, ArrayList不需要
int[] array = new int[10];
ArrayList<Integer> arrLst = new ArrayList<Integer>();
存放对象给array时必须指定位置
array[0] = 1;
arrList.add(1);
array使用特殊的语法,但ArrayList是普通对象
ArrayList是参数化的,array不是
3. 使用API
java.util.ArrayList
java.util:包名
ArrayList:类名
继承与多态
(《Java语言程序设计》差不多都cover了,《Head first Java》内容差不多,但更生动)
- is-a关系
- private成员不会被继承(说法1是不会被继承;说法2是实际上继承过来了,但是因为是private所以访问不了,《Head first Java》站说法1。)
- 继承下来的方法可以被覆盖掉,但实例变量不能
- 继承的作用:避免重复代码;定义出共同的协议(继承让你可以确保某个父类之下的所有类都会拥有父类所持的所有方法)
- 多态:父类引用既可以指向父类对象也可以指向子类对象
- 参数和返回类型也可以多态(见多态的常用例子)
异常处理
- error和exception的区别(以前写过)
Apr 1 2020总结 - throws和throw的区别
//throws表示调用f方法时可能会抛出A异常,最好对可能抛出的A异常进行捕捉。
void f() throws A
//throw用来抛出异常,抛出的异常要是Throwable的子类。处理方法:throws或try-catch
throw new 异常名("message");
- 为什么要有exception
因为有的代码不能用if-else处理。如果输入不合法数字会触发InputMismatchException。
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
System.out.println(i);
}
- 免检异常(unchecked)和必检(checked)异常的区别
免检异常:是Runtime Exception或是Runtime Exception的子类(也包含Error)
必检异常:其他
免检可处理可不处理,必检必须处理 - 为什么要有finally
为程序做一个统一的出口、对上面的内容进行管理、资源的清除工作 - 自定义异常
注意继承Exception,而不是Error,否则有可能会成unchecked。
class DividorIsZeroException extends Exception{//必须写Exception
public DividorIsZeroException(String name){//定义构造方法
super(name);
}
}
接口与抽象类(只做补充)
- 抽象类除了被继承之外,是没有用途、没有值、没有目的。
- Object是所有类的源头,是所有类的父类。
- 多继承引发致命方块的问题。
构造器与垃圾收集器(只做补充)
- 栈(stack)里存放方法调用和局部变量;堆(heap)里放所有对象,实例变量存在于所属的对象中。
- 当你调用一个方法时,该方法会放在调用栈的栈顶。栈顶的方法时目前正在执行的方法。
- 实例变量保存在所属的对象中,位于堆上。
- 每个父类都有一个构造函数,且每个构造函数都会在子类对象创建时执行。(自动调用super();)
- 对象的生命周期
局部变量只会存货在声明该变量的方法中
实例变量的寿命与对象相同(≈共生共死) - 引用变量的生命周期(当最后一个引用消失,对象就可被回收)
引用永久性离开它的范围,eg:方法结束
引用被赋值到其他对象上
引用设定为null
数字与静态(只做补充)
- 静态方法可直接通过类名访问
- 静态方法里无法看到实例变量的状态(static成员不能用非static成员,因为非static需要被初始化=不需要堆上的实例)
- 静态变量的功能:共享
被同类的所有实例共享 - final变量:常数
public:各方可读取
static:不需要实例
final:不变的 - final=不能改变value、不能覆盖method、不能继承class
- 自动装箱与拆箱
装箱:自动将基本数据类型转换成包装器类型
拆箱:自动将包装器类型转换成基本数据类型
public static void main(String[] args){
//自动装箱: Integer i = Integer.valueOf(1);
Integer i = 1;
//自动拆箱: int j = i.intValue();
int j = i;
}
参考原博:【JAVA】谈谈拆箱与装箱