Java基础面试题以及几个很有用的刷题网站.docx
需积分: 0 118 浏览量
更新于2019-06-13
6
收藏 62KB DOCX 举报
### Java基础面试题知识点解析
#### 一、面向对象的三个基本特征
- **封装**:将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象的内部信息,而是通过该类提供的方法来实现对内部信息的操作和访问。
- **继承**:允许在一个现有类的基础上构建新类,新类称为子类或派生类,现有类称为基类或父类。子类继承了父类的数据结构和方法,并可以根据需要增加新的数据成员或覆盖父类的方法。
- **多态**:指同一个操作作用于不同的对象,会产生不同的执行结果。具体表现在方法的重写(Override)和重载(Overload)。
#### 二、多态的优点
- **可替换性**:子类可以替换父类出现的位置,提高了代码的复用性和可维护性。
- **可扩充性**:系统可以通过定义新的子类而无需修改已有代码的方式进行扩展。
- **接口性**:通过超类提供一个公共接口,由子类来实现具体的细节,提高了代码的灵活性。
- **灵活性**:多态使得设计更加灵活,能够适应不断变化的需求。
- **简化性**:通过多态,可以减少代码冗余,使得程序结构更为清晰。
#### 三、实现多态的方式
1. **接口实现**:通过实现接口,类可以在运行时表现出多种形态。
2. **继承父类重写方法**:子类继承父类并重写父类的方法,使得子类对象可以表现出不同于父类的行为。
3. **同一类中进行方法重载**:通过在同一类中定义多个同名但参数不同的方法来实现多态。
#### 四、虚拟机如何实现多态
- 虚拟机通过动态绑定技术实现多态。在运行时确定对象的实际类型,并根据实际类型调用相应的方法。
#### 五、接口的意义
- **规范**:接口定义了一组方法,作为类之间的一种约定。
- **扩展**:通过实现多个接口,一个类可以扩展多种行为。
- **回调**:接口可以用于回调机制,允许多个实现回调同一方法。
#### 六、抽象类的意义
- **提供公共类型**:抽象类作为多个子类的共同基础。
- **封装重复内容**:抽象类可以封装子类共有的属性和方法。
- **定义抽象方法**:抽象类中的抽象方法需要被子类实现,确保所有子类都实现了特定的功能。
#### 七、接口与抽象类的区别
- **实现限制**:类可以实现多个接口,但只能继承一个抽象类。
- **方法实现**:接口中的方法默认都是public abstract的,抽象类可以包含非抽象方法。
- **成员变量**:接口中的成员变量默认是public static final的,抽象类中的成员变量可以是任意类型的。
#### 八、父类的静态方法能否被子类重写
- **不能**:静态方法不属于对象实例,因此不能被重写,子类中的同名静态方法会被视为隐藏而非重写。
#### 九、不可变对象
- **定义**:对象创建后其状态不能改变,任何更改操作都会创建一个新的对象,例如String、Integer等包装类。
#### 十、静态变量与实例变量的区别
- **存储位置**:静态变量存放在方法区,属于类;实例变量存放在堆中,属于对象。
- **生命周期**:静态变量随着类的加载而加载,随着类的消失而消失;实例变量随着对象的创建而存在,随着对象的销毁而消失。
#### 十一、能否创建包含可变对象的不可变对象
- **可以**:只要不暴露可变对象的引用,就可以创建这样的不可变对象。如果需要修改可变对象,则返回它的拷贝。
#### 十二、Java创建对象的方式
- **使用new关键字**:最常用的方式,明确指定对象的创建。
- **通过反射**:利用Class类或Constructor类的newInstance()方法创建对象。
- **使用clone方法**:实现Cloneable接口并通过clone()方法复制对象。
- **通过序列化**:通过反序列化过程创建对象。
#### 十三、switch语句的支持类型
- 在Java 1.7之前,switch支持byte, short, char, int或它们的封装类型以及枚举类型。
- Java 1.7之后,switch还支持String类型。
#### 十四、关于字符串的比较
- **Strings1="ab"** 和 **Strings2="a"+"b"**:s2在编译时被优化为"ab",存放在常量池中;s5=s3+s4则是在运行时创建的新对象,因此s5==s2返回false。
#### 十五、String对象的intern()方法
- intern()方法检查字符串池中是否已经包含一个等于此String对象的字符串,如果存在,则返回池中的字符串;如果不存在,则将此String对象添加到池中并返回池中的字符串。
#### 十六、Object类的公共方法
- **equals()**:比较两个对象是否相等。
- **clone()**:创建对象的副本。
- **getClass()**:获取对象的类信息。
- **notify()** 和 **notifyAll()**:唤醒等待队列中的线程。
- **wait()**:让当前线程等待。
- **toString()**:返回对象的字符串表示形式。
#### 十七、Java中的四种引用类型
- **强引用**:最常用的引用类型,被强引用关联的对象不会被垃圾回收器回收。
- **软引用**:在内存不足时,软引用关联的对象可能会被回收。
- **弱引用**:弱引用的对象随时都可能被回收。
- **虚引用**:虚引用的主要用途是跟踪对象的垃圾回收状态。
#### 十八、WeakReference与SoftReference的区别
- **软引用**:当内存空间足够时,软引用可以长时间存在,只有在内存不足时才会被回收。
- **弱引用**:只要发生垃圾回收,不管内存是否足够,弱引用都会被回收。弱引用比软引用更容易被回收。
通过以上内容的详细介绍,我们可以看出Java语言的强大之处不仅在于其丰富的特性和灵活性,更在于其严谨的设计思想和强大的运行时机制。对于求职者来说,掌握这些基础知识是非常重要的,不仅能帮助他们在面试中脱颖而出,还能为今后的职业发展打下坚实的基础。