一些乱七八糟的总结
public访问权限:接口访问权限,任何都可以访问
protected访问权限:继承访问权限,任何子类可以访问,包内可以访问
默认访问权限:包访问权限,包内可以访问
private访问权限:私有访问权限,只有自己可以访问、
一个既是 static又是 final 的域值占据一段不能改变的存储空间
在java的早期实现中,如果将方法声明为 final 就是同意编译器针对对该方法的所有调用都转为内嵌调用,这样将消除方法调用的开销,可以提升性能,但是当方法很大,程序代码会很膨胀,因而可能看不到内嵌带来的任何性能提升。现在java版本,虚拟机能探测到这样的情况并优化去掉这些效率反而降低的额外的内嵌调用,*所以现在不需要使用final方法进行优化了。
在main方法调用前会先进性静态变量的初始化,如果有继承那么先加载父类的静态变量然后再加载派生类的静态变量。
多态是后期绑定,想想向上转型。
Java中除了 static 方法和 final 方法 ( private 属于 final 方法),其他所有的方法都是后期绑定。所以这两个特殊的方法不具有多态性。
如果为一个类创建了dispose清理方法,然后我们继承了这个类,所以我们需要在导出类中覆盖dispose方法并且调用基类的dispose方法。
基类初始化 -> 基类构造 -> 导出类初始化 -> 导出类构造
销毁的顺序和初始化的顺序相反
用继承表达行为间的差异,并用字段表达状态上的变化
应尽量避免在不同接口中使用相同的方法名
当放入接口中的任何域都自动是 static 和 final 的
匿名类内部只能使用 final, 匿名类没有命名构造器
将内部类声明为 static 它只能访问外围的 static 类型的变量方法等
可以使用嵌套类测试main、方法,这样可以避免需要编译所有代码。
可以使用内部类实现接口从而代替外部类同时实现多个接口
继承内部类的时候需要先进行外部类的实例化
内部类不会被覆盖 不同类的内部类是完全两个不同的个体
TreeSet将元素存储在红黑树,而HashSet是散列函数,LinkedHashList因为查询速度的原因也使用了散列
异常链,即在捕捉到异常的时候再抛出异常。抛出异常的时候将上一个异常作为参数放入构造器中
如
1
2
3
4
5try {
xxxx
} catch (IOException e) {
throw new ClassNotFoundException("xxxx", e);
}即使try中有return,finally块中的语句还是会执行,但是在finally中抛出异常会直接生吞try中的异常。
在覆盖方法的时候,只能抛出基类方法的异常说明里列出的那些异常(可以是派生的异常)
注意构造器抛出异常导致finally清除出现异常,最好的是在最外围再嵌套一个try catch。
异常匹配会匹配最近的合适的异常。