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.静态嵌套类和内部类的不同

参考 https://blog.csdn.net/hguisu/article/details/7270086

4.动态代理和静态代理的区别

参考 http://layznet.iteye.com/blog/1182924#comments

5.Java的类加载器的种类有哪些?

参考好文 https://www.ibm.com/developerworks/cn/java/j-lo-classloader/#minor1.1

6.类什么时候被初始化

参考 http://www.importnew.com/6579.html

7.Java类加载器体系之ClassLoader双亲委托机制

参考 https://blog.csdn.net/javazejian/article/details/73413292

8.描述一下JVM加载class

参考 http://samuschen.iteye.com/blog/1119539

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)需要指定一个睡眠时间,时间一到会自动唤醒

猜你喜欢

转载自blog.csdn.net/tryandfight/article/details/79701951