java基础面试题(六)

  1. 什么叫做内部类?内部类有几种?
    答:定义在类内部的类称为内部类。内部类分为静态内部类,成员内部类,局部内部类,匿名内部类4种。

  2. 什么是静态内部类?
    答:定义在类内部的静态类称为静态内部类。静态内部类里可以有静态变量,方法和构造函数等,静态内部类不能访问外部类的成员变量,只能访问外部类的类变量。静态内部类通过"外部类.静态内部类"的方式来调用。静态内部类属于类级别。

  3. 什么是成员内部类?
    答:定义在类内部的非静态类称为成员内部类。成员内部类是非静态的,所以无法定义静态方法和变量,不过final修饰的除外。成员内部类属于对象级别。

  4. 什么是局部内部类?
    答:定义在一个方法内部的类叫做局部内部类。局部内部类如果要访问局部变量,那么这个局部变量就要声明为final类型。

  5. 什么是匿名内部类?
    答:一个没有具体命名的内部类就叫做匿名内部类。匿名内部类通过继承一个父类或者实现一个接口的方式来直接定义并使用。

  6. 说说对hashCode和equals方法的一些理解?
    答:equals结果相等的两个对象,hashcode的值一定是相等的。
    equals结果不相等的两个对象,hashcode的值不一定是不相等的。
    hashcode的值不相等,那么两个对象的equals结果一定是不等的。
    hashcode的值相等,那么两个对象的equals结果可能相等,也可能不等。

  7. 如果两个对象equals的结果是相等,他们的hashcode的值可以是不同的么?
    答:不行,因为equals结果相等的两个对象,hashcode的值一定是相等的。

  8. 深拷贝和浅拷贝有什么区别?
    答:深拷贝会新生成一个引用和内存空间,然后这个新的引用会指向新开的这个内存空间,所以修改被拷贝对象的值不会影响到深拷贝对象的值。而浅拷贝就是多了个引用指向被拷贝对象的内存空间,一旦被拷贝对象的值发生变化,浅拷贝对象也会发生变化。

  9. 接口是否可多继承(extends)接口?
    答: 可以。因为不允许类多继承是因为,如果继承的多个类中有相同方法,那么子类无法决定该继承哪一个,而接口不同,都是抽象方法,继承谁的都行。这个写下代码会理解的清楚一些:

Animal类:

public interface Animal {
    void eat();

    void run();
}

Person类:

public interface Person {
    void eat();

    void go();
}

Demon类继承Person类和Animal类:

public interface Demon extends Person, Animal {
}

创建一个TestMain类实现Demon接口:
在这里插入图片描述
可以发现需要重写的eat()方法只有Person类的,Animal类只有run()方法要被重写。那为什么是Person类的eat()方法要被实现呢?这是因为在继承时Person类的顺序在Animal类的前面,换个位置,就变成要实现Animal类的eat()方法了。

  1. 如何实现字符串的替换?
    答: replace()方法:替换指定字符
    replaceAll()方法:替换自定字符串
    replaceFirst()方法:替换第一个出现的指定字符串
发布了156 篇原创文章 · 获赞 138 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104141664