1、throws出现在方法头,throw出现在方法体
2、throws表示出现异常的一种可能性,并不一定会发生异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。
3、两者都是消极的异常处理方式,只是抛出或者可能抛出异常,是不会由函数处理,真正的处理异常由它的上层调用处理。
在你面前有一个n阶的楼梯,你一步只能上1阶或2阶。请问,当N=11时,你可以采用多少种不同的方式爬完这个楼梯();当N=9时呢?
你需要爬11楼的时候,你倒回去一步只能待在第10楼或者第9楼。换句话说就是到达第9楼的方法次数加上第10楼的方法次数。
如果你待在第10楼,就得待在第9楼或者第8楼
如果你待在第9楼,就得待在第8楼或者第7楼
......
如果你待在第3楼,就得待在第1楼或者第2楼
爬1楼一种方法,
爬2楼两种方法。
爬3楼就是爬1楼方法次数加2楼的方法次数。
用数学表达就是:
a(11)=a(10)+a(9)=144
a(10)=a(9)+a(8)=89
a(9)=a(8)+a(7)=55
a(8)=a(7)+a(6)=34
a(7)=a(6)+a(5)=21
a(6)=a(5)+a(4)=13
a(5)=a(4)+a(3)=8
a(4)=a(3)+a(2)=5
a(3)=a(2)+a(1)=3
a(2)=2
a(1)=1
Java语言系统自带有三个类加载器:
- Bootstrap ClassLoader 最顶层的加载类,主要加载核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。另外需要注意的是可以通过启动jvm时指定-Xbootclasspath和路径来改变Bootstrap ClassLoader的加载目录。比如java -Xbootclasspath/a:path被指定的文件追加到默认的bootstrap路径中。我们可以打开我的电脑,在上面的目录下查看,看看这些jar包是不是存在于这个目录。
- Extention ClassLoader 扩展的类加载器,加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。还可以加载-D java.ext.dirs选项指定的目录。
- Appclass Loader也称为SystemAppClass 加载当前应用的classpath的所有类。
加载顺序:
1. Bootstrap CLassloder
2. Extention ClassLoader
3. AppClassLoader
子类构造器的默认第一行就是super(),默认调用直接父类的无参构造。这也就是一旦一个子类的直接父类没有无参的构造的情况下,必须在自己构造器的第一行显式的指明调用父类或者自己的哪一个构造器。
public:所有类可见。 pirvate:只有同一类内部的方法可见,在有就是内部类也可以访问到。 默认(friendly):包内可见。 protected:继承可见。
类中实例变量可以不用初始化,使用相应类型的默认值即可;方法中的定义的局部变量必须初始化,否则编译不通过。
ConcurrentHashMap实际上时 HashTable的升级版,使用segment来分段和管理锁,并不是synchronized;
HashMap实现的接口有:Serializable, Cloneable, Map<K,V> ,没有实现Cllectio
Arrays.asList()方法返回的列表是Arrays.ArrayList类型的,并不是java.util.ArrayList;
原子性:事务是一组不可分割的操作单元,这组单元要么同时成功要么同时失败(由DBMS的事务管理子系统来实现); 一致性:事务前后的数据完整性要保持一致(由DBMS的完整性子系统执行测试任务); 隔离性:多个用户的事务之间不要相互影响,要相互隔离(由DBMS的并发控制子系统实现); 持久性:一个事务一旦提交,那么它对数据库产生的影响就是永久的不可逆的,如果后面再回滚或者出异常,都不会影响已提交的事务(由DBMS的恢复管理子系统实现的)
事务的四个特性以及对应的子系统:
(1)原子性(A):安全性管理子系统;
(2)一致性(C):完整性管理子系统;
(3)隔离性(I):并发控制子系统;
(4)持久性(D):恢复管理子系统;