Java基础面试题16~30

面试题上 :上半部分面试题

16.接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?

  • 接口可以继承接口
  • 抽象类可以实现接口
  • 抽象类可以继承具体类也可以继承抽象类

17.Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?
都可以

18.内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
可以引用,包括私有属性

19.Java 中的final关键字有哪些用法?

  • 修饰类,不能被继承
  • 修饰方法,不能被重写
  • 修饰属性,不能改变值(常量);

20.下面程序的运行结果

class HelloA {
    //构造方法
    public HelloA() {
        System.out.println("Hello A!父类构造方法");
    }

    {
        System.out.println("i'm A class.父类非静态代码块");
    }

    static {
        System.out.println("static A 父类静态代码块");
    }
}
public class HelloB extends HelloA {
    //构造方法
    public HelloB(){
        System.out.println("Hello B! 构造方法");
    } //非静态代码块
    {
        System.out.println("i'm B class.非静态代码块");
    } //静态代码块
    static{
        System.out.println("static B 静态代码块");
    }
    public static void main(String[] args) {
        System.out.println("---start---");
        new HelloB();
        new HelloB();
        System.out.println("---end---");
    }
}

执行结果:

static A 父类静态代码块
static B 静态代码块
---start---
i'm A class.父类非静态代码块
Hello A!父类构造方法
i'm B class.非静态代码块
Hello B! 构造方法
i'm A class.父类非静态代码块
Hello A!父类构造方法
i'm B class.非静态代码块
Hello B! 构造方法
---end---

21.如何实现字符串的反转及替换

public static String reverse(String originStr) {
        if (originStr == null || originStr.length() <= 1) 
                   return originStr;        
	return reverse(originStr.substring(1)) + originStr.charAt(0);
	    }

22.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
会,在返回结果前调用,如果finally中修改了返回值,则返回修改后的值.

23.运行时异常与受查异常有何异同

  • 运行时异常没有要求捕获
  • 受查异常要求捕获或抛出异常

24.List、Set、Map是否继承自Collection接口?
不是,List,Set 继承自Collection接口 ,Map不是

25.阐述ArrayList、Vector、LinkedList的存储性能和特性

扫描二维码关注公众号,回复: 9546845 查看本文章
  • ArrayList : 基于数组实现,性能较高,非线程安全,插入删除慢,索引快
  • Vector : 基于数组实现,性能低,线程安全
  • LinkedList : 基于链表实现,性能较高,非线程安全,插入删除快,索引慢;

26.Collection和Collections的区别?

  • Conllection 是一个接口
  • Conllections 是一个工具类,辅助容器类操作,有排序,搜索,线程安全化

27.Collections工具类中的sort()方法如何比较元素?
在这里插入图片描述
一种是传入容器对象
另一种是传入容器对象后,还必须传入Comparator子类的compare()方法

28.Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?

  • sleep(),交出cpu,不会释放锁
  • wait(),释放锁,进入等待池,等待notify()

29.线程池基本状态
在这里插入图片描述
30.synchronized和java.util.concurent.locks.Lock的区别

  • 相同点:Lock能实现synchronized的所有功能
  • 不同点:Lock性能好于synchronized,不强制要求获取锁.synchronized会主动释放锁,Lock需要手工释放锁,最好在finally中释放
发布了42 篇原创文章 · 获赞 13 · 访问量 6496

猜你喜欢

转载自blog.csdn.net/weixin_43508555/article/details/104555848