Java基础每日10题——第五天
1.List a = new ArrayList()和ArrayList a = new ArrayList()的区别?
第一种定义,是很好的面向接口编程的习惯。
比如你有这么一个方法供别人调用:
public List getXXXList(){
List list = new ArrayList();
…
return list;
}
现在是new ArrayList(),如果万一以后要改成new LinkedList的话,这个方法的返回类型就不需要去改变,并且调用这个方法的所有类都不需要修改,这样就降低了修改程序的成本和风险,提高了程序的可复用性,这就是面向接口编程的好处。
Java的多态,List只是定义了很多接口,而对于这些接口,有各种各样的不同实现方法,ArrayList和LinkedList中的实现方法就各有不同,会具备各自的特性和特有方法。当你仅仅使用List的通用接口方法时,定义成List是非常好的习惯。
如果写共通类共通方法的话,建议少用特性,多面向接口。
2.数据插入、数据删除、数据更新、数据查询ArrayList和LinkedList的对比
数据插入时:LinkedList
数据删除时:LinkedList
数据更新时:ArrayList —— LinkedList地址不一样,查询慢
数据查询时:ArrayList
3.静态嵌套类和内部类的不同
4.动态代理和静态代理的区别
5.Java的类加载器的种类有哪些?
参考好文 https://www.ibm.com/developerworks/cn/java/j-lo-classloader/#minor1.1
6.类什么时候被初始化
7.Java类加载器体系之ClassLoader双亲委托机制
参考 https://blog.csdn.net/javazejian/article/details/73413292
8.描述一下JVM加载class
9.获得一个类对象有哪些方式
方法1:类型.class,例如:String.class
方法2:对象.getClass(),例如:"hello".getClass()
方法3:Class.forName(),例如:Class.forName("java.lang.String")
10.wait()和sleep()的区别
sleep来自Thread类,wait来着Object类
调用sleep()方法的过程中,线程不会释放对象锁。而调用wait方法线程会释放对象锁
sleep睡眠后不让出系统资源,wait让出系统资源其他线程可以占用CPU
sleep(milliseconds)需要指定一个睡眠时间,时间一到会自动唤醒