1、synchronized修饰的代码在执行异常时,jdk会自动释放线程占有的锁,不需要程序员去控制释放锁,因此不会导致死锁现象发生;
Lock发生异常时,如果程序没有通过unLock()去释放锁,则很可能造成死锁现象,因此Lock一般都是在finally块中释放锁;
2、Lock锁仅适用于代码块范围,而synchronized可以锁住代码块、对象实例、类;
String s =new String (“syz”);创建了几个String对象
1.如果String常理池中,已经创建"xyz",则只创建了一个对象new String("xyz");
2.如果String常理池中,没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",一个对象new String("xyz")。
访问修饰符的作用域
默认情况下,属于包访问,即能被类本身以及同一个包中的类访问。
冒泡排序
public static void sortArray(int[] arr) {
int temp;
for(int i=0;i
for(int j=0;j
if(arr[j]>arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
HashMap与HashTable的区别
HashMap:允许null键值(key = null,hash值为0),由于非线程安全,在只有一个线程访问的情况下,效率高于Hashtable。但是在多线程环境下一般使用CurrentHashMap,它的扩展性比HashTable好。
HashTable:不能将null作为key或者value。方法是同步的,线程安全。
List、Set和Map的区别
List:是存储单列数据的集合,存储有顺序,允许重复。继承Collection接口。
常见的方法:add( )、remove( )、clear( )、get( )、contains( )、size( )
1、ArrayList : 长度可变的数组,可以对元素进行随机的访问,向ArrayList中插入与删除元素的速度慢。 JDK8 中ArrayList扩容的实现是通过grow()方法里使用语句newCapacity = oldCapacity + (oldCapacity >> 1)(即1.5倍扩容)计算容量,然后调用Arrays.copyof()方法进行对原数组进行复制。
2、LinkedList :采用链表数据结构,插入和删除速度快,但访问速度慢。
Set:是存储单列数据的集合,存储无顺序,不允许重复。继承Collection接口。
常见的方法:add( )、remove( )、clear( )、get()、contains( )、size( )
1、HashSet: HashSet按照哈希算法来存取集合中的对象,存取速度比较快。当HashSet中的元素个数超过数组大小*loadFactor(默认值为0.75)时,就会进行近似两倍扩容(newCapacity = (oldCapacity << 1) + 1)。
2、TreeSet :TreeSet实现了SortedSet接口,能够对集合中的对象进行排序。
Map:存储键和值这样的双列数据的集合,存储无顺序,键(key)不能重复。
常见的方法:put( )、get( )、remove( )、clear( )、containsKey( )、containsValue( )、keySet( )、values( )、size( )
Java对象的创建方式
1、使用new关键字
2、使用反射机制创建对象:
(1)使用Class类的newInstance方法
(2)java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。
3、使用clone方法:即将实例化的类先实现Cloneable接口并实现其定义的clone方法
4、使用反序列化(ObjectInputStream,ObjectOutputStream)
error和exception有什么区别
Error(错误)表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题。比如:内存资源不足等。对于这种错误,程序基本无能为力,除了退出运行外别无选择,它是由Java虚拟机抛出的。
Exception(违例)表示需要捕捉或者需要程序进行处理的异搜索常,它处理的是因为程序设计的瑕疵而引起的问题或者在外的输入等引起的一般性问题,是程序必须处理的。
Exception又分为运行时异常,受检查异常。
运行时异常,表示无法让程序恢复的异常,导致的原因通常是因为执行了错误的操作,建议终止程序,因此,编译器不检查这些异常。
受检查异常,是表示程序可以处理的异常,也即表示程序可以修复(由程序自己接受异常并且做出处理), 所以称之为受检查异常。