JAVA基础知识复习(一)

1.String str="i"与 String str=new String("i")一样吗?

不一样,前一个是先去常量池中去找看看有没有“i”如果有的话,直接引用,否则就是在常量池中新建一个对象;

后一种,是直接在JVM的堆内存中去新建一个对象。

常量池,在JDK1.6之前是放在JVM的方法区中,JDK1.7后放到的堆内存中了

2.普通类和抽象类有什么区别?

普通类不能有抽象方法,抽象类可以有抽象方法。

普通类可以直接实例化,抽象类不能直接实例化。

3.抽象类能使用 final 修饰吗?

不能,如果用了final的话抽象类就不能被继承了,而这与抽象类的设计初衷相违背了。

final修饰在变量上说明该变量不能被修改,修饰在方法中说明该方法不能被覆写。

4.JAVA中容器有哪些?

 

JAVA基础知识复习(一)_第1张图片

5.HashMap 和 Hashtable 有什么区别?

HashMap是线程不安全的,而HashTable是线程安全,底层使用synchronized实现

HashMap性能比HashTable要好

6.ArrayList,linkedList,Vector

ArrayList:底层使用数组实现的,线程不安全,随机访问效率高,增删效率不高因为需要移动数据

LinkedList:底层使用双向链表实现,随机访问效率不高,需要一个节点一个节点的查找过去,增删效率高因为只需要修改前后相关节点的指针指向就行了

Vector:线程安全的数组型集合

7.sleep() 和 wait() 有什么区别?

sleep():Thread类的静态方法,不会释放锁,一定时间后自动唤醒

wait():Object的方法,会释放锁,需要notify(),notifyAll()唤醒

8.如何创建线程池?

1.ExecutorService newExecutorService = Executors.newCachedThreadPool();//可缓存线程池

2.Executors.newFixedThreadPool (3);//定长线程池

3.Executors.newScheduledThreadPool //定长线程池,支持周期性任务的执行

4.Executors.newSingleThreadExecutor //单线程线程池,池中就一个线程,保证任务的执行顺序是按指定优先级执行

以上线程池由于内部默认使用的是 无界队列,高并发的情况下可能出现OOM

推荐做法,使用有界队列来构造线程池。:ThreadPoolExecutor poolExecutor=new ThreadPoolExecutor(4,10,5,TimeUnit.SECONDS,new LinkedBlockingQueue(10));

9.深拷贝和浅拷贝区别是什么?

浅拷贝只是复制了对象的引用,而深拷贝是把对象以及值都复制了,修改原有对象不会对该对象有影响。

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(JAVA基础复习)