成员变量的定义是绝对安全的,对象创建时会自动初始化,布尔值初始化为false,基本数据类型初始化为0,对象类型(包括String)初始化为null。
通过clone方法,可以不调用构造函数而直接创建对象,虽然object类中定义了clone方法,但是1个对象中调用clone方法会致使异常,除非该对象实现了cloneable接口,当创建1个对象代价很高时,clone方法可以称成为1种有用的优化方式。通过复制构造函数(以已有实例作为其唯1参数)显得更简单,代价可以疏忽不计。
若果单1类型的对象具有不同的行动,则认为该语言具有多态性,如果某个类的子类可以被赋给其基础类型的变量,那末就认为这个类是多态的。不要过量类型转换,遵照静态类型准则。子类型可以取代父类型是多态性的1个重要特点。
在java中,参数都是按值传递,函数的参数就是调用时所传递值得1个副本。另外在java中,大部份情况下,变量是对象的援用,java只是复制援用,而不是全部对象,利用就是所传递的值。
Throwable包括Error Errors和Exception
Exception包括 Checked exceptions
和Runtime exception 即Unchecked exceptions
Error类及其子类是保存类,只用于Dalvik运行时环境本身的毛病。虽然可以写代码来捕获Error或Throwable,但实际上,没法捕捉到这些毛病。可许不可行,尝试捕捉Throwable或Error的代码绝对是徒劳的。
list是1种有序的集合,list中的对象和整数从0到length⑴逐一映照,list中可能存在重复元素。
map和list类似,list是把1组整数映照到1组对象中,而map是把1组key对象映照到1组value对象。
Iterator返回集合中的元素,其通过next方法,每次返回1个元素,
Iterator是对集合中所有元素进行操作的1种较好的方式,1般不建议采取下面这类遍历方法:
for(int i = 0;i<list.size;i++){
String s = list.get(i);
//...
}
建议采取以下方式:
for(Iterator<String>i = list.iterator();i.hasNext();){
String s = list.get(i);
//...
}
后者简化以下:
for(String s :list){
//...
}
ArrayList是1个支持数组特点的list,他在履行索引查找操作时很快,但是触及改变其大小的操作速度很慢。
LinkList可以快速改变大小,但是查找速度很慢。
HashSet是1个以hash方式实现的set,在hashset中,增删元素,判断是不是包括某个元素及获得hashset的大小这些操作都可以在常数级时间内完成,hashset可以为空。
HashMap是使用hash表作为索引,其实现了map接口,在hashmap中,增删元素,判断是不是包括某个元素及获得hashset的大小这些操作都可以在常数级时间内完成。他最多只可以包括1个空的key值,但是可以有任意个value值为空的元素。
TreeMap,TreeMap是1个有序的map,如果实现了comparable接口,则TreeMap中的对象是按自然数排序,如果没有实现comparable接口,则是根据传递给TreeMap构造函数的comparable类来排序。
java中对象锁是可重入的reentrant,以下代码非常安全,不会造成任何死锁:
class SafeSeizure{
private Object lock = new Object();
public void method1(){
synchronized(lock){
//do stuff
method2();
}
}
public void method2(){
synchronized(lock){
//do stuff
}
}
}