Open chengfengjie opened 6 years ago
Hashtable
HashMap
1、HashMap是非synchronized的,并可以接受null作为键和值。 2、Hashtable是synchronized的,这意味这Hashtable是线程安全的,多个线程可以共享一个Hashtable 3、由于Hashtable是线程安全的,所以在单线程环境下它比HashMap要慢,如果你不需要同步,只需要单一线程,那么HashMap性能要比Hashtable好 4、可以通过Map m = Collections.synchronizeMap(hashMap);让HashMap变成同步的
synchronized
null
Map m = Collections.synchronizeMap(hashMap);
抽象类的定义(abstract关键字):
abstract
abstract class Person { abstract void sayHello(); }
1、抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract方法,接口不能提供方法实现 2、抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的 3、接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法 4、一个类只能继承一个抽象类,而一个类却可以实现多个接口
public abstract
public static final
final
1、用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次并且它的值无法被改变,对于成员变量来讲,我们必须在声明时或构造方法中对他赋值 2、用来修饰方法参数,便是在变量的生存期中它的值不能被改变 3、修饰方法,表示该方法不能被重写 4、修饰类,表示该类无法被继承
1、非检测异常: 运行时异常(凡是直接或者间接继承自RuntimeException类的异常),调用代码不能继续执行,需要立即终止的异常,这种异常不需要调用代码显示的捕捉和处理,使代码简洁明了 2、检测异常:其他继承自Exception的异常,代码需要进一步处理和恢复的异常。 3、InterruptedException异常(线程被中断)
RuntimeException
Exception
InterruptedException
异常处理:
1、尽量避免将异常直接显示在页面或者客户端。 2、避免异常对代码层次结构的污染 3、避免忽略异常,如直接输出到控制台,这没有任何意义,这有可能导致更多的异常 4、避免将异常处理包含在循环语句中 5、避免利用Exception捕获所有潜在异常。
StringBuilder
StringBuilder内部有一个字符数组,代码如下:
char[] value; //字符数组 int count; //字符串长度
每一次append操作都是将新的字符串加入到可变长的字符数组中,调用toString()方法时,new一个String对象即可.
append
public String toString() { return new String(value, 0, count);// Create a copy, don't share the array }
注意:StringBuffer实现的功能和StringBuilder一样,只是在操作方法上加了synchronized修饰,是线程安全的
StringBuffer
Java基础
一、
Hashtable
和HashMap
的区别1、
HashMap
是非synchronized
的,并可以接受null
作为键和值。 2、Hashtable
是synchronized
的,这意味这Hashtable
是线程安全的,多个线程可以共享一个Hashtable
3、由于Hashtable
是线程安全的,所以在单线程环境下它比HashMap
要慢,如果你不需要同步,只需要单一线程,那么HashMap
性能要比Hashtable
好 4、可以通过Map m = Collections.synchronizeMap(hashMap);
让HashMap
变成同步的二、抽象类与接口的区别
抽象类的定义(
abstract
关键字):1、抽象类可以提供成员方法的实现细节,而接口中只能存在
public abstract
方法,接口不能提供方法实现 2、抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final
类型的 3、接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法 4、一个类只能继承一个抽象类,而一个类却可以实现多个接口三、
final
关键字的使用1、用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次并且它的值无法被改变,对于成员变量来讲,我们必须在声明时或构造方法中对他赋值 2、用来修饰方法参数,便是在变量的生存期中它的值不能被改变 3、修饰方法,表示该方法不能被重写 4、修饰类,表示该类无法被继承
四、异常分类和处理机制
1、非检测异常: 运行时异常(凡是直接或者间接继承自
RuntimeException
类的异常),调用代码不能继续执行,需要立即终止的异常,这种异常不需要调用代码显示的捕捉和处理,使代码简洁明了 2、检测异常:其他继承自Exception
的异常,代码需要进一步处理和恢复的异常。 3、InterruptedException
异常(线程被中断)异常处理:
1、尽量避免将异常直接显示在页面或者客户端。 2、避免异常对代码层次结构的污染 3、避免忽略异常,如直接输出到控制台,这没有任何意义,这有可能导致更多的异常 4、避免将异常处理包含在循环语句中 5、避免利用
Exception
捕获所有潜在异常。五、
StringBuilder
内部实现机制StringBuilder
内部有一个字符数组,代码如下:每一次
append
操作都是将新的字符串加入到可变长的字符数组中,调用toString()方法时,new一个String对象即可.注意:
StringBuffer
实现的功能和StringBuilder
一样,只是在操作方法上加了synchronized
修饰,是线程安全的