duang,duang!!duang.java.mustReadTips

成员变量的定义是绝对安全的,对象创建时会自动初始化,布尔值初始化为false,基本数据类型初始化为0,对象类型(包括String)初始化为null。
通过clone方法,可以不调用构造函数而直接创建对象,虽然object类中定义了clone方法,但是一个对象中调用clone方法会导致异常,除非该对象实现了cloneable接口,当创建一个对象代价很高时,clone方法可以称成为一种有用的优化方式。通过复制构造函数(以已有实例作为其唯一参数)显得更简单,代价可以忽略不计。
若果单一类型的对象具备不同的行为,则认为该语言具备多态性,如果某个类的子类可以被赋给其基础类型的变量,那么就认为这个类是多态的。不要过多类型转换,遵守静态类型准则。子类型可以取代父类型是多态性的一个重要特征。
在java中,参数都是按值传递,函数的参数就是调用时所传递值得一个副本。另外在java中,大部分情况下,变量是对象的引用,java只是复制引用,而不是整个对象,应用就是所传递的值。

Throwable包括Error Errors和Exception
Exception包括 Checked exceptions
和Runtime exception 即Unchecked exceptions

Error类及其子类是保留类,只用于Dalvik运行时环境本身的错误。虽然可以写代码来捕获Error或Throwable,但实际上,无法捕捉到这些错误。可许不可行,尝试捕捉Throwable或Error的代码绝对是徒劳的。

list是一种有序的集合,list中的对象和整数从0到length-1一一映射,list中可能存在重复元素。
map和list类似,list是把一组整数映射到一组对象中,而map是把一组key对象映射到一组value对象。
Iterator返回集合中的元素,其通过next方法,每次返回一个元素,
Iterator是对集合中所有元素进行操作的一种较好的方式,一般不建议采用下面这种遍历方法:

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是一个支持数组特征的list,他在执行索引查找操作时很快,但是涉及改变其大小的操作速度很慢。
LinkList可以快速改变大小,但是查找速度很慢。
HashSet是一个以hash方式实现的set,在hashset中,增删元素,判断是否包含某个元素及获取hashset的大小这些操作都可以在常数级时间内完成,hashset可以为空。
HashMap是使用hash表作为索引,其实现了map接口,在hashmap中,增删元素,判断是否包含某个元素及获取hashset的大小这些操作都可以在常数级时间内完成。他最多只可以包含一个空的key值,但是可以有任意个value值为空的元素。
TreeMap,TreeMap是一个有序的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
}
}
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。